рд╣рд╛рдп, рд╣рдмреНрдмрд░!
рдкрд░рд┐рдЪрдп
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛, рдХреВрд▓ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд░реНрдгрди рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛, рдЬреЛ
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ рдерд╛ред
рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛ рджреВрдВ рдХрд┐
рдлреЗрдВрдЧрд╢реБрдИ рдореЗрдВ рд╕рдВрдХрд▓рди рдкреНрд░рдХреНрд░рд┐рдпрд╛
рдореЗрдВ рдХрдИ рдЪрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рдмрд╛рдИрдВ рдУрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВред рдореЗрд░реЗ рд╕рдВрдХрд▓рдХ рдореЗрдВ рдХреЗрд╡рд▓ рддреАрди рдЪрд░рдг рд╣реИрдВ, рдЬреЛ рджрд╛рдИрдВ рдУрд░ рдПрдХ рд╣реА рдЖрдХреГрддрд┐ рдореЗрдВ рджрд┐рдЦрд╛рдП рдЧрдП рд╣реИрдВред

рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдФрд░ рд╡рд╛рдХреНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рднрд╛рд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рд╕рд┐рдореЗрдВрдЯрд┐рдХ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ
рдЬрд╛рдБрдЪ рд╣реИ , рдЕрд░реНрдерд╛рдд рдЬрдм рдХрдВрдкрд╛рдЗрд▓рд░ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдкрд╛рд╕ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдкрд░реЗрдВрдб рд╣реИрдВред
рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдордзреНрдпрд╡рд░реНрддреА рдХреЛрдб рдкреАрдврд╝реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ
рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд▓рдХреНрд╖реНрдп рдорд╢реАрди рднрд╛рд╖рд╛ рдореЗрдВ
рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рддреАрди-рдкрддрд╛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдорд╢реАрди-рдЗрдВрдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдХреЛрдб рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдЪрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рддреЗрдЬрд╝ рдпрд╛ рдЕрдзрд┐рдХ, рд╢рд╛рдпрдж рд╣реА рдХрднреА, рдХрдо)ред
рдХреЛрдб рдЬрдирд░реЗрд╢рди рдПрдХ рдордзреНрдпрд╕реНрде рдпрд╛ рдЖрднрд╛рд╕реА рдорд╢реАрди рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдореЗрдВ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рд╕реАрдзрд╛ рдЕрдиреБрд╡рд╛рдж рд╣реИред
рдорд╢реАрди-рдирд┐рд░реНрднрд░ рдЕрдиреБрдХреВрд▓рди рдЪрд░рдг рдорд╢реАрди-рд╕реНрд╡рддрдВрддреНрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рдорд╛рди рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рдХреЛрдб рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖реНрдп рдорд╢реАрди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдПрд╕рдПрд╕рдИ ) рд╕реЗ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрди рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ
рд╕реАрдПрд▓рдЖрд░ рджреНрд╡рд╛рд░рд╛ рдЧреНрд░рд╣рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЖрд░реЗрдЦ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдЪрд░рдг рдореЗрдВ рдореИрдВрдиреЗ рдмрд╛рдИрдВ рдУрд░ рдЖрд░реЗрдЦ рд╕реЗ рддреАрди рдЪрд░рдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рд╣реИред рдпрд╣
System.Reflection.Emit рдЯреВрд▓ (рдЪреВрдВрдХрд┐ CIL рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдо рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдмрджрд▓рд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрд╕рдВрднрд╡рддрд╛ рджреНрд╡рд╛рд░рд╛ рджреЛрдиреЛрдВ рдХреЛ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдПрдХ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рджреНрд╡рд╛рд░рд╛ред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░
рд╡рд╛рд╣, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИ!
рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХреЗ рдЪрд░рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
- рдХрдХреНрд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛
- рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛
- рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдлрдВрдХреНрд╢рди рдХреЛрдб рдЬрдирд░реЗрд╢рди
рдХрдХреНрд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛
рдХреВрд▓ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ,
рдПрдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреЛ, рдкреНрд░рд╡реЗрд╢ рд╕рдорд╛рд░реЛрд╣ рдореБрдЦреНрдп рд╡рд░реНрдЧ рдореЗрдВ рдореБрдЦреНрдп рдХрд╛рд░реНрдп рд╣реИред рд╡рд░реНрдЧ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рджреЛрдиреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХред
System.Reflection.Emit рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдЧ
рдЕрд╕реЗрдВрдмрд▓реА рдФрд░
рд╕реНрдЯрдбреНрдпреВрд▓ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд╛рдпрдирд╛рдорд┐рдХ рдЕрд╕реЗрдВрдмрд▓реА рдмрдирд╛рдиреЗ рдФрд░ CIL рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХрд╛ рд╡рд┐рд╡рд░рдг рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
TypeBuilder ModuleBuilder.DefineType(string className, TypeAttributes attr, Type parent)
рдЬрд┐рд╕рдореЗрдВ
ClassName рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд╣реИ,
attr рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рдФрд░
рдорд╛рддрд╛ -
рдкрд┐рддрд╛ рдорд╛рддрд╛-рдкрд┐рддрд╛ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рд╣реИред
TypeBuilder рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рддрдм рдХреЛрдб рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирдП рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП)ред
рддреЛ, рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдХреНрд▓рд╛рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреЛрдбреНрд╕ рдХреЛ рдкрд╛рд░реНрд╕рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдореЗрдВ рдмрд╛рдИрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рдХрдХреНрд╖рд╛рдПрдВ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВред

рднрд╛рд╖рд╛ рдХреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡рд░реНрдг рдкреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ (рдпрд╣рд╛рдВ рдореВрд▓ рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд╣реИред рдпрджрд┐ рдХреЛрдИ рдЕрднрд┐рднрд╛рд╡рдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдХрдХреНрд╖рд╛
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИ)ред
рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВ, рдЙрдирдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд┐рдирд╛ред рдпрджрд┐ рдЖрдк рддреБрд░рдВрдд рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдлрд╝реАрд▓реНрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдРрд╕реА рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдмрд╛рдж рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдореИрдВ рдпрд╣ рднреА рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╣реА рд╣реЛрдЧрд╛, рдЕрдкрдиреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рд╕рд╣реА рдХреНрд░рдо рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдЧ рдмреА рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИ, рдЬреЛ рдП рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХрдХреНрд╖рд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг)ред рд▓реЗрдХрд┐рди рдпрд╣, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЗрд░реЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЙрд╕ рдХреНрд░рдо рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рддреЛ, рдЗрд╕ рд╕реНрддрд░ рдкрд░ рд╢рдмреНрджрдХреЛрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ
Dictionary<string, TypeBuilder> ClassBuilders_;
рдЬрд┐рд╕рдореЗрдВ рдХреБрдВрдЬреА рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд╣реИ, рдФрд░ рдореВрд▓реНрдп рдЗрд╕рдХрд╛ рдмрд┐рд▓реНрдбрд░ рд╣реИред
рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рднреА рдХреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, CreateType рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд╛рдпрдирд╛рдорд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ
рдЕрдВрддрд┐рдо рд░реВрдк рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╣
рдлрд╝рд╛рдЗрдирд▓рдЕрдХреНрд▓реЗрд╕реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛
рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рддреНрдпреЗрдХ рдХрдХреНрд╖рд╛ рдореЗрдВ рдЖрдЧреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
public FieldBuilder DefineField(string fieldName, Type type, FieldAttributes attributes)
рдФрд░
public MethodBuilder DefineMethod(string name, MethodAttributes attributes, Type returnType, Type[] parameterTypes);
рдХреНрд░рдорд╢рдГред
рдЗрд╕ рдЪрд░рдг рдХреЗ рдЕрдВрдд рдореЗрдВ, рджреЛ рдЖрдпрд╛рдореА рд╢рдмреНрджрдХреЛрд╖ рднрд░реЗ рд╣реБрдП рд╣реИрдВ
protected Dictionary<string, Dictionary<string, FieldObjectDef>> Fields_; protected Dictionary<string, Dictionary<string, MethodDef>> Functions_;
рдкрд╣рд▓реЗ рдЖрдпрд╛рдо рдХреА рдбрд┐рдХреНрд╢рдирд░реА рдХреБрдВрдЬреА рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо рд╣реИ, рджреВрд╕рд░реА рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рд╣реИред рдореВрд▓реНрдп рдХреНрд░рдорд╢рдГ рдлрд╝рдВрдХреНрд╢рди рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдпрд╛ рдлрд╝реАрд▓реНрдбреНрд╕ рд╣реИрдВ (рдЗрди рдХрдХреНрд╖рд╛рдУрдВ рдкрд░ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреА)ред
рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЛ рдЫрд╛рдБрдЯрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдпрд╣рд╛рдБ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ, рдЖрдиреБрд╡рдВрд╢рд┐рдХрддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реАрдзреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЪреВрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдХреЛрдб рдкреАрдврд╝реА рдпрд╣рд╛рдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ), рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдХреНрд░рдо рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдВ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдлрдВрдХреНрд╢рди рдХреЛрдб рдЬрдирд░реЗрд╢рди
рдФрд░ рдпрд╣рд╛рдВ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЖрдпрд╛ред рдпрд╣рд╛рдБ, рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рдлрдВрдХреНрд╢рди рдмреЙрдбреАрдЬрд╝ рдФрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реЛрдВ рдХреА рдПрдХ рд╕реАрдзреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИред
рддреЛ, рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рд╕реЗ, рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡рд┐рдзрд┐ рд╡рд┐рд╡рд░рдгрдХреЛрдВ (рдореЗрдердбрдмреНрдпреВрдЯрд░реА) рдХрд╛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдПрдХ CIL рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ ILGenerator рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
var ilGenerator = methodBuilder.GetILGenerator()
, рдФрд░ рдлрд┐рд░ рдЗрд╕ рдЬрдирд░реЗрдЯрд░ рдкрд░
var ilGenerator = methodBuilder.GetILGenerator()
рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдПрдорд┐рдЯ рд╡рд┐рдзрд┐ рдХреЗ рдХрдИ рд░реВрдк рд╣реИрдВ:
void Emit(OpCode opcode); void Emit(OpCode opcode, int arg); void Emit(OpCode opcode, double arg); void Emit(OpCode opcode, ConstructorInfo con); void Emit(OpCode opcode, LocalBuilder local); void Emit(OpCode opcode, FieldInfo field); void Emit(OpCode opcode, MethodInfo meth); void Emit(OpCode opcode, Type cls);
OpCode рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ .NET рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢ рд╣реИред рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рдПрдХ рдЕрдЪреНрдЫреА рд╕реВрдЪреА
рдпрд╣рд╛рдВ рд╕реВрдЪреАрдмрджреНрдз
рд╣реИ ред
рдФрд░ рджреВрд╕рд░рд╛ рддрд░реНрдХ (рдпрд╣ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ) рд╕рд┐рд░реНрдл "рдмрд┐рд▓реНрдбрд░" рдпрд╛ рдЙрд╕ рд╡рд░реНрдЧ рдпрд╛ рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реЗ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рдХреНрд░рдорд╢рдГ, рдлрд╝рдВрдХреНрд╢рди рдФрд░ рд╡рд░реНрдЧ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдб рдЙрддреНрдкрдиреНрди рд╣реЛ рд░рд╣рд╛ рд╣реИ (рдЬрдм рд╕рд┐рдВрдЯрд┐рдкрд▓ рдЯреНрд░реА рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдирд╛ рд╣реИ)ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВрдиреЗ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ, рд╕реНрдерд╛рдиреАрдп рдЪрд░, рдЕрд╕реНрдерд╛рдпреА рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдФрд░ рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рдХреМрди рд╕реА рдХрдХреНрд╖рд╛рдПрдВ рд╢реБрд░реВ рдХреА рд╣реИрдВред рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдПрдХ
рдСрдмреНрдЬреЗрдХреНрдЯрдбрд┐рдл рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рд╕рд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рд▓реЛрдб (), рдирд┐рдХрд╛рд▓реЗрдВ () рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдСрдмреНрдЬреЗрдХреНрдЯ рдЬрд╛рд░реА рдХрд░реЗрдВред
- FieldObjectDef - рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреВрд▓ рдлрд╝реАрд▓реНрдб рдореЗрдВ - рдпрд╣ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ)ред рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рд░рдЪрдирд╛рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдмрдирд╛рддреЗ рд╕рдордп, рдлрд╝реАрд▓реНрдб рд╡рд┐рд╡рд░рдг рдХрд╛ рдПрдХ рд╕рд░рдгреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
- LocalObjectDef - рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд╕рднреА рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреВрд▓ рдореЗрдВ, рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЛ рд▓реЗрдЯ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
- ValueObjectDef - рдорд╛рдиреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ред рдХреВрд▓ рдореЗрдВ, рдРрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЗрдВрдЯ, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдмреВрд▓ред
- ArgObjectDef рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рддрд░реНрдХ рд╣реИред рдЗрд╕рдореЗрдВ рддрд░реНрдХ рдХреА рд╕рдВрдЦреНрдпрд╛, рдирд╛рдо рдФрд░ рдкреНрд░рдХрд╛рд░ рд╕рдорд╛рд╣рд┐рдд рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдХреВрд▓ рдореЗрдВ, рд╣рд░ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИред рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рдмрд╕ рдПрдХ
рдПрдХреНрд╕рдкрд╛рдпрд░ рднреА рд╣реИред рдпрд╣ рдореЗрд░реЗ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рдХрд╛ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рд╣реИ рдФрд░ рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
EmitExpression (ITree рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдиреЛрдб) рдлрд╝рдВрдХреНрд╢рди рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреЛрдб рдиреАрдЪреЗ рд╣реИ (рдореИрдВрдиреЗ рдЗрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ, рдХреБрдЫ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рджреАрд░реНрдШрд╡реГрддреНрдд рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ):
ObjectDef result; switch (expressionNode.Type) { case CoolGrammarLexer.ASSIGN: result = EmitAssignOperation(expressionNode); break;
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЯреНрд░реА рдиреЛрдб (рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдиреЛрдб) рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рдВрдмреЗ рдорд╛рдорд▓реЗ рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред
рдЙрддреНрдкрдиреНрди рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд░рд▓
OpCodes.Ret рдирд┐рд░реНрджреЗрд╢ рдХрд╛
рдЙрдкрдпреЛрдЧ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдХреЛрдб рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж
рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореБрдЦреНрдп,
OpCodes.Pop рдХреЛ рд░реЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлрд╝реНрд▓реЛ рди рд╣реЛ)ред
рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
SetEntryPoint рд╡рд┐рдзрд┐
(MethodInfo entryMethod) , рдЬрд┐рд╕реЗ
рдЕрд╕реЗрдореНрдмрд▓реА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
, рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
STAThreadAttribute рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рд╡рд┐рдзрд┐ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд╣реА рдереНрд░реЗрдб рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рдВрд╕ рдФрд░ рдПрдВрдЯреНрд░реА рдкреЙрдЗрдВрдЯреНрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдб рдореЗрд░реЗ рдбреЗрдлрд┐рдиреЗрд╢рди рдореЗрдВ рд╣реИред
рдкреНрд░рд╢реНрди : рдЗрди рдЬреИрд╕реЗ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреИрд╕реЗ рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ:
рдЧрдгрд┐рдд: рдЧрдгрд┐рдд: рдирдпрд╛ рдЧрдгрд┐рдд; (рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╕реМрдВрдкрдирд╛, рдпрд╣рд╛рдБ рдирдпрд╛ рдЧрдгрд┐рдд)ред
рдЙрддреНрддрд░ : рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕реА # рд╕рдВрдХрд▓рдХ рдФрд░, рддрджрдиреБрд╕рд╛рд░, рд╣рдорд╛рд░рд╛ рд╕рдВрдХрд▓рдХ, рдордХреНрдЦреА рдкрд░ рдХреЛрдИ рдЧрдгрдирд╛ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИред рдпрд╛рдиреА рдореИрдВ рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд░ рд╕рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛрдб (рдпрд╣рд╛рдБ рдирдпрд╛ рдЧрдгрд┐рдд) рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдирд┐рд░реНрджреЗрд╢
OpCodes.Stfld рдпрд╛
OpCodes.Stsfld рдХреЛ рдХреНрд░рдорд╢рдГ рдЧреИрд░-рд╕реНрдереИрддрд┐рдХ рдФрд░ рд╕реНрдереИрддрд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреБрдЫ CIL рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рдбрд┐рдЬрд╝рд╛рдЗрдиреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг
CIL рдПрдХ
рд╕реНрдЯреИрдХ рднрд╛рд╖рд╛ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рдСрдкрд░реЗрд╢рди рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧрдгрд┐рдд рд╡рд░реНрдЧ рд╕реЗ рдлрд╛рдЗрдмреЛрдиреИрдЪрд┐ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИ:
ldsfld class Math Main::math ldsfld int32 Main::i callvirt instance int32 Math::fibonacci(int32) stloc.0
рдпрд╣рд╛рдВ,
рдЧрдгрд┐рдд рдЙрджрд╛рд╣рд░рдг рд╕рдВрднрд╛рд▓ рдкрд╣рд▓реЗ рд╕реНрдЯреИрдХ рдкрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЯрд╛рдЗрдк
рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рддрд░реНрдХред рдЙрд╕рдХреЗ рдмрд╛рдж,
рдСрдкреНрд╕реЛрдбреНрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ
OpCodes.callvirt рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рд╛рдорд╛рдиреНрдп
OpCodes.call рдирд┐рд░реНрджреЗрд╢
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрд▓рд╛рд╕ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЖрдкрдХреЛ рдХреНрд▓рд╛рд╕ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред рдЕрдВрддрд┐рдо
stloc.0 рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдирдВрдмрд░ 0 рдкрд░ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред
рдЦреИрд░, рдЙрдкрд░реЛрдХреНрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рддрд░реНрдХ рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреЗрддрдХ рд╣реИ, рдЬрд╣рд╛рдВ рд╕реЗ рдЗрд╕реЗ (рдпрд╣) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рдореЗрдВ рдХреЛрдИ рддрд░реНрдХ рди рд╣реЛред
CIL рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
, рд▓реЗрдХрд┐рди рдореИрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдХреИрд╕реЗ рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЕрдВрдХрдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдФрд░ рддреБрд▓рдирд╛ рд╕рдВрдЪрд╛рд▓рди
рдпреЗ рдСрдкрд░реЗрд╢рди рдХреЗрд╡рд▓ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЧрдП рд╣реИрдВ - рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдСрдкрд░реЗрдВрдбреНрд╕, рдФрд░ рдлрд┐рд░ рдСрдкрд░реЗрд╢рди рдХреЛрдб: рдЕрдВрдХрдЧрдгрд┐рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдпреЗ
OpCodes.Add, OpCodes.Sub, OpCodes.Mul, OpCodes.Div рдФрд░ рддреБрд▓рдирд╛ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП,
OpCodes.Ceq, OpCode.Clt, OpCodes.Cgt рд╣реИрдВ ред
рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ CIL рдореЗрдВ "рдХрдо рдпрд╛ рдмрд░рд╛рдмрд░" рдпрд╛ "рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░" рдХреА рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕реА рддреБрд▓рдирд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреАрди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рдХреЗ рдмрдЬрд╛рдп (рдпрд╣рд╛рдБ "<=" "рдирд╣реАрдВ" рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ):
OpCodes.Cgt OpCodes.Ldc_I4_0 OpCodes.Ceq
OpCodes.Ceq рд╕реНрдЯреИрдХ рдкрд░ рджреЛ рддрддреНрд╡реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рд╡реЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ, рддреЛ 1 рд░рд┐рдЯрд░реНрди рджреЗрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рд╡реЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВред
рдЕрдЧрд░ рдирд┐рд░реНрдорд╛рдг
рдЕрдВрдХрдЧрдгрд┐рдд рд╕рдВрдЪрд╛рд▓рди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдХреЛрдб рдХрд░рдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЗрд╕ рддрдереНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд╕рд╢рд░реНрдд рдФрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рдХреВрдж рдХреЗ рд▓реЗрдмрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреЗрдлрд┐рдирд▓реИрдмреЗрд▓ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, ILGenerator рдореЗрдВ рд▓реЗрдмрд▓ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдорд╛рд░реНрдХрдмреЗрд▓ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрди рд▓реЗрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╢рд░реНрдд рдФрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рд╢рд╛рдЦрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдПрдирдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░,
OpCodes.Brfalse рдПрдХ рд╕рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг рд╣реИ рдЬреЛ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рдХрд╛ рдореВрд▓реНрдп рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддрд╛ рд╣реИред рдФрд░
OpCodes.Br рдПрдХ рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг рд╣реИред рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреЛрдб рджрд┐рдпрд╛:
protected ObjectDef EmitIfBranch(ITree expressionNode) { var checkObjectDef = EmitExpression(expressionNode.GetChild(0)); checkObjectDef.Load(); checkObjectDef.Remove(); var exitLabel = CurrentILGenerator_.DefineLabel(); var elseLabel = CurrentILGenerator_.DefineLabel(); CurrentILGenerator_.Emit(OpCodes.Brfalse, elseLabel); var ifObjectDef = EmitExpression(expressionNode.GetChild(1)); ifObjectDef.Load(); ifObjectDef.Remove(); CurrentILGenerator_.Emit(OpCodes.Br, exitLabel); CurrentILGenerator_.MarkLabel(elseLabel); var elseObjectDef = EmitExpression(expressionNode.GetChild(2)); elseObjectDef.Load(); elseObjectDef.Remove(); CurrentILGenerator_.MarkLabel(exitLabel); return LocalObjectDef.AllocateLocal(GetMostNearestAncestor(ifObjectDef.Type, elseObjectDef.Type)); }
рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп
рдпрд╣ рдбрд┐рдЬрд╛рдЗрди
рдЗрдл рдХреА рддрд░рд╣ рдЬреНрдпрд╛рджрд╛ рд╣реИред рдмрд╕ рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдЗрд╕ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╢рд░реАрд░ рдХреЗ рдЕрдВрджрд░ рдЖрдкрдХреЛ рд╣рдореЗрд╢рд╛
рдкреЙрдк рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЖрдВрддрд░рд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (рдХреВрд▓ рдореЗрдВ, рдпрд╣ рдХрдерди рд╣рдореЗрд╢рд╛ рд╢реВрдиреНрдп рд╣реЛрддрд╛ рд╣реИ)ред
рдСрдкрд░реЗрдЯрд░реНрд╕ '@' рдФрд░ 'рдХреЗрд╕'
@ рдСрдкрд░реЗрдЯрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ C # рдХреЛрдб рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (B рдХреЗ рд░реВрдк рдореЗрдВ) .methodName рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╕ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдбрд╛рдпрдирд╛рдорд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ C # рдореЗрдВ a рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрди рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐
рдХреИрд╕реНрдЯрдХреНрд▓рд╛рд╕ <рд╢реНрд░реЗрдгреА> рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ (рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдФрд░ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд░рдирд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП
рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рддреБрд░рдВрдд рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
ред <thisType> [рдЙрдкрд╕рд░реНрдЧ]редрдФрд░ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреЛ
рдЖрдЗрдВрд╕реНрдЯреАрди <рдХреНрд▓рд╛рд╕> рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЯреЛрдХрди рдЖрдИрдбреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг
рдпрджрд┐ рдЯреНрд░реА рдиреЛрдб рдкреНрд░рдХрд╛рд░ Id рдкреНрд░рдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рддреЛ рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ (
EmitIdValue рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ):
- рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЦреЛрдЬ, рдпрджрд┐ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ
- рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ; рдпрджрд┐ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ
- рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ, рдпрджрд┐ рдирд╣реАрдВ рдорд┐рд▓рд╛, рддреЛ
- рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдЬреЛ рдЖрдИрдбреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ
рдЗрд╕ рдЦрдВрдб рдореЗрдВ, рдореИрдВрдиреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реАрдЖрдИрдПрд▓ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рдХреЛрдб рдкреАрдврд╝реА рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬреЛ рдЬрдЯрд┐рд▓ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддреЗ рд╣реИрдВред рдЕрдиреНрдп рд╕рднреА CIL рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рдХрд┐ рдкреГрд╖реНрда рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдПрдХ рд▓рд┐рдВрдХ рд╣реИ рдЬреЛ рд╡рд┐рд╖рдп рдХреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рдФрд░ рдЖрдк рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХреЛрдб рдкреАрдврд╝реА рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐
рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ:
рдХрд╛рд▓реЗ, рд╕рдлреЗрдж, рд▓рд╛рд▓ рд▓реЗрдХреНрд╕рд┐рдХрд▓ ,
рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ ,
рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдФрд░
рдЬрдирд░рд▓ ред
рдПрдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ
CompilerError рдЙрди рд╕рднреА рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕рдВрдЦреНрдпрд╛, рдХреЛрдб рдореЗрдВ рд╕реНрдерд┐рддрд┐ (рд▓рд╛рдЗрди рдФрд░ рдХреЙрд▓рдо), рддреНрд░реБрдЯрд┐ рдХрд╛ рдкреНрд░рдХрд╛рд░, рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реИред
рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореИрдВрдиреЗ ANTLR
рдореЗрдВ рд▓реЗрд╕рд░ рдФрд░ рдкрд╛рд░реНрд╕рд░ рд╕реНрддрд░ рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдЙрдмрд░рдиреЗ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛)ред рдпрд╣рд╛рдВ, рдЕрдкрд╡рд╛рдж рдХреЗрд╡рд▓ рдкрдХрдбрд╝реЗ рдЧрдП рд╣реИрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рддреНрд░реБрдЯрд┐ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рдпрд╣ рд╕рдм CoolCompier.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рд▓реЗрдХрд┐рди рд╕рд┐рдореЗрдВрдЯрд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдЪреЗрдХ, "рдПрдорд┐рдЯ" рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХреА рдЬрд╛рддреА рд╣реИред рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдХреЛ рддреБрдЪреНрдЫ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдХ рдкрд╛рд╕ рдореЗрдВ рдХрдИ рдЕрд░реНрде рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдПрдХ рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдСрдкрд░реЗрд╢рди, рдЕрдЧрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рднреА рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рддреЛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдЖрдЧреЗ рдмрдврд╝рдирд╛ рдЬрд╛рд░реА рд╣реИ:
protected ObjectDef EmitArithmeticOperation(ITree expressionNode) { var returnObject1 = EmitExpression(expressionNode.GetChild(0)); var returnObject2 = EmitExpression(expressionNode.GetChild(1)); if (returnObject1.Type != IntegerType || returnObject1.Type != returnObject2.Type) CompilerErrors.Add(new ArithmeticOperatorError( returnObject1.Type, returnObject2.Type, CompilerErrors.Count, expressionNode.Line, expressionNode.GetChild(1).CharPositionInLine, expressionNode.GetChild(0).CharPositionInLine)); ... }
рдЦреИрд░, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ "рдлрд╝рд╛рдЗрд▓ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИ", "рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдирд╣реАрдВ рдорд┐рд▓рд╛" рдЬреИрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛, рдЖрджрд┐ред рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕
рд╕рд┐рдВрдЯреЗрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ
рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдореИрдВрдиреЗ WPF рдХреЗ рддрд╣рдд
AvalonEdit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХреНрд╕рдЯреЗрдВрд╢рди .xshd рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рд╢рдмреНрджреЛрдВ рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрдиреНрдЯ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
<Span color="Comment" begin="--" /> <Span color="Comment" multiline="true" begin="\(\*" end="\*\)" />
рдЗрд╕ рддрд░рд╣ рдХреЗ рдХреАрд╡рд░реНрдб:
<Color name="Keywords" foreground="Blue" /> ... <Keywords color="Keywords"> <Word>classWord> <Word>elseWord> <Word>falseWord> ... Keywords>
рдРрд╕реЗ рдирд┐рдпрдо рднреА рд╣реИрдВ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ рдХрд┐ рд╡рд░реНрдгреЛрдВ рдХрд╛ рдХреМрди рд╕рд╛ рдХреНрд░рдо рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП:
<Rule foreground="DarkBlue"> \b0[xX][0-9a-fA-F]+ # hex number |\b ( \d+(\.[0-9]+)? #number with optional floating point | \.[0-9]+ #or just starting with floating point ) ([eE][+-]?[0-9]+)? # optional exponent Rule>
рдЕрдиреНрдп рд╕рднреА рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдирд┐рдпрдо
CoolHighlighting.xshd рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рддрд╣ рдФрд░ рдСрдЯреЛ рдкреВрд░рд╛ рдХрд░рдирд╛
рдЗрд╕ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ
рдмреНрд▓реЙрдХрд┐рдВрдЧ рдФрд░
рд╡рд┐рд╕реНрддрд╛рд░ рд╕рдВрднрд╡ рд╣реИ рдФрд░
CoolFoldingStrategy.cs рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛
рдЧрдпрд╛ ред рдХреЛрдб рдореЗрд░рд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рд╕реЗ рдмрдЪреВрдВрдЧрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдзрдиреНрдпрд╡рд╛рдж рдЬреЛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рдмреАрдЪ рд╣реИ рдЙрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдпрд╛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмрд╣реБрдд рд╕рд╣реА рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЫреЛрд░реЛрдВ рдХреЛ рдРрд╕рд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдШрдЯрдХ рдХреЗ рд╕рд╛рде рдЖрдк рдСрдЯреЛ-рдкреВрд░реНрддрд┐ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬреЛ рдХреЛрдб рдкреАрдврд╝реА рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдЯреНрд░реА рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдЕрдВрдд рдореЗрдВ, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХреЛрдб рдХреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкрд╛рдИ рдЧрдИ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдХреЛрдб рдореЗрдВ, рдЧрд╛рдбрд╝реА рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧрд╛рдбрд╝реА рдХреЛ рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рддреНрд░реБрдЯрд┐ рд╣реБрдИ рдереА:
tbEditor.ScrollTo((int)compilerError.Line, (int)compilerError.ColumnStart); int offset = tbEditor.Document.GetOffset((int)compilerError.Line, (int)compilerError.ColumnStart); tbEditor.Select(offset, 0); tbEditor.Focus();
tbEditor - рд╕рдВрдкрд╛рджрдХ рдШрдЯрдХ рдХрд╛ рдЙрджрд╛рд╣рд░рдг;
compilerError - рддреНрд░реБрдЯрд┐ (рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ);
рдФрд░ рд╣рд╛рдВ, рдпрд╣ рдЦрдВрдб рд╕рдВрдХрд▓рдХ рдХреА рд╕реНрдХреНрд░реАрди рдХреЗ рдмрд┐рдирд╛ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛:

рдХреЛрдб рд╕рдВрдкрд╛рджрдХ рдКрдкрд░реА рдмрд╛рдПрдБ рдореЗрдВ рд╣реИ, рд▓реЙрдЧ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рдЪрд▓реЗ рдмрд╛рдПрдБ рдореЗрдВ рд╣реИред рд╕рдВрдХрд▓рди рдХреЛрдб рдХреЗ рд▓рд┐рдП рджрд╛рдИрдВ рдУрд░ рдмрдЯрди рд╣реИрдВ (рдЖрдк рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП F5 рднреА рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП F6)ред
рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдпрдХреНрд░рдо рдЯреЛрдХрди рдХреА рдПрдХ рд╕реВрдЪреА рдФрд░ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА (рджрд╛рдИрдВ рдУрд░) рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЯреЛрдХрди рдпрд╛ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдПрдХ рдбрдмрд▓ рдХреНрд▓рд┐рдХ рдХреЗ рд╕рд╛рде, рдЧрд╛рдбрд╝реА рдХреЛ рд╕реНрдХреНрд░реЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЧрд╛рдбрд╝реА рдХреЛ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрдЧреЗ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рд╕реБрдзрд╛рд░
рдЕрдЧрд░ рдореИрдВрдиреЗ рдХреВрд▓ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдм рд╣реИ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд╕рд╛рде, рдореИрдВ рд╢рд╛рдпрдж рджреЛ рдФрд░ рд╕рдВрдХрд▓рди рдЪрд░рдгреЛрдВ рдХреЛ рдПрдХрд▓ рдХрд░ рджреВрдВрдЧрд╛ - рдПрдХ рдЕрд░реНрдерд┐рдХ рдкреЗрдбрд╝ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рддреАрди- рдпрд╛ рдЪрд╛рд░-рдкрддреЗ рд╡рд╛рд▓реЗ рдордзреНрдпрд╡рд░реНрддреА рдХреЛрдб рдХрд╛ рдирд┐рд░реНрдорд╛рдгред
рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдЯреНрд░реА, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдХрд╣рд╛ рдерд╛, рдХреЛрдб рдкреАрдврд╝реА рд╕реЗ рдкрд╣рд▓реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рдПрдХ рддреАрди-рдкрддрд╛ рдордзреНрдпрд╡рд░реНрддреА рдХреЛрдб рдЖрдкрдХреЛ рдЕрдиреБрдХреВрд▓рди рддрдХрдиреАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ рдЬреЛ рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрджреЗрд╢реЛрдВ рдФрд░ рдЕрдиреНрдп рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдПрдХ рджреГрдврд╝ рд╕рдВрдХрд▓реНрдк:
stloc.0
ldloc.0
рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг (рдмреЛрдирд╕)
рдореИрдВрдиреЗ 2011 рдореЗрдВ MSTU рдореЗрдВ "рдбрд┐рдЬрд╛рдЗрдирд┐рдВрдЧ рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕" рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рдореМрдЬреВрдж рд╕рднреА рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛рдУрдВ
рдХреЗ рдЙрдк-рдХреЛрдб рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред N.E.Bauman (11 рд╡рд╛рдБ рд╡рд┐рдХрд▓реНрдк)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗред
рд╕рднреА рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг:
- рдХрд╛рд░реНрдп 1. рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рд╡рд┐рднрд╛рдЬрдиред рдпрд╣ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдПрдХ рд╡реНрдпрд╛рдХрд░рдг рд╡рд┐рднрд╛рдЬрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИ ред рдкреГрд╖реНрда 102 рдкрд░ рджреВрд╕рд░реЗ рдЦрдВрдб рдореЗрдВ рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ "рдЕрд╣реЛ рдПред, рдЙрд▓рдорд╛рди рдЬреЗред рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдЕрдиреБрд╡рд╛рдж рдФрд░ рд╕рдВрдХрд▓рди" рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдФрд░ рд╡рд┐рд╡рд░рдг рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реА рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдмреЗрдХрд╛рд░ (RemoveUselessSymbols) рдФрд░ рдЕрдкреНрд░рд╛рдкреНрдп (RemoveUnreachableSymbols) рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ ) рд╡реНрдпрд╛рдХрд░рдг рд╕реЗ рд╡рд░реНрдгред
рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЙрд╕ рд╕рдордп рдореИрдВ рдЕрднреА рднреА LINQ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд░рд╣рд╛ рдерд╛ред рддреЛ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХреЛрдб рдХреБрд╢рд▓ рдФрд░ рд╕реБрдВрджрд░, рд▓реЗрдХрд┐рди рдХрдо рдирд╣реАрдВ рд╣реИред :)
- рдХрд╛рд░реНрдп 2. рдПрдХ рдирд┐рдпрдорд┐рдд рднрд╛рд╖рд╛ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдорд╛рдиреНрдпрддрд╛ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрдкрд╢реАрд░реНрд╖рдХ рдпрд╣рд╛рдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВ:
- рдирд┐рдпрдорд┐рдд рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рдирдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдорд╛рдзрд╛рдиред
рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг : рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдмрд╛рдИрдВ рдУрд░ рдХреЗ рд╡реНрдпрд╛рдХрд░рдг рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛рдиреА рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЧреБрдгрд╛рдВрдХ (рдПрд╕рдЖрд░рдПрд╕) рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдгрд╛рд▓реА "рд╣рд▓"ред рдЧреБрдгрд╛рдВрдХ рдЯрд░реНрдорд┐рдирд▓ рд╣реИрдВ, рдФрд░ рдЕрдЬреНрдЮрд╛рдд рдЧреИрд░-рдЯрд░реНрдорд┐рдирд▓ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдРрд╕реЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рд▓рд┐рдП:
╬г = {0, 1}
N = {S, A, B}
P = {S тЖТ 0тИЩA|1тИЩS|╬╗, A тЖТ 0тИЩB|1тИЩA, B тЖТ 0тИЩS|1тИЩB}
S = S
рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ (рдПрдХ рдЫреЛрдЯреА рд╕реА рддреНрд░реБрдЯрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд┐рдВрджреБ рдирд╣реАрдВ):
S = 1*+1*тИЩ0тИЩ1*тИЩ0тИЩ1*тИЩ0тИЩ1*+1*тИЩ0тИЩ1*тИЩ0тИЩ(0тИЩ1*тИЩ0тИЩ1*тИЩ0)*тИЩ0тИЩ1*
A = 1*тИЩ0тИЩ1*тИЩ0тИЩ1*+1*тИЩ0тИЩ(0тИЩ1*тИЩ0тИЩ1*тИЩ0)*тИЩ0тИЩ1*
B = 1*тИЩ0тИЩ1*+(0тИЩ1*тИЩ0тИЩ1*тИЩ0)*тИЩ0тИЩ1*

рдЗрд╕ рд▓реИрдм рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рдХрд┐ рдмреАрдЬрдЧрдгрд┐рдд рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ '+', '*', '/' рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдЪрд╛рд▓рдиреЛрдВ рдХреЛ 'рдпрд╛', 'рдХреЙрдиреНрд╕реЗрдкреНрдЯрдиреИрд╢рди' рдФрд░ 'рдЗрдЯрд░реЗрд╢рди' рдХреЛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдУрд╡рд░рд▓реЛрдб рдХрд░рдХреЗ, рдХреЛрдИ рднреА SRK рд╡рд┐рдзрд┐ рдХреЛ рд╣рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЧреЙрд╕ рднреА, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп SLAE рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ! рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреБрдХреВрд▓рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрди рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдирд╛ рднреА рдПрдХ рдЧреИрд░-рддреБрдЪреНрдЫ рдХрд╛рд░реНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рд╕рдВрдЦреНрдпрд╛рдПрдБ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдХреА рд░реЗрдЦрд╛рдПрдБ рдФрд░ рдирд┐рдпрдо рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ: рдЬрдм рд╕рдорд╡рд░реНрддреА рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ "рдЧреЛрдВрдж" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, 'рдпрд╛' рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЖрдкрдХреЛ рдмрд╕ рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╢реВрдиреНрдп рдПрдХ рдЦрд╛рд▓реА рд╕реЗрдЯ (├Ш) рд╣реИ, рдпреВрдирд┐рдЯ рд▓рдВрдмрд╛ (╬╗) рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдЧреБрдгрд╛ рдпрд╛ рдЬреЛрдбрд╝ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ 0 рдпрд╛ 1 рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЕрдиреНрдпрдерд╛ рд╡реЗ рдЬрд▓реНрджреА рд╕реЗ "рдкреНрд░рдлреБрд▓реНрд▓рд┐рдд" рд╣реЛрдВрдЧреЗред
- рдПрдХ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛, рдЬреЛ рдХрд┐ рдирд┐рдпрдорд┐рдд рдЧреБрдгрд╛рдВрдХ рд╡рд╛рд▓реЗ рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдПрдХ рдорд╛рдирдХ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдПрдХ NFA (Nondeterministic Finite Automaton) рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИред
- рдПрдирд╕реАрдП рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреГрдврд╝ рд╕рдВрдХрд▓реНрдкред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ - рдпрд╣ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдЧрд╣рд░рд╛рдИ рдХреА рдЦреЛрдЬ рд╣реИ
- рд╕рдорд╕реНрдпрд╛ 3. рдХреЛрдХрд╛-рдпрдВрдЧреЗрд░-рдХрд╛рд╕рдореА рдПрд▓реНрдЧреЛрд░рд┐рджрдо
рдпрд╣рд╛рдВ, рдХреЛрдХ-рдпрдВрдЧрд░-рдХрд╛рд╕рдореА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛
, , . , , .
.
- 4.
. LL(*) ( ANTLR). . .

- 5-8. Cool
---- Cool .NET, .
, , Cool, , , :
- Example1.cool тАФ ( , , ).
- BinaryTree.cool тАФ , тАФ (, , ).
- , ( .pdf):
- Evaluating Simple C Expressions тАФ - .
- iFlop тАФ iFlop .
рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реА рдХреБрдЫ рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛рдПрдВ Microsoft.GLEE рд░реЗрдЦрд╛рдВрдХрди рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрджреНрднреБрдд, рд▓реЗрдХрд┐рди рдмрдВрдж рдФрд░ рднреБрдЧрддрд╛рди рдХреА рдЧрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ ред рдЗрд╕ рд▓реЗрдЦ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП , рдЗрд╕ рд▓рд╛рдпрдмреНрд░реЗрд░реА рдореЗрдВ рдХреБрдЫ рдЪрддреБрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рд╣реЗрдпреБрд░реЗрдЯрд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЧрд╛рдпрд╛ рд╣реБрдЖ рдЧреНрд░рд╛рдлрд╝ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╣реЛ рдФрд░ рд╕рдмрд╕реЗ рдмрдбрд╝реЗ рдиреЛрдб рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЫреЛрдЯреЗ рдХреНрд╖реЗрддреНрд░ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд┐рдпрд╛ рд╣реЛред (рдпрд╣ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рдХрд┐рд╕реА рдиреЗ рд╣рдм рдкрд░ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ)редрд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдиреЛрдбреНрд╕ рдХреЗ рдмреАрдЪ рдПрдХ рдмрдврд╝рдд рдЬреЛрдбрд╝рдирд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ Edge AddEdge(string source, string target)
рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрд░реЛрдд рдПрдХ рдиреЛрдб рдХрд╛ рдирд╛рдо рд╣реИ , рд▓рдХреНрд╖реНрдп рджреВрд╕рд░реЗ рдиреЛрдб рдХрд╛ рдирд╛рдо рд╣реИредрдпрд╛рдиреА
рдЙрдирдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдбреНрд╕, рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдкрд╣рд▓реЗ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИредрдпрджрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдиреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди Edge AddNode(string nodeId)
рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдЬ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЖрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдкрд╛рда рд░рдВрдЧ, рдиреЛрдб рд░рдВрдЧ, рдЗрдВрдбреЗрдВрдЯреЗрд╢рди, рдЖрджрд┐)рдЬреЛ рднреА рдЖрдк рд╕реЛрдЪрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ Microsoft рдХрд╛ рд╕рдорд░реНрдердХ рдирд╣реАрдВ рд╣реВрдВ: )рдЙрди рд╕рднреА рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдирдореЗрдВ рдореИрдВрдиреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдСрдирд▓рд╛рдЗрди рд╕реЗрд╡рд╛ lucidchart.com рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ редрд╕рд╛рд╣рд┐рддреНрдп
рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЗ рд▓реЗрдЦрдХ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ , рдХрд┐ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдмрд╣реБрдд рд╕рд╛рд░реА рдХрд┐рддрд╛рдмреЗрдВ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЪреНрдЫрд╛ рд╣реИредрдореИрдВ рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рд╕рд┐рджреНрдзрд╛рдВрдд, рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдФрд░ рдЙрдкрдХрд░рдг, 2008, рдЕрд▓реНрдлреНрд░реЗрдб рдбрдмреНрд▓реНрдпреВред рдЕрд╣реЛ, рдореЛрдирд┐рдХрд╛ рдПрд╕ред рд▓рд╛рдо, рд░рд╡рд┐ рд╕реЗрдЯреА, рдЬреЗрдлрд░реА рдбреАред рдЙрд▓рдорд╛рдиредрдореИрдВ рд╕реАрдЖрдИрдПрд▓ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рднреА рдкреЛрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВ , рдЬреЛ рдЕрдХреНрд╕рд░ рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛редрд╡рд╣ рд╕рдм рд╣реИ!