
рдХрдИ рдпреБрд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рддрд░рд╣, рдЬрдм рдиреМрдХрд░реА / рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдЦреЛрдЬрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдореИрдВ рд╢рд╛рдВрдд рдЖрдИрдЯреА рдХрдВрдкрдирд┐рдпреЛрдВ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореИрдВрдиреЗ JetBrains рдХреЗ рд░реИрдВрдХ рдореЗрдВ рдЬрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдХрдЯ рдХреЗ рддрд╣рдд рдореИрдВ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВред
"рд▓рдЧрднрдЧ" рд╕рдлрд▓ рдХреНрдпреЛрдВ рд╣реБрдЖ?
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ рдкрд╛рд╕ рддреБрд░рдВрдд рдРрд╕рд╛ рдкреНрд░рд╢реНрди рд╣реИред
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдЙрдкрд▓рдмреНрдзрд┐рдпреЛрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдФрд░ рдПрдХ рдЕрдЪреНрдЫреЗ рдХреМрд╢рд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЪреНрдЫрд╛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдкрд┐рдЫрд▓реЗ 8-9 рд╡рд░реНрд╖реЛрдВ рд╕реЗ рджрд┐рди-рдкреНрд░рддрд┐рджрд┐рди рд╕реБрдзрд╛рд░ рд░рд╣рд╛ рд╣реВрдВред
рдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдкреВрд░рд╛ рдХрд┐рдпрд╛ (рдФрд░ рдпрд╣ рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ), рдкрд╣рд▓реЗ рдЬреЗрдмреА рдХреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рдХрд╛ рджреМрд░рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдореЗрд░реЗ рд╢рд╣рд░ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ, рдПрдЪрдПрдЪ рдФрд░ рдХрдВрдкрдиреА рдХреЗ рдХреБрдЫ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдмрд╛рдд рдХреА, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдмрд┐рдирд╛ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдХрд╛рд░рдг рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ JetBrains рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХреЗ рд▓рд┐рдП рдЫрд╛рддреНрд░реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд▓рд╣рд╛рд▓ рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл 11 рд╡реАрдВ рд╕реЗ рд╕реНрдирд╛рддрдХ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдкрд░реАрдХреНрд╖рд╛рдПрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
рдЦреИрд░, рдпрд╣ рдПрдХ рдФрд░ рдкреВрд░реЗ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдЦреАрдВрдЪрдиреЗ рдФрд░ рдЕрдЧрд▓реЗ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрд╡рд╕рд░ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдФрд░ рдкрд░реАрдХреНрд╖рдг рдкрд░реАрдХреНрд╖рдг рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдЬрдорд╛ рдХрд░рдиреЗ рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдИ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдореБрдЭреЗ рднреА рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИ, рдЗрди рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЕрдЧрд▓реЗ рд╡рд░реНрд╖ рдХреЛрдИ рднреА рдЗрдЪреНрдЫреБрдХ рдЫрд╛рддреНрд░ рдЬреЗрдмреА рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рдЕрдиреБрдорд╛рдирд┐рдд рд╕реНрддрд░ рдХреЗ рд╕рд╛рде рдЦреБрдж рдХреЛ рдкрд░рд┐рдЪрд┐рдд рдХрд░ рд╕рдХреЗред рдЬрд┐рд╕рдХрд╛ рд╕рд╛рдордирд╛ рдЙрд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдХрд┐рд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкрдирд╛ рдЬреНрдЮрд╛рди рдмрдврд╝рд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдореИрдВрдиреЗ рдХреЛрдЯрд▓рд┐рди рдХреЗ рд▓рд┐рдП рдХреЛрд░реЛрдЯрд┐рди рдбрд┐рдмрдЧрд░ рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд┐рдпрд╛ред
рдЗрд╕ рд╕рд╛рд▓ рдЗрд╕реЗ рдорд╛рд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХреЗ рджреМрд░рд╛рди рдЗрд╕ рдЯреАрдо рдХрд╛ рдХрд╛рд░реНрдп рдбрд┐рдмрдЧрд░ рдХреЗ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдФрд░ рдЖрдИрдбреАрдИ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдПрдХреАрдХрд░рдг рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдирд╛ рд╣реЛрдЧрд╛ред
рдпрд╣ рдХрд╛рд░реНрдп рдереЛрдбрд╝рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ - рдПрдХ рдЫреЛрдЯреЗ рдкреАрдПрд▓ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред
рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдЬрдЯрд┐рд▓ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рдкрд░реАрдд рд╣реИред рдЕрдиреБрд╡рд╛рджрдХ рдФрд░ рдПрдХ рд╢рд╛рдВрдд рдХреМрд╢рд▓ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдХрд┐рд╕реА рднреА рдЧрд╣рди рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдЬреЛ рд▓реЛрдЧ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХрдо рд╕реЗ рдХрдо рдпреЗ рдореВрд▓ рдмрд╛рддреЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЗрд╕ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдиреЗ "рдкреНрд░рддрд┐рдпреЛрдЧрд┐рдпреЛрдВ" рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдЬреАрдердм рдкрд░ рдЦреЛрдЬ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рд▓рдЧрднрдЧ 6-7 рдЦрд╛рд▓реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдЦрд┐рд▓рд╛рдл рдпрд╛ рдХреЛрдб рдХреЗ рдХреБрдЫ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде 1-2 рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдвреЗ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд▓реЛрдЧреЛрдВ рдиреЗ рд╣рд╛рд░ рдорд╛рди рд▓реАред рд╢рд╛рдпрдж рдореИрдВ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рджреЗрдЦ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдкрд░рд┐рдгрд╛рдо рдореБрдЭреЗ рдЦреБрд╢ рдирд╣реАрдВ рдХрд░рддреЗ рдереЗред рдпрджрд┐ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдЙрди рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ - рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ рдЪрд░рдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдкрд░ рдмреИрдардирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ рдФрд░ рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕рд╕реЗ рдирд┐рдкрдЯреЗрдВрдЧреЗред
рд╕реНрд╡рдпрдВ рдЦреЛрдЬ рдХрд╛ рдкрд╛рдардЙрджреНрджреЗрд╢реНрдп: рддреБрдЪреНрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЧреБрдУ рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рдХреЛрдб рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рдзреНрдпрд╛рди рджреЗрдВ: рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╡рд┐рд╡рд░рдг рдореЗрдВ, рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЫреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡реЗ рдЖрдкрдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рдмрдиреЗ рд░рд╣рддреЗ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рддреЛ (рдпрд╣рд╛рдВ рд╡рд╣ рдореЗрд▓ рд▓рд┐рдЦреЗрдВ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ)ред
рдПрдХ рдЧреБрдУ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд╛рдЗрди рд╕рдм (рд╕рдмрдирд╛рдо) рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ (рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЕрдВрддрд┐рдо рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдВрддрд┐рдо рд╣реИ)ред рдирд┐рд╖реНрдкрд╛рджрди рдЙрдк рдореБрдЦреНрдп рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╢рд░реАрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ рдЕрд▓рдЧ рд▓рд╛рдЗрди рдкрд░ рд╣реИред рдПрдХ рдкрдВрдХреНрддрд┐ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдорд╣рддреНрд╡рд╣реАрди рдЯреИрдм рдпрд╛ рд╕реНрдерд╛рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЕрдирджреЗрдЦреА рдХреА рдЬрд╛рддреА рд╣реИред Guu рдкрд░ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИред
рдЧреБрдУ рдХреЗ рдХреЗрд╡рд▓ рддреАрди рдСрдкрд░реЗрдЯрд░ рд╣реИрдВ: - рд╕реЗрдЯ (varname) (рдирдпрд╛ рдореВрд▓реНрдп) - рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдорд╛рди рд╕реЗрдЯ рдХрд░рдирд╛ред - рдХреЙрд▓ (рд╕рдмрдирд╛рдо) - рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмреБрд▓рд╛рдУред рдХреЙрд▓ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред - рдкреНрд░рд┐рдВрдЯ (varname) - рд╕реНрдХреНрд░реАрди рдкрд░ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдорд╛рди рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВред
рдЧреБрдУ рдореЗрдВ рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЧреБрдВрдЬрд╛рдЗрд╢ рд╣реИред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд╛рдЗрди a = 2 рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред
рдЙрдк рдореБрдЦреНрдп
рд╕реЗрдЯ 1
рдлреВ рдХреЛ рдмреБрд▓рд╛рдУ
рдкреНрд░рд┐рдВрдЯ рдХрд░реЗрдВ
рдЙрдк рдлреВ
2 рд╕реЗрдЯ рдХрд░реЗрдВ
рдФрд░ рдпрд╣рд╛рдБ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ:
рдЙрдк рдореБрдЦреНрдп
рдореБрдЦреНрдп рдмреБрд▓рд╛рдУ
рдЖрдкрдХреЛ рдЧреБрдУ рдХреЗ рд▓рд┐рдП рдЪрд░рдг-рджрд░-рдЪрд░рдг рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬрдм рдпрд╣ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдбрд┐рдмрдЧрд░ рдХреЛ рдЙрдк рдореБрдЦреНрдп рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдкрд╣рд▓реЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдкрд░ рд░реБрдХрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХрдорд╛рдВрдб рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдбреАрдмрдЧрд░ рдХрдорд╛рдВрдб рдХрд╛ рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯ:
i - рдЪрд░рдг рдореЗрдВ, рдбрд┐рдмрдЧрд░ рдХреЙрд▓ (рд╕рдмрдирд╛рдо) рдХреЗ рдЕрдВрджрд░ рдЬрд╛рддрд╛ рд╣реИред
рдУ - рд╕реНрдЯреЗрдк рдУрд╡рд░, рдбрд┐рдмрдЧрд░ рдХреЙрд▓ рдХреЗ рдЕрдВрджрд░ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред
рдЯреНрд░реЗрд╕ - рдкреНрд░рд┐рдВрдЯ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рдореБрдЦреНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрди рдирдВрдмрд░реЛрдВ рдХреЗ рд╕рд╛рде ...
var - рд╕рднреА рдШреЛрд╖рд┐рдд рдЪрд░ рдХреЗ рдкреНрд░рд┐рдВрдЯ рдореВрд▓реНрдпред
рдбрд┐рдмрдЧрд░ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕рдВрдЪрд╛рд░ рдкреНрд░рд╛рд░реВрдк рдКрдкрд░ рдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдк рдпрд╛ рддреЛ рдПрдХ рдиреНрдпреВрдирддрд░ GDB- рдЬреИрд╕рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпрд╛ рдПрдХ рдХрдВрд╕реЛрд▓ рдпрд╛ рдЧреНрд░рд╛рдлрд╝рд┐рдХрд▓ UI рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реЛ рддреЛ рдбрд┐рдмрдЧрд░ рдХрдорд╛рдВрдб рдХреЗ рдирд╛рдо рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк TIOBE TOP 50 рдФрд░ рдУрдкрди-рд╕реЛрд░реНрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ / рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕реЗ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрд╛рдо рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддреЗ рд╕рдордп рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди;
рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛;
рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирдП рднрд╛рд╖рд╛ рдмрдпрд╛рди рдпрд╛ рдбрд┐рдмрдЧрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди)ред
рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдзрд╛рди рдЧрд┐рдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрд┐рдЯрд╣рдм рдпрд╛ рдмрд┐рдЯрдмрдХреЗрдЯ) рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдкрдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рд▓рд┐рдВрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдирд┐рдЬреА GitHub рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рд▓рд┐рдВрдХ рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдХреЗрд╡рд▓ рдЖрдкрдХреЛ рдореБрдЭреЗ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдореИрдВ рд╕реА ++, рдЬрд╛рд╡рд╛ рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд╕реНрдХрд▓ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореЗрд░реЗ рдЙрд╕реА рдПрдордкреАрдПрд╕ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдереЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЬреЗрдмреА рдХрд░реНрдордЪрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдореИрдВрдиреЗ рд╕рдмрдорд┐рд╢рди рдХреЗ рд╕рдорд╛рдкрди рд╕реЗ 2 рджрд┐рди рдкрд╣рд▓реЗ рдЖрд╡реЗрджрди рдЬрдорд╛ рдХрд┐рдпрд╛ (рдкрд░реАрдХреНрд╖рд╛ рд╕рднреА рдПрдХ рд╣реА ...), рдФрд░ рдпрд╣ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдмрд╛рд╣рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд╛рдо рдереА - рдореИрдВрдиреЗ рдЬрд▓реНрджреА рд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рд╕рд┐рджреНрдз рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдкрд╛рд╕реНрдХрд▓ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдХрдо рд╕реЗ рдХрдо рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдХрд╛рд░рдг ...
рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ TIOBE TOP 50 рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рд╛рд╣рд╕рдкреВрд░реНрд╡рдХ IDE, рдЕрд░реНрдерд╛рддреН рд▓рд╛рдЬрд░ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдирд╣реАрдВ рд╣реИ :) рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реЗ рдЬреЗрдмреА рдХреЛ 7 рджрд┐рди рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдореБрдЭреЗ рд▓рдЧрднрдЧ рдПрдХ рдШрдВрдЯреЗ рдХрд╛ рд╕рдордп рд▓рдЧрд╛, рдФрд░ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд▓рдЧрднрдЧ 500 рд▓рд╛рдЗрдиреЛрдВ рдХрд╛ рдХреЛрдб рдереАред
рдХрд╣рд╛рдБ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ?
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрдд рдореЗрдВ рдХреЛрдб рдбреАрдмрдЧрд┐рдВрдЧ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рд╣рдореЗрдВ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ / рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЗрди рд╡рд░реНрдЧреЛрдВ рдХреА рд╕реВрдЪреА рдХреА рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рдПрдХ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рджреЗрдЦреЗрдВ (рдореИрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдерд╛)ред
рдЗрд╕ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдбрд┐рдмрдЧрд░ рдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдЫреЛрдЯреЗ рдкрд╛рд░реНрд╕рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдХреЛрдб рдХреЗ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рдЕрд░реНрде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рднреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЪрд▓реЛ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рдЪреВрдВрдХрд┐ рдЧреБрдУ рднрд╛рд╖рд╛ рдореЗрдВ рдЯреЛрдХрди рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдПрдХ рд╕реНрдерд╛рди рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рдФрд░ рд╕рд░рд▓ рдЯреЛрдХрди рдзрд╛рд░рдХ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ:
function GetToken(s: string; tokenNum: word): string; var p: word; begin s := Trim(s); s := StringReplace(s, ' ', ' ', [rfReplaceAll]); while tokenNum > 1 do begin p := Pos(' ', s); if p > 0 then Delete(s, 1, p) else begin s := ''; break; end; dec(tokenNum); end; p := Pos(' ', s); if p > 0 then Delete(s, p, Length(s)); Result := s; end;
рдЕрдЧрд▓рд╛, рдЯреЛрдХрди рд╕реЗ рдПрдирдо рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ:
type TGuuToken = (opSub, opSet, opCall, opPrint, opUnknown); const GuuToken: array[opSub..opPrint] of string = ( 'sub', 'set', 'call', 'print' );
рдФрд░ рдЕрдиреБрджреЗрд╢ рд╡рд░реНрдЧ рд╣реА, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рд┐рдЦреЗрдВрдЧреЗ:
type TGuuOp = class public OpType : TGuuToken; OpArgs : TStringList; OpLine : Cardinal; OpUnChangedLine: string; NextOp : TGuuOp; OpReg : Pointer; function Step(StepInto: boolean; CallBacks: TList; Trace: TStringList): TGuuOp; constructor Create(LineNum: Cardinal; Line:string); destructor Destroy; override; end;
OpType рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, OpArgs рдореЗрдВ - рд╢реЗрд╖ рдирд┐рд░реНрдорд╛рдгред
OpLine, OpUnChangedLine - рдбрд┐рдмрдЧрд░ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реАред
NextOp рдЕрдЧрд▓реЗ рдХрдерди рдХрд╛ рд╕реВрдЪрдХ рд╣реИред рдпрджрд┐ рдпрд╣ рдиреАрд▓ (рдкрд╛рд╕реНрдХрд▓ рдореЗрдВ рд╢реВрдиреНрдп) рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ рдЖрдЧреЗ рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдХреЛрдб рдкреВрд░рд╛ рдХрд░рдиреЗ рдпрд╛ рдХреЙрд▓рдмреИрдХ рд╕реНрдЯреИрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд╛рдкрд╕ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
OpReg рдПрдХ рдЫреЛрдЯрд╛ рдкреЙрдЗрдВрдЯрд░-рд░рдЬрд┐рд╕реНрдЯрд░ рд╣реИ, рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдХрдХреНрд╖рд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╛рдж рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ - рдореИрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдкрд╛рд░реНрд╕рд░ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЬреЛрдбрд╝рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдФрд░ рд╕реБрдВрджрд░ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛, рдЬреЛ рдореИрдВрдиреЗ рдЖрдЧреЗ рдХрд┐рдпрд╛:
constructor TGuuOp.Create(LineNum: Cardinal; Line:string); var s: string; w: word; begin inherited Create; OpArgs := TStringList.Create; OpLine := LineNum; OpUnChangedLine := Line; NextOp := nil; OpReg := nil; s := GetToken(Line, 1); OpType := TGuuToken(AnsiIndexStr(s, GuuToken)); case OpType of opSub : begin
рдпрд╣рд╛рдВ рд╣рдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреА рд╢реБрд░реБрдЖрдд (рдпрд╛рдиреА рдкрд╣рд▓рд╛ рд╢рдмреНрдж) рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рд╢реЗрд╖ рдЯреЛрдХрди рдФрд░ рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧрд▓рдд рд╣реИ, рддреЛ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдХреЛрдб рдХреЗ рдореБрдЦреНрдп рдЯреБрдХрдбрд╝реЗ рдореЗрдВ, рд╣рдо рдмрд╕ рдлрд╝рд╛рдЗрд▓ рд╕реЗ TStringList рдореЗрдВ рдХреЛрдб рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, TGuuOp рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рд▓рд╛рдЗрди рдХреЛ рд▓рд╛рдЗрди рд╕реЗ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреЛ GuuOps: TList рдореЗрдВ рдХреНрд▓рд╛рд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕реЗрд╕ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред
рд╡рд░реНрдЧреАрдХреГрдд:
var LabelNames: TStringList; GuuOps, GuuVars: TList; SubMain: TGuuOp = nil;
рдХреЛрдб рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рдХреБрдЫ рдФрд░ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:
procedure ParseNext(LineNum: Cardinal; Line: string); var Op: TGuuOp; GV: TGuuVar; c: cardinal; begin if Trim(Line) <> '' then begin Op := TGuuOp.Create(LineNum, Line); GuuOps.Add(Op); case Op.OpType of opSet: begin
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЖрдк рдкреБрдирд░реНрд╡рд┐рддреНрдд рдХреЗ рд╕рдордп рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБрдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ OpReg рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ - рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдПрдХ рдЧреБрдП рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛ред
рдЪрд░реЛрдВ рдХреА рдмрд╛рдд рдХрд░рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдХреЛрдб рдХреЛ рдПрдХ рдЕрд▓рдЧ рдЗрдХрд╛рдИ рдореЗрдВ рд▓рд┐рдпрд╛:
unit uVars; {$mode objfpc}{$H+} interface uses Classes, SysUtils; type TGuuVar = class public gvName: string; gvVal: variant; constructor Create(VarName: string); end; implementation constructor TGuuVar.Create(VarName: string); begin inherited Create; gvName := VarName; gvVal := 0; end; end.
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╛рд░реНрд╕ рдХреЛрдб рд╣реИ рдЬреЛ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдореЗрдВ рд╕рд╣реА рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ рдФрд░ рдЖрдк рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬ - рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдереЛрдбрд╝рд╛ рдЕрд░реНрде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдФрд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реИ:
procedure CheckSemantic; var c, x: cardinal; op: TGuuOp; begin if GuuOps.Count > 0 then begin if TGuuOp(GuuOps[0]).OpType <> opSub then begin writeln('[Error]: Operation outside sub at line ', TGuuOp(GuuOps[0]).OpLine, '.'); halt; end; c := 0; while c < GuuOps.Count do begin case TGuuOp(GuuOps[c]).OpType of opSub:; opCall: begin TGuuOp(GuuOps[c - 1]).NextOp := TGuuOp(GuuOps[c]); x := 0; op := nil; while x < GuuOps.Count do begin if TGuuOp(GuuOps[x]).OpType = opSub then if TGuuOp(GuuOps[x]).OpArgs[0] = TGuuOp(GuuOps[c]).OpArgs[0] then begin op := TGuuOp(GuuOps[x]); break; end; inc(x); end; if op <> nil then TGuuOp(GuuOps[c]).OpReg := op else begin writeln('[Error]: Calling to not exist sub "', TGuuOp(GuuOps[c]).OpArgs[0], '" at line ', TGuuOp(GuuOps[c]).OpLine, '.'); halt; end; end; opPrint: begin TGuuOp(GuuOps[c - 1]).NextOp := TGuuOp(GuuOps[c]); x := 0; while x < GuuVars.Count do begin if TGuuVar(GuuVars[x]).gvName = TGuuOp(GuuOps[c]).OpArgs[0] then begin TGuuOp(GuuOps[c]).OpReg := TGuuVar(GuuVars[x]); break; end; inc(x); end; if TGuuOp(GuuOps[c]).OpReg = nil then begin writeln('[Error]: Variable "', TGuuOp(GuuOps[c]).OpArgs[0], '" for print doesn''t exist at line ', TGuuOp(GuuOps[c]).OpLine, '.'); end; end; else TGuuOp(GuuOps[c - 1]).NextOp := TGuuOp(GuuOps[c]); end; inc(c); end; end; end;
рдкреНрд░рддреНрдпреЗрдХ рдЯреЛрдХрди рдХреЗ TGuuOp.NextOp рдореЗрдВ, рдЕрдЧрд▓реЗ рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реВрдЪрдХ рд▓рд┐рдЦреЗрдВред
рдХреЙрд▓ рдУрдкрдХреЛрдб рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдореБрд╢реНрдХрд┐рд▓ рдФрд░ рд╕рд░рд▓ рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдиреЗрдХреНрд╕реНрдЯ рдУрдк рдореЗрдВ рд╣рдо рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯ рдХрд╣рддреЗ рд╣реИрдВред
рд╣рдо рдкреНрд░рд┐рдВрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рдЬрд░рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреА рднреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ ...
рд╢рд╛рдпрдж рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?
рдЕрдм рдЖрдкрдХреЛ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред TGuuOp рд╡рд░реНрдЧ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЪрд░рдг рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
function TGuuOp.Step(StepInto: boolean; CallBacks: TList; Trace: TStringList): TGuuOp; var Op: TGuuOp; CBSize: Cardinal; begin case OpType of opSub: begin Trace.Add('-> Sub "' + OpArgs[0] + '"'); Result := NextOp; end; opCall: begin if StepInto then begin if NextOp <> nil then CallBacks.Add(NextOp); Result := TGuuOp(OpReg); end else begin Op := TGuuOp(OpReg); CBSize := CallBacks.Count; while ((Op <> nil) or (CallBacks.Count > CBSize)) and (Trace.Count < STACK_SIZE) do begin if Op = nil then begin Op := TGuuOp(CallBacks[CallBacks.Count - 1]); CallBacks.Delete(CallBacks.Count - 1); Trace.Delete(Trace.Count - 1); end; Op := Op.Step(StepInto, CallBacks, Trace); end; Result := NextOp; end; end; opPrint: begin writeln(TGuuVar(OpReg).gvName, ' = ', TGuuVar(OpReg).gvVal); Result := NextOp; end; opSet: begin TGuuVar(OpReg).gvVal := OpArgs[1]; Result := NextOp; end; end; end;
рд▓реВрдк рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдкрд╣реБрдВрдЪ рдЙрд▓реНрд▓рдВрдШрди рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП - рд╕реНрдЯреИрдХ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЬреЛ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рдерд╛ред
рд▓рдЧрд╛рддрд╛рд░ рдШреЛрд╖рд┐рдд STACK_SIZE = 2048, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рдЕрдм рд╣рдорд╛рд░реЗ рдбрд┐рдмрдЧрд░ рдХрд╛ рдореБрдЦреНрдп рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдЕрдВрддрд┐рдо рд╕рдордп рд╣реИ:
var code: TStringList; c: Cardinal; cmd: string; CallBacks: TList; Trace: TStringList; DebugMode: boolean = true; begin if ParamCount > 0 then begin
рдиреМрдХрд░реА рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ, рдЬреИрд╕рд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдкреВрд░реНрдг рдпреВрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП SynEdit рдХреЛ рдкреЗрдВрдЪ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рдПрдХ рдЦрд╛рд▓реА рдХрд╛рдо рд╣реИ рдЬреЛ рдХреМрд╢рд▓ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ :)
рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рдПрдХ рдЫреЛрдЯреЗ рдХрдВрд╕реЛрд▓ рдпреВрдЖрдИ рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд▓рд┐рдпрд╛ред
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рдмрд┐рдирд╛ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ, рд╣рдо рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЯреАрдЧреВрдУрдк рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЪрд░рдг рдХрд╣рддреЗ рд╣реИрдВред
рд╣рд▓ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ:


рддреНрд░реБрдЯрд┐ рд╕реВрдЪрдирд╛ рдЖрдЙрдЯрдкреБрдЯ:


рдореЗрд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рднрдВрдбрд╛рд░ рд╕реЗ рд▓рд┐рдВрдХ
рдХрд░реЗрдВ :
рдХреНрд▓рд┐рдХ рдХрд░реЗрдВрдкрд░рд┐рдгрд╛рдо
рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реИрдВред рдореБрдЭреЗ рдЬреЗрдЯрдмреНрд░реЗрдиреНрд╕ рдЯреАрдо рдореЗрдВ рджреЛ рдорд╣реАрдиреЗ рдХреЗ рдХрд╛рдо рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рдмрдЬрд╛рдп, рдЬреНрдпрд╛рджрд╛рддрд░ рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рд╡реНрдпрд╕реНрдд рдЫреБрдЯреНрдЯреА рдкрд░ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдПрдХ рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп (рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдореИрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ) рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╢рд╛рдпрдж рдЕрдЧрд▓реЗ рд╕рд╛рд▓ рдПрдХ рдирдИ рдкреЛрд╕реНрдЯ рд╣реИрдмреЗ рдкрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреЗрдмреА рдореЗрдВ рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд░рд╣реА рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдВрдкрдиреА рдореЗрдВ рдореЗрд░реЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ :)