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

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ рдореЗрдВ:
- рдХрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рдЖрд╕рд╛рди рдЬреЛрдбрд╝ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди;
- рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдФрд░ рдЕрд░реНрде рд╕рдВрдмрдВрдзреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╡рд╛рд▓реЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди;
- рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рднрд╛рд╖рд╛ (рдбреАрдПрд╕рдПрд▓, рдбреЛрдореЗрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛) рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рднреА рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдпрд╛ рдЦрд╛рдорд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред
рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
- рдПрдХ рднрд╛рд╖рд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ (рд╕рд╛рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА, рдПрдПрд╕рдЯреА) рдореЗрдВ рдкрд╛рд░реНрд╕рд┐рдВрдЧ;
- рдПрдПрд╕рдЯреА рдХреЛ рднрд╛рд╖рд╛-рд╕реНрд╡рддрдВрддреНрд░, рдПрдХреАрдХреГрдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ
- рдбреАрдПрд╕рдПрд▓ рдкрд░ рд╡рд░реНрдгрд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдкреНрд░рддреНрдпрдХреНрд╖ рдорд╛рдирдЪрд┐рддреНрд░рдгред
рдпрд╣ рд▓реЗрдЦ рдкрд╣рд▓реЗ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╣реИ, рдЕрд░реНрдерд╛рддреН: рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рд╡рд┐рднрд┐рдиреНрди рдкрд╛рд░реНрд╕рд░ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реБрдП, рдЬрд╛рд╡рд╛, рдкреАрдПрдЪрдкреАрдПрд▓, рдкреАрдПрд╕рдХреНрдпреВрдПрд▓, рдЯреАрдПрд╕рдХреНрдпреВрдПрд▓, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕реА # рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд╢реЗрд╖ рдЪрд░рдгреЛрдВ рдХреА рдЪрд░реНрдЪрд╛ рдмрд╛рдж рдХреЗ рдкреНрд░рдХрд╛рд╢рдиреЛрдВ рдореЗрдВ рдХреА рдЬрд╛рдПрдЧреАред
рд╕рд╛рдордЧреНрд░реА
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рд┐рджреНрдзрд╛рдВрдд
рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╕рд╡рд╛рд▓ рдЙрда рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рдПрдХреАрдХреГрдд рдПрдПрд╕рдЯреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреНрдпреЛрдВ рдХрд░реЗрдВ, рдирд┐рдпрдорд┐рдд рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЧреНрд░рд╛рдл рдорд┐рд▓рд╛рди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВ? рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдкреИрдЯрд░реНрди рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C # рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд╕рдВрджрд░реНрдн-рдореБрдХреНрдд рд╡реНрдпрд╛рдХрд░рдг рдХреА рд╢рдХреНрддрд┐ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╕рдореВрд╣реЛрдВ рдФрд░ рдмреИрдХрд▓рд┐рдВрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреЗ рднрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреИрдЯрд░реНрди рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрдЧреА рдЕрдиреНрдп рдЕрд╢реНрд▓реАрд▓ рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЬрдЯрд┐рд▓)ред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдПрдХ рд▓реЗрдЦ рднреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд░рд┐рдгрд╛рдореА рдПрдХреАрдХреГрдд рдПрдПрд╕рдЯреА рдХреА рдХрдиреЗрдХреНрдЯрд┐рд╡рд┐рдЯреА рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕реЗ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрднреНрдпрд╛рд╡реЗрджрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХреЛрдб рдЧреБрдгреЛрдВ рдХрд╛ рдЧреНрд░рд╛рдл ред
рд╢рдмреНрджрд╛рд╡рд▓реА
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧ рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдПрдХ рд╕рдВрд░рдЪрд┐рдд рджреГрд╢реНрдп рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред рдПрдХ рдареЗрда рдкрд╛рд░реНрд╕рд░ рдПрдХ рд▓реЗрд╕рд░ рдФрд░ рдПрдХ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИред рд▓реЗрдХреНрд╕рд░ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╡рд░реНрдгреЛрдВ рдХреЛ рд╕рд╛рд░реНрдердХ рдЕрдиреБрдХреНрд░рдореЛрдВ рдореЗрдВ рд╕рдореВрд╣рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЯреЛрдХрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЯреЛрдХрди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рд╕рдВрдЦреНрдпрд╛, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЖрджрд┐)ред рдПрдХ рдЯреЛрдХрди рдПрдХ рдЯреЛрдХрди рдФрд░ рдЙрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрд░реНрде рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЯреЛрдХрди рд╕рдкрд╛ , = , 100 рд╣реИрдВ ред рдкрд╛рд░реНрд╕рд░ рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдПрдХ рдХрдиреЗрдХреНрдЯреЗрдб рдЯреНрд░реА рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд╛рд░реНрд╕ рдЯреНрд░реА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдкреЗрдбрд╝ рдХреЗ рдиреЛрдбреНрд╕ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдПрдмреНрд╕рдЯреНрд░реИрдХреНрдЯ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдпрд╛ рдПрдПрд╕рдЯреА рдПрдХ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдПрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЯреНрд░реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХреЛрд╖реНрдардХ, рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдЬреИрд╕реЗ рдорд╣рддреНрд╡рд╣реАрди рдЯреЛрдХрди рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдРрд╕реЗ рдкрд╛рд░реНрд╕рд░ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд▓реЗрдХреНрд╕рд┐рдВрдЧ рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реНрдЯреЗрдкреНрд╕ рд╕рдВрдпреБрдХреНрдд рд╣реИрдВред

рд╡рд┐рднрд┐рдиреНрди рдПрдПрд╕рдЯреА рдиреЛрдбреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдирд┐рдпрдореЛрдВ рдХреЗ рдорд┐рд▓рди рдХреЛ рднрд╛рд╖рд╛ рдХрд╛ рд╡реНрдпрд╛рдХрд░рдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕реЗ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рд╡реНрдпрд╛рдХрд░рдг рдкрд░ рдЖрдзрд╛рд░рд┐рдд рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдордВрдЪ (рд░рдирдЯрд╛рдЗрдо) рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░реНрд╕рд░ рдЬрдирд░реЗрдЯрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ANTLR , рдмрд╛рдЗрд╕рди , рдХреЛрдХреЛ / рдЖрд░ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдХреНрд╕рд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд░ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЛрд╕рд▓рд┐рди ред рдПрдХ рдореИрдиреБрдЕрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдлрд╛рдпрджреЗ рдпрд╣ рд╣реИрдВ рдХрд┐ рдкрд╛рд░реНрд╕рд░реНрд╕ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдФрд░ рдкрдардиреАрдп рд╣реЛрддреЗ рд╣реИрдВред
рдЪреВрдВрдХрд┐ рдпрд╣ рд╢реБрд░реВ рдореЗрдВ .NET рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рд░реЛрдЬрд╝рди рдХреЛ рд╕реА # рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП ANTLR рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рдмрд╛рдж рдореЗрдВ .NET рд░рдирдЯрд╛рдЗрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдХрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред
рдЪреЙрдореНрд╕реНрдХреА рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдФрдкрдЪрд╛рд░рд┐рдХ рднрд╛рд╖рд╛рдПрдВ 4 рдкреНрд░рдХрд╛рд░ рдХреА рд╣реЛрддреА рд╣реИрдВ:
- рдирд┐рдпрдорд┐рдд рдЙрджрд╛рд╣рд░рдг: рдПрдХ рдПрди
- рд╕рдВрджрд░реНрдн-рдореБрдХреНрдд (CS, рдЙрджрд╛рд╣рд░рдг: a n b n )
- рд╕рдВрджрд░реНрдн-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ (рд╢реЙрд░реНрдЯ рд╕рд░реНрдХрд┐рдЯ, рдЙрджрд╛рд╣рд░рдг: рдПрдХ рдПрди рдмреА рдПрди рд╕реА рдПрди )
- рдЯреНрдпреВрд░рд┐рдВрдЧ-рдкреВрд░реНрдгред
рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ рдЖрдкрдХреЛ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддреА рд╣реИрдВред рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдФрд░ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред рдЯреНрдпреВрд░рд┐рдВрдЧ-рдкреВрд░реНрдг рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд▓рд┐рдЦрд┐рдд рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рджреЛрдиреЛрдВ рдореЗрдВ рдЕрдкрдиреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдХрд╛рд░рдг рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ (рдЧреВрдврд╝ рд▓реЛрдЧреЛрдВ рдХреЛ рдЖрдк рдереВ рдпрд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдЖрдзреБрдирд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рдЧрднрдЧ рдкреВрд░реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕реАрдПрд╕ рдЧреНрд░рд╛рдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдХреЗрдПрд╕-рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдкрд╛рд░реНрд╕рд░реЛрдВ рдФрд░ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдкрд░" рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдХреА рдХреЛрдИ рд╕реНрдореГрддрд┐ рдирд╣реАрдВ рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдо KZ рдФрд░ CS рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рдкрд╣рд▓реЗ рдЧрдП рдирд┐рдпрдореЛрдВ рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рд░рд╣рддрд╛ред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рднрд╛рд╖рд╛ рдПрдХ рд╕реАрдУрдкреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ - рдПрдХ рдХреЗрдЬреЗрдбред рдпрджрд┐ рд╣рдо рд╢рдмреНрджрд╛рд░реНрде рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рднрд╛рд╖рд╛ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрд┐, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕рдВрдЧрддрд┐, рдлрд┐рд░ рднрд╛рд╖рд╛ рдХреЛ KZ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, T a = new T ()ред рдпрд╣рд╛рдВ рджрд╛рдИрдВ рдУрд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрд╛рдИрдВ рдУрд░ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдорддреМрд░ рдкрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЪрд░рдг рдХреЗ рдмрд╛рдж рд╢рдмреНрджрд╛рд░реНрде рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕реЗ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг рд╣реИрдВ рдЬреЛ CS рд╡реНрдпрд╛рдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП PHP рдореЗрдВ Heredoc : $ x = <<< EOL рдирдорд╕реНрддреЗ рджреБрдирд┐рдпрд╛ рдИрдУрдПрд▓ ; рдЗрд╕рдореЗрдВ, рдИрдУрдПрд▓ рдЯреЛрдХрди рдмреНрд░реЗрдХрд┐рдВрдЧ рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдХрд╛ рдПрдХ рдорд╛рд░реНрдХрд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдЬрд╝рд┐рдЯ рдХрд┐рдП рдЧрдП рдЯреЛрдХрди рдХреЗ рдореВрд▓реНрдп рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдРрд╕реА KS рдФрд░ KZ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред
ANTLR

рдпрд╣ рдкрд╛рд░реНрд╕рд░ рдЬрдирд░реЗрдЯрд░ рдПрд▓рдПрд▓ (*) рд╣реИ , рдпрд╣ 20 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдореЗрдВ рд╣реИ, рдФрд░ 2013 рдореЗрдВ рдЗрд╕рдХрд╛ 4 рд╡рд╛рдВ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рдЗрд╕реЗ GitHub рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рдЖрдкрдХреЛ рдЬрд╛рд╡рд╛, C #, рдкрд╛рдпрдерди 2, рдкрд╛рдпрдерди 3, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкрд╛рд░реНрд╕рд░реНрд╕ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред C ++ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░, рд╕реНрд╡рд┐рдлреНрдЯред рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛, рдЕрдм рдЗрд╕ рдЯреВрд▓ рдореЗрдВ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдФрд░ рдбреАрдмрдЧ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ LL рд╡реНрдпрд╛рдХрд░рдг рдмрд╛рдПрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдирд┐рдпрдореЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, ANTLR рдореЗрдВ, рд╕рдВрд╕реНрдХрд░рдг 4 рд╕реЗ рд╢реБрд░реВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ (рдЫрд┐рдкреЗ рдпрд╛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдмрд╛рдИрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдирд┐рдпрдореЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░)ред рдЬрдм рдкрд╛рд░реНрд╕рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдРрд╕реЗ рдирд┐рдпрдо рдирд┐рдпрдорд┐рдд рдЧреИрд░-рд╡рд╛рдо-рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╡рд╛рд▓реЗ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдВрдХрдЧрдгрд┐рддреАрдп рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рддрд╛ рд╣реИ:
expr : expr '*' expr | expr '+' expr | <assoc=right> expr '^' expr | id ;
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрд╕реНрдХрд░рдг 4 рдореЗрдВ, рдПрдбрд╛рдкреНрдЯрд┐рд╡ рдПрд▓рдПрд▓ (*) рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдмрджреМрд▓рдд рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИред рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдзреАрдореА рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдЬреАрдПрд▓рдПрд▓ рдФрд░ рдЬреАрдПрд▓рдЖрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд╛рднреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ (рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд) рдХреЗ рд╕рд╛рде рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ, рдФрд░ рдорд╛рдирдХ, рддреЗрдЬреА рд╕реЗ рдПрд▓рдПрд▓-рдкреБрдирд░рд╛рд╡рд░реНрддреА рдореВрд▓ рдПрд▓реНрдЧреЛрд░рд┐рджрдо, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рд╕рднреА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИрдВред рдЕрд╕реНрдкрд╖реНрдЯ рдХрд╛рд░реНрдпред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╕рд╛рд░ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдкрд░ рдПрд▓рдПрд▓-рдкрд╛рд░реНрд╕рд░реНрд╕ рдХрд╛ рдЫрджреНрдо-рд╕рдорд╛рдирд╛рдВрддрд░ рд▓реЙрдиреНрдЪ рд╣реИ, рдЙрдирдХрд╛ рдХреИрд╢рд┐рдВрдЧ рдФрд░ рдПрдХ рдЙрдкрдпреБрдХреНрдд рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рдХрд╛ рдЪрдпрди (рдЬреАрдПрд▓рдЖрд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИрдВ)ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЧрддрд┐рд╢реАрд▓ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдУ (рдПрди 4 ) рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЧрддрд┐ рд░реИрдЦрд┐рдХ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЪреМрдереЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рдЧрдИ рд╣реИред ANTLR 4 рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдФрд░ рдЕрдиреНрдп рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЗ рдЙрдирдХреЗ рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЕрдиреБрдХреВрд▓реА рдПрд▓рдПрд▓ (*) рдкрд╛рд░реНрд╕рд┐рдВрдЧ: рдж рдкрд╛рд╡рд░ рдСрдл рдбрд╛рдпрдирд╛рдорд┐рдХ рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рджреЗрдЦреЗрдВ ред
рд░реЛрд╕рд▓рд┐рди

рд░реЛрдЬрд▓рд┐рди рд╕рд┐рд░реНрдл рдПрдХ рдкрд╛рд░реНрд╕рд░ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕реА # рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ, рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдЙрдкрдХрд░рдг рд╣реИред рдЗрд╕рдХрд╛ рд╡рд┐рдХрд╛рд╕ GitHub рдкрд░ рднреА рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ ANTLR рд╕реЗ рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИред рдпрд╣ рд▓реЗрдЦ рдХреЗрд╡рд▓ рд╢рдмреНрджрд╛рд░реНрде рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕рдХреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИред Roslyn рдПрдХ рдирд┐рд╖реНрдард╛, рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдФрд░ рдереНрд░реЗрдб рд╕реЗрдл рдЯреНрд░реА рдореЗрдВ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреЗрдбрд╝ рдХреЛ рд╡рд░реНрдг-рд╕реЗ-рд╡рд░реНрдг рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди, рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдФрд░ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрджреЗрд╢ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдЗрд╕рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрдВред рдЕрдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рд╕реЗ рдХрдИ рдзрд╛рдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдбрд╝ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдзрд╛рдЧрд╛ рдЙрд╕ рдкреЗрдбрд╝ рдХреА "рд╕реНрдорд╛рд░реНрдЯ" рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрди рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕ рдкреЗрдбрд╝ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд╕реНрддреБрдПрдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ:
- рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдиреЛрдб рдПрдХ рдЧреИрд░-рдЯрд░реНрдорд┐рдирд▓ рдЯреНрд░реА рдиреЛрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдЕрдиреНрдп рдиреЛрдбреНрд╕ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдиреЛрдб рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдХреЗ рд▓рд┐рдП ElseClauseSyntax);
- рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреЛрдХрди - рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдиреЛрдб рдЬреЛ рдПрдХ рдХреАрд╡рд░реНрдб, рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рд╢рд╛рдмреНрджрд┐рдХ рдпрд╛ рд╡рд┐рд░рд╛рдо рдЪрд┐рд╣реНрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ;
- рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдЯреНрд░рд┐рд╡рд┐рдпрд╛ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рдиреЛрдб рд╣реИ рдЬреЛ рдПрдХ рд╕реНрдерд╛рди, рдЯрд┐рдкреНрдкрдгреА рдпрд╛ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдпрд╣ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛрдП рдмрд┐рдирд╛ рджрд░реНрдж рд░рд╣рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рд╕рд╛рдорд╛рдиреНрдп рдЬреНрдЮрд╛рди рдХрд╛ рдХреЛрдИ рдЬрдирдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдХреЛрдб рдореЗрдВ рдПрдХ рдкреЗрдбрд╝ рдХреЛ рд╡рд╛рдкрд╕ рдмрджрд▓рдиреЗ рдкрд░ рдпреЗ рдиреЛрдбреНрд╕ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП)ред
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдореБрджреНрджреЗ
рд╡реНрдпрд╛рдХрд░рдг рдФрд░ рдкрд╛рд░реНрд╕рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреАрд╡рд░реНрдб
рдЕрдХреНрд╕рд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреАрд╡рд░реНрдб рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C # рдореЗрдВ, async Method()
рд╡рд┐рдзрд┐ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рдкрд╣рд▓реЗ рд░рдЦрд╛ рдЧрдпрд╛ async
рдХреАрд╡рд░реНрдб рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИред рд▓реЗрдХрд┐рди рдпрджрд┐ рджрд┐рдП рдЧрдП рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдЪрд░ var async = 42;
рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ var async = 42;
, рддреЛ рдХреЛрдб рднреА рдорд╛рдиреНрдп рд╣реЛрдЧрд╛ред ANTLR рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛ рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ:
- рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП:
async: {_input.LT(1).GetText() == "async"}? ID ;
async: {_input.LT(1).GetText() == "async"}? ID ;
; рд╣рд╛рд▓рд╛рдБрдХрд┐, рдПрд╕рд┐рдВрдХреНрд╕ рдЯреЛрдХрди рд╕реНрд╡рдпрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдмреБрд░рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реНрдпрд╛рдХрд░рдг рд░рдирдЯрд╛рдЗрдо рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрджрд╕реВрд░рдд рджрд┐рдЦрддрд╛ рд╣реИ; - рдЖрдИрдбреА рдирд┐рдпрдо рдореЗрдВ рдЯреЛрдХрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ:
ASYNC: 'async'; ... id : ID ... | ASYNC;
рдЕрд╕реНрдкрд╖реНрдЯрддрд╛
рдПрдХ рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛ рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдП рдЧрдП рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╣реИрдВ (рдЬреИрд╕реЗ рдХрд┐ "рдЗрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрдЯреАрд▓ рд╣рдорд╛рд░реА рдХрд╛рд░реНрдпрд╢рд╛рд▓рд╛ рдореЗрдВ рд╣реИрдВ")ред рдФрдкрдЪрд╛рд░рд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдРрд╕реЗ рдирд┐рд░реНрдорд╛рдг рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдирд┐рдкреЗрдЯ:
stat: expr ';' // expression statement | ID '(' ')' ';' // function call statement; ; expr: ID '(' ')' | INT ;
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреНрд░рд╛рдХреГрддрд┐рдХ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╡реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдиреБрдЪрд┐рдд рд░реВрдк рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдП рдЧрдП рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред ANTLR рдкрд╛рд░реНрд╕рд░ рдкреАрдврд╝реА рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдРрд╕реА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди LL_EXACT_AMBIG_DETECTION
рд╡рд┐рдХрд▓реНрдк LL_EXACT_AMBIG_DETECTION
рд╣реЛрдиреЗ рдкрд░ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рд╣реА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рднреА рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реИ)ред рд▓реЗрдХреНрд╕реАрд░ рдФрд░ рдкрд╛рд░реНрд╕рд░ рджреЛрдиреЛрдВ рдореЗрдВ рдПрдВрдмреАрдЧреБрдПрдЯреА рд╣реЛ рд╕рдХрддреА рд╣реИред рджреЛ рд╕рдорд╛рди рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП рд▓реЗрд╕рд░ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдКрдкрд░ рдШреЛрд╖рд┐рдд рдЯреЛрдХрди рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг)ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╛рдиреНрдп рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C ++), рдЖрдк рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрд╛рд░реНрде рд╡рд┐рдзреЗрдп (рдХреЛрдб рдЖрд╡реЗрд╖рдг) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
expr: { isfunc(ID) }? ID '(' expr ')' // func call with 1 arg | { istype(ID) }? ID '(' expr ')' // ctor-style type cast of expr | INT | void ;
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрднреА-рдХрднреА рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рдирдпрд╛ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C # рдореЗрдВ рдПрдХ рдмрд┐рдЯрд╡рд╛рдЗрдЬрд╝ рд░рд╛рдЗрдЯ рд╢рд┐рдлреНрдЯ рдСрдкрд░реЗрдЯрд░ RIGHT_SHIFT: '>>'
; рджреЛ рдХреЛрдг рдХреЛрд╖реНрдардХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬреЗрдиреЗрд░рд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: List<List<int>>
ред рдпрджрд┐ рдЖрдк рдЯреЛрдХрди >>
рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рджреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рдХрднреА рднреА рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рд░реНрд╕рд░ рдпрд╣ рдорд╛рди рд▓реЗрдЧрд╛ рдХрд┐ рдСрдкрд░реЗрдЯрд░ >>
рджреЛ рд╕рдорд╛рдкрди рдХреЛрд╖реНрдардХ рдХреЗ рдмрдЬрд╛рдп рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ RIGHT_SHIFT
рдЯреЛрдХрди рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЙрд╕реА рд╕рдордп, LEFT_SHIFT: '<<'
рдЯреЛрдХрди LEFT_SHIFT: '<<'
рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрдгреЛрдВ рдХреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдЬрдм рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛрдг рдХреЛрд╖реНрдардХ рдХреЛ рдПрдХ рд╡реИрдз рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ, рд╣рдордиреЗ рдЕрднреА рддрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рдХрд╕рд┐рдд рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реИред
рд░рд┐рдХреНрдд рд╕реНрдерд╛рди, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ред
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рдпрд╣рд╛рдВ рдЕрд╕реБрд╡рд┐рдзрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрддрд┐рд╡реНрдпрд╛рдкреА рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдлреЗрдВрдХрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИред ANTLR рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдерд╛рдХрдерд┐рдд рдЪреИрдирд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЕрдиреНрдп рдЯреЛрдХрди рд╕реЗ рдХрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ: Comment: ~[\r\n?]+ -> channel(PhpComments);
рд░реЛрдЬрд▓рд┐рди рдореЗрдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкреЗрдбрд╝ рдХреЗ рдиреЛрдбреНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░рд┐рд╡рд┐рдпрд╛ рд╣реИред ANTLR рдФрд░ рд░реЛрдЬрд▓рд┐рди рджреЛрдиреЛрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рдпрдорд┐рдд рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝реЗ рддреБрдЪреНрдЫ рдЯреЛрдХрди рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред ANTLR рдореЗрдВ, рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕ i рдХреЗ рд╕рд╛рде рдЯреЛрдХрди рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪреИрдирд▓ рд╕реЗ рд╕рднреА рдЯреЛрдХрди рд▓реМрдЯрд╛рддреА рд╣реИ: getHiddenTokensToLeft(int tokenIndex, int channel)
, getHiddenTokensToRight(int tokenIndex, int channel)
ред рд░реЛрдЬрд▓рд┐рди рдореЗрдВ, рдЯрд░реНрдорд┐рдирд▓ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдЯреЛрдХрди рдореЗрдВ рдРрд╕реЗ рдЯреЛрдХрди рддреБрд░рдВрдд рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ANTLR рдореЗрдВ рдЖрдк рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪреИрдирд▓ рдХреЗ рд╕рднреА рдЯреЛрдХрди рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ: lexer.GetAllTokens().Where(t => t.Channel == PhpComments)
, рдФрд░ Roslyn рдореЗрдВ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд SyntaxKind рдХреЗ рд╕рд╛рде рд░реВрдЯ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╕рднреА DescendantTrivia рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ: SingleLineCommentTrivia , MultiLineCommentTrivia , SingleLineDocumentationCommentTrivia , MultiLineDocumentationCommentTrivia , DocumentationCommentExteriorTrivia , XmlComment ред
рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо рдЬреИрд╕реЗ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЙрдиреНрд╣реЗрдВ рдмрд╕ рдЗрд╕рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдПрдХ рдХрдерди рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдкреАрд╡реАрдмреАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдлреНрд░реАрдмреАрдПрд╕рдбреА рдХрд░реНрдиреЗрд▓ рдореЗрдВ рдЕрдлрд╡рд╛рд╣ рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ):
case MOD_UNLOAD: if (via_feature_rng & VIA_HAS_RNG) random_nehemiah_deinit(); random_source_deregister(&random_nehemiah);
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧред

рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд░реНрд╕рд░ рдХреА рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреНрд╖рдорддрд╛ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ - рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ:
- рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреЛрдб рдХреЛ рдЖрдЧреЗ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЪреВрдХ рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреЗ рдмрд╛рдж);
- рдХрдИ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рддреНрд░реБрдЯрд┐ рдФрд░ рдЙрд╕рдХреЗ рд╕реНрдерд╛рди рдХреА рдЦреЛрдЬ рдХрд░реЗрдВред
ANTLR рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ
ANTLR рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рдореМрдЬреВрдж рд╣реИрдВ:
рдЯреЛрдХрди рдорд╛рдиреНрдпрддрд╛ рддреНрд░реБрдЯрд┐ (Lexer no viable alt); рдПрдХрдорд╛рддреНрд░ рдореМрдЬреВрджрд╛ рд╢рд╛рдмреНрджрд┐рдХ рддреНрд░реБрдЯрд┐, рдПрдХ рдореМрдЬреВрджрд╛ рдЯреЛрдХрди рд╕реЗ рдЯреЛрдХрди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИ:
рдХрдХреНрд╖рд╛ # {int i; } - рдпрд╣рд╛рдБ рдРрд╕рд╛ рдЯреЛрдХрди # рд╣реИ ред
рд▓рд╛рдкрддрд╛ рдЯреЛрдХрди (рдЧреБрдо рдЯреЛрдХрди); рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, ANTLR рдЯреЛрдХрди рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд▓рд╛рдкрддрд╛ рдЯреЛрдХрди рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЧрд╛рдпрдм рд╣реИ, рдФрд░ рдореМрдЬреВрдж рд╣реЛрдиреЗ рдкрд░ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред
рд╡рд░реНрдЧ T {int f (x) {a = 3 4 5; } } - рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЯреЛрдХрди рд╣реИ }
рдЕрдВрдд рдореЗрдВ;
рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреЛрдХрди (рдПрдХреНрд╕рдЯреНрд░реЛрдирд╕ рдЯреЛрдХрди); ANTLR рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИ рдХрд┐ рдЯреЛрдХрди рдЧрд▓рдд рд╣реИ рдФрд░ рдЖрдЧреЗ рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЕрдиреБрдкрд╕реНрдерд┐рдд рдерд╛: рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдРрд╕рд╛ рдЯреЛрдХрди рдкрд╣рд▓реЗ рд╣реИ ;
рдХреНрд▓рд╛рд╕ рдЯреА ; {рдЗрдВрдЯ рдЖрдИ; }
рдЕрд╕рдВрдЧрдд рдЗрдирдкреБрдЯ рд╢реНрд░реГрдВрдЦрд▓рд╛ (рдмреЗрдореЗрд▓ рдЗрдирдкреБрдЯ); рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, "рдкреИрдирд┐рдХ рдореЛрдб" рдЪрд╛рд▓реВ рд╣реЛрддрд╛ рд╣реИ, рдЗрдирдкреБрдЯ рдЯреЛрдХрди рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкрд╛рд░реНрд╕рд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕реЗрдЯ рд╕реЗ рдЯреЛрдХрди рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЯреЛрдХрди 4 рдФрд░ 5 рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдЯреЛрдХрди рд╣реИ ;
рд╡рд░реНрдЧ T {int f (x) {a = 3 4 5 ; }}
- рд▓рд╛рдкрддрд╛ рд╡рд┐рдХрд▓реНрдк (рдХреЛрдИ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡реИрдХрд▓реНрдкрд┐рдХ рдЗрдирдкреБрдЯ рдирд╣реАрдВ); рдпрд╣ рддреНрд░реБрдЯрд┐ рдЕрдиреНрдп рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред
рдХрдХреНрд╖рд╛ рдЯреА { рдЗрдВрдЯ; }
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдирд┐рдпрдо рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣:
function_call : ID '(' expr ')' | ID '(' expr ')' ')' {notifyErrorListeners("Too many parentheses");} | ID '(' expr {notifyErrorListeners("Missing closing ')'");} ;
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, ANTLR 4 рдЕрдкрдиреА рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рд░реНрд╕рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП: рдкрд╣рд▓реЗ, рддреЗрдЬ рдПрд╕рдПрд▓рдПрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐, рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реИ (рдпрд╣ рдХреЛрдб рдпрд╛ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ), рдкреВрд░реНрдг, рд▓реЗрдХрд┐рди рдХрдо рддреЗрдЬ рдСрд▓-рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреЛрдб (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛) рд╣рдореЗрд╢рд╛ рдПрд▓рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдРрд╕реА рдлрд╛рдЗрд▓реЗрдВ рдХрдо рд╣реЛрддреА рд╣реИрдВред
ANTLR рдореЗрдВ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЧрддрд┐ рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рдирд╛ рд░реЛрдЬрд▓рд┐рди рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ
рд░реЛрдЬрд▓рд┐рди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рд░реНрд╕рд┐рдВрдЧ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ:
- рдЫреВрдЯреА рд╣реБрдИ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рд░реЛрдЬрд▓рд┐рди рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рдиреЛрдб рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ
IsMissing = true
(рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдЕрд░реНрдзрд╡рд┐рд░рд╛рдо рдХреЗ рдмрд┐рдирд╛ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИ); - рдЕрдзреВрд░рд╛ рд╕рджрд╕реНрдп ; рдПрдХ рдЕрд▓рдЧ
IncompleteMember
рдиреЛрдб рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред - рдПрдХ рд╕рдВрдЦреНрдпрд╛рддреНрдордХ, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдпрд╛ рд╡рд░реНрдг рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЧрд▓рдд рдорд╛рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдорд╛рди рдмрд╣реБрдд рдмрдбрд╝рд╛, рдПрдХ рдЦрд╛рд▓реА рдЪрд╛рд░):
NumericLiteralToken
, StringLiteralToken
рдпрд╛ CharacterLiteralToken
рдмрд░рд╛рдмрд░ рдПрдХ рдЕрд▓рдЧ рдиреЛрдб рдХреЗ рд╕рд╛рде; - рд╕реБрдкрд░рдлрд╝реНрд▓реБрдЕрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд╛рддреНрд░): Kind =
SkippedTokensTrivia
рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдиреЛрдб рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдирд┐рдореНрди рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдЗрди рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
(рд░реЛрд╕рд▓рд┐рди рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ):
рд░реЛрд╕рд▓рд┐рди рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕реА # рдХреЛрдб namespace App { class Program { ; // Skipped Trivia static void Main(string[] args) { a // Missing ';' ulong ul = 1lu; // Incorrect Numeric string s = """; // Incorrect String char c = ''; // Incorrect Char } } class bControl flow { c // Incomplete Member } }
рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЗрди рд╕реБрд╡рд┐рдЪрд╛рд░рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд░реЛрдЬрд▓рд┐рди рдЪрд░рд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдбрд╝ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рдЕрднреНрдпрд╛рд╕ рддрдХ

PHP рдХреЗ рд▓рд┐рдП, рдЯреА-рдПрд╕рдХреНрдпреВрдПрд▓ рдкрд╛рд░реНрд╕рд░, php , tsql , plsql рд╡реНрдпрд╛рдХрд░рдг , рдЬреЛ рдЙрдкрд░реЛрдХреНрдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рджреГрд╢реНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ, рдХреЛ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдореЗрдВ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рд╡рд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП, рд░реЗрдбреА-рдореЗрдб рдЬрд╛рд╡рд╛ рдФрд░ рдЬрд╛рд╡рд╛ 8 рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рддреБрд▓рдирд╛ рдХреА рдЧрдИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд░реЛрдЬрд▓рд┐рди рдФрд░ рдПрдПрдирдЯреАрдПрд▓рдЖрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкрд╛рд░реНрд╕рд░ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рднрд╛рд╖рд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 5 рдФрд░ 6 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реА # рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ред рдЗрди рд╡реНрдпрд╛рдХрд░рдгреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдПрд╕рдХреНрдпреВрдПрд▓-рдЖрдзрд╛рд░рд┐рдд рднрд╛рд╖рд╛рдПрдВ рдЖрд╡рдзрд┐рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдШреЛрд╖рдгрд╛рддреНрдордХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЯреА-рдПрд╕рдХреНрдпреВрдПрд▓, рдкреАрдПрд▓ / рдПрд╕рдХреНрдпреВрдПрд▓ рдХреА рдЙрдирдХреА рдмреЛрд▓рд┐рдпреЛрдВ рдореЗрдВ рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд┐рд░реНрдорд╛рдг ( рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ ) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛ рдФрд░ рдЬрд╛рд╡рд╛ 8 рд╡реНрдпрд╛рдХрд░рдг
рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЧрд╣рд░реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╡рд╛рд▓реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЬрд╛рд╡рд╛ 7 рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬрд╛рд╡рд╛ 7 рд╡реНрдпрд╛рдХрд░рдг рдкрд╛рд░реНрд╕ рдХреЛрдб рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдкрд╛рд░реНрд╕рд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, ManyStringConcatenation.java рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЬрдм рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЕрдзрд┐рдХ рд╕рдордп рдФрд░ рд╕реНрдореГрддрд┐ рдХрд╛ рдХреНрд░рдо рд▓реЗрддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ - рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдорд╛рди "рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб" рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЖрдП рдереЗред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдкреВрд░реА рд╕рдорд╕реНрдпрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдореЗрдВ рдмрд╛рдПрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдирд┐рдпрдореЛрдВ рдХреЗ рдХрд╛рд░рдг рдареАрдХ рд╣реИред рдЬрд╛рд╡рд╛ 8 рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ рдХреЗрд╡рд▓ рдЖрджрд┐рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдирд┐рдпрдо рд╣реИрдВред рдЖрджрд┐рдо рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рд╛рде рдирд┐рдпрдо рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдЦреБрдж рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдореЗрдВ рдПрдХ рд╕рд╛рде рдирд╣реАрдВред рдПрдХ рдирд┐рдпрдорд┐рдд рдкреБрдирд░рд╛рд╡рд░реНрддреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:
expression : expression ('*'|'/') expression | expression ('+'|'-') expression | ID ;
рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдирд┐рдпрдореЛрдВ рдХреЛ рдЖрджрд┐рдо рдмрд╛рдПрдБ-рдкреБрдирд░рд╛рд╡рд░реНрддреА рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
expression : multExpression | expression ('+'|'-') multExpression ; multExpression : ID | multExpression ('*'|'/') ID ;
рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЧреИрд░-рдкреБрдирд░рд╛рд╡рд░реНрддреА (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рдж рдХреЗ рднрд╛рд╡ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╣реЛрдирд╛ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ):
expression : multExpression (('+'|'-') multExpression)* ;
рдпрджрд┐ рдСрдкрд░реЗрд╢рди рдореЗрдВ рд╕рд╣реА рд╕рдорд░реВрдкрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдШрд╛рддрд╛рдВрдХ), рддреЛ рдЖрджрд┐рдо рд╕рд╣реА-рдкреБрдирд░рд╛рд╡рд░реНрддреА рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
expression : <assoc=right> expression '^' expression | ID ;
powExpression : ID '^' powExpression | ID ;
рдПрдХ рддрд░рдл, рдмрд╛рдПрдВ рд╣рд╛рде рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдЬрд╛рддреАрдп рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╕рд╛рдордирд╛ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ рдореЗрдореЛрд░реА рдЦрдкрдд рдФрд░ рдХрдо рдкреНрд░рджрд░реНрд╢рди рдХреА рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдУрд░, рдпрд╣ рдмрд╛рдХреА рдХрдИ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЙрди рднрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрджрд┐рдо рдкреБрдирд░рд╛рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЧрд╣рд░реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдорд╡рд░реНрддреА), рдФрд░ рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рддреБрд▓рдирд╛)ред
рдкреАрдПрдЪрдкреА рд╡реНрдпрд╛рдХрд░рдг
.NET рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ PHP рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлрд╛рд▓реИрдВрдЧрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рд╣рдЬ рдирд╣реАрдВ рдереЗ рдХрд┐ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рд╣реЛ рд░рд╣реА рд╣реИ, рдФрд░ рдПрдПрд╕рдЯреА рдиреЛрдбреНрд╕ (рдХреЗрд╡рд▓ рд╡реЙрдХрд░) рдХреЛ рдкрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ ANTLR рдХреЗ рддрд╣рдд PHP рд╡реНрдпрд╛рдХрд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред
рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХреАрд╡рд░реНрдбред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, PHP рдореЗрдВ рд╕рднреА рдЯреЛрдХрди, рдЪрд░ рдирд╛рдореЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде (рдЬреЛ '$' рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ), рдХреЗрд╕ рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛрддреЗ рд╣реИрдВред ANTLR рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╕ рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рдХреЛ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рд╕рднреА рд▓реИрдЯрд┐рди рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЦрдВрдбрд┐рдд рд╢рд╛рдмреНрджрд┐рдХ рдирд┐рдпрдореЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛:
Abstract: ABSTRACT; Array: ARRAY; As: AS; BinaryCast: BINARY; BoolType: BOOLEAN | BOOL; BooleanConstant: TRUE | FALSE; ... fragment A: [aA]; fragment B: [bB]; ... fragment Z: [zZ];
ANTLR рдореЗрдВ рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рдЯреЛрдХрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдиреНрдп рдЯреЛрдХрди рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдЯреЛрдХрди рдирд╣реАрдВ рд╣реИред рдпрд╣ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЯреЛрдХрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдереЗрдЯрд┐рдХ рдЪреАрдиреА рд╣реИред рдЕрдВрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рдЯреЛрдХрди рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: Abstract: [Aa] [Bb] [Ss] [Tt] [Rr] [Aa] [Cc] [Tt]
ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЙрддреНрдкрдиреНрди рд▓реЗрд╕рд░ рд░рдирдЯрд╛рдЗрдо рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдКрдкрд░реА рдФрд░ рдирд┐рдЪрд▓реЗ рдорд╛рдорд▓реЗ рдХреЗ рдЪрд░рд┐рддреНрд░ рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ рддреБрд░рдВрдд рдШреЛрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред Minuses рдореЗрдВ рд╕реЗ, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд▓реЗрдХреНрд╕рд░ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╣реИред
- рд╡рд░реНрдгреЛрдВ рдХреА рд╕рдВрдкреВрд░реНрдг рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдирд┐рдореНрди (рдпрд╛ рдКрдкрд░реА) рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд▓рд╛рдирд╛ рдФрд░ рд▓реЗрдХреНрд╕рд░ рд╢реБрд░реВ рдХрд░рдирд╛, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕рднреА рдЯреЛрдХрди рд╡рд░реНрдгрд┐рдд рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░рд╣ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд░рдирдЯрд╛рдЗрдо (рдЬрд╛рд╡рд╛, рд╕реА #, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдкрд╛рдпрдерди) рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдХрд╕реНрдЯрдо рдлрд╝рд╛рдЗрд▓ рдпрд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо рдФрд░ рдУрд╡рд░рд░рд╛рдЗрдб рдПрд▓рдП рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдХреБрдЫ рдЯреЛрдХрди рдорд╛рдорд▓реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рдирд╣реАрдВ рд╣реИрдВред
рд╡рд┐рдХрд╕рд┐рдд PHP рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ, рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╢рд╛рдмреНрджрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрдорддреМрд░ рдкрд░ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╕рдордп рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реНрдпрд╛рдХрд░рдг рд╡реИрд╕реЗ рднреА рд░рдирдЯрд╛рдЗрдо рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рдЕрдиреНрдп рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдХреЗрд╕-рдЕрд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЯреЛрдХрдиреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд▓реНрд╕ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ RFC рдХреЗрд╕ рдЗрдиреНрд╕реЗрдиреНрд╕рд┐рдЯреА рдкреНрд░реВрдл рдСрдлрд╝ рдХреЙрдиреНрд╕реЗрдкреНрдЯ рдмрдирд╛рдпрд╛ред рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЙрдиреНрд╣реЗрдВ ANTLR рд╕рдореБрджрд╛рдп рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдордВрдЬреВрд░реА рдирд╣реАрдВ рдорд┐рд▓реАред
PHP, HTML, CSS, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд▓реЗрдХреНрд╕рд┐рдХрд▓ рдореЛрдбред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, PHP рдХреЛрдб рдХреЗ рдЖрд╡реЗрд╖рдг HTML рдХреЛрдб рдХреЗ рдЕрдВрджрд░ рд▓рдЧрднрдЧ рдХрд╣реАрдВ рднреА рд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рд╕реАрдПрд╕рдПрд╕ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдЖрд╡реЗрд╖рдг рднреА рдЗрд╕ HTML рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрди рдЖрд╡реЗрд╖рдгреЛрдВ рдХреЛ "рджреНрд╡реАрдк" рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб ( рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛) рдорд╛рдиреНрдп рд╣реИ:
<?php switch($a): case 1:
рдпрд╛
<script type="text/javascript"> document.addEvent('domready', function() { var timers = { timer: <?=$timer?> }; var timer = TimeTic.periodical(1000, timers); functionOne(<?php echo implode(', ', $arrayWithVars); ?>); }); </script>
рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, ANTLR рдореЗрдВ рддрдерд╛рдХрдерд┐рдд рдореЛрдб рдХрд╛ рдПрдХ рддрдВрддреНрд░ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЗ рддрд╣рдд рдЯреЛрдХрди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрдЯреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд░рдорд╢рдГ SCRIPT рдФрд░ рд╕реНрдЯрд╛рдЗрд▓ рдореЛрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реАрдПрд╕рдПрд╕ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдХреА рдПрдХ рдзрд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд╡реНрдпрд╛рдХрд░рдг рдореЗрдВ, рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореЛрдб рдореЗрдВ, DEFAULT_MODE HTML рдЯреЛрдХрди рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЖрдк ANTLR рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рд▓реЗрд╕реНрдЯрд░ рдореЗрдВ рд▓рдХреНрд╖реНрдп рдХреЛрдб рдХреА рдПрдХ рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реИред рдЕрд░реНрдерд╛рддреН, nonEmptyStatement рдореЗрдВ рдЗрдирд▓рд╛рдЗрдирд╣реЗрдЯрд▓рдПрдо рдирд┐рдпрдо рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ DEFAULT_MODE рдореЛрдб рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдЯреЛрдХрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ:
nonEmptyStatement : identifier ':' | blockStatement | ifStatement | ... | inlineHtml ; ... inlineHtml : HtmlComment* ((HtmlDtd | htmlElement) HtmlComment*)+ ;
рдЬрдЯрд┐рд▓ рд╕рдВрджрд░реНрдн-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдирд┐рд░реНрдорд╛рдгред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐ ANTLR рдХреЗрд╡рд▓ KS-рд╡реНрдпрд╛рдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рддрдерд╛рдХрдерд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рдордирдорд╛рдиреЗ рдХреЛрдб рдХреЗ рдЖрд╡реЗрд╖рдг рдЬреЛ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реЗрдЯ рдХреЛ рдХрдо рд╕реЗ рдХрдо рд╕рдВрджрд░реНрдн-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рддрдХ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрд╡реЗрд╖рдг рдХреА рдорджрдж рд╕реЗ, рд╣реЗрд░реЗрдбреЛрдХ рдФрд░ рдЕрдиреНрдп рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
<?php foo(<<< HEREDOC Heredoc line 1. Heredoc line 2. HEREDOC ) ; ?>
рдЯреА-рдПрд╕рдХреНрдпреВрдПрд▓ рд╡реНрдпрд╛рдХрд░рдг
"SQL" рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЬрдбрд╝ рдХреЗ рдмрд╛рд╡рдЬреВрдж, T-SQL рд╡реНрдпрд╛рдХрд░рдг (MSSQL) рдФрд░ PL / SQL рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдХрд╛рдлреА рдЕрд▓рдЧ рд╣реИрдВред
рд╣рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдХрд┐ рд╣рдо рдЗрд╕ рдХрдард┐рди рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореМрдЬреВрджрд╛ рдкрд╛рд░реНрд╕рд░ рдкреВрд░реНрдгрддрд╛, рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ (рдПрдХ рдкрд░рд┐рддреНрдпрдХреНрдд рдЧреЛрд▓реНрдб-рдкрд╛рд░реНрд╕рд░ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рдХрд░рдг ), рдФрд░ C # ( рд╕рд╛рдорд╛рдиреНрдп SQL рдкрд╛рд░реНрд╕рд░ ) рдореЗрдВ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдХреЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред TSQL MSDN. : , , ( SQL- MSDN). , . , . , - .
PL/SQL
PL/SQL , ANTLR3 . , java-runtime. java , AST ( , ). ,
decimal_key : {input.LT(1).getText().equalsIgnoreCase("decimal")}? REGULAR_ID
:
decimal_key: DECIMAL
, .
C#-
, , 5 6 , . . -, runtime.
C# ( , , . . false ):
#if DEBUG && false Sample not compilied wrong code var 42 = a + ; #else
, -, COMMENTS_CHANNEL DIRECTIVE . codeTokens
, . . , ANTLR . тАФ CSharpPreprocessorParser.g4 . true
false
#if
, #elif
, else
, true
, , . Conditional Symbols ( "DEBUG").
true
, codeTokens
, тАФ . ( var 42 = a + ;
) . : CSharpAntlrParser.cs .
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрдЯрд░рдкреЛрд▓реЗрд╢рди
, , , (interpolation-expression), . , (, #0.##). , (regular), (verbatium), . MSDN .
, :
s = $"{p.Name} is \"{p.Age} year{(p.Age == 1 ? "" : "s")} old"; s = $"{(p.Age == 2 ? $"{new Person { } }" : "")}"; s = $@"\{p.Name} ""\"; s = $"Color [ R={func(b: 3):#0.##}, G={G:#0.##}, B={B:#0.##}, A={A:#0.##} ]";
, . CSharpLexer.g4 .
рдкрд░реАрдХреНрд╖рдг
ANTLR
Roslyn, , . ANTLR :
ANTLR Roslyn
Release . ANTLR 4 4.5.0-alpha003 Roslyn (Microsoft.CodeAnalysis) 1.1.1.
WebGoat.PHP
тАФ 885. тАФ 137 248, тАФ 4 461 768.
тАФ 00:00:31 ( 55%, 45%).
PL/SQL Samples
тАФ 175. тАФ 1 909, тАФ 55 741.
< 1 . ( 5%, 95%).
CoreFX-1.0.0-rc2
тАФ 7329. тАФ 2 286 274, тАФ 91 132 116.
:
- Roslyn: 00:00:04 .,
- ANTLR: 00:00:24 . ( 12%; 88%).
Roslyn-1.1.1
тАФ 6527. тАФ 1 967 672, тАФ 74 319 082.
:
- Roslyn: 00:00:03 .,
- ANTLR: 00:00:16 . ( 12%; 88%).
CoreFX Roslyn , C# ANTLR 5 Roslyn, . , ┬л ┬╗ , Roslyn, C#- Java, Python JavaScript ( ), .
, , . PHP, , . , , T-SQL PL/SQL ( ) ( 20). , C# SHARP: NEW_LINE Whitespace* '#';
SHARP: '#';
, 7 , 10 ! , , #, ( , ).
ANTLR Roslyn
C#-, ANTLR:
namespace App { class Program { static void Main(string[] args) { a = 3 4 5; } } class B { c }
ANTLR
- token recognition error at: '' at 3:5
- mismatched input '4' expecting {'as', 'is', '[', '(', '.', ';', '+', '-', '*', '/', '%', '&', '|', '^', '<', '>', '?', '??', '++', '--', '&&', '||', '->', '==', '!=', '<=', '>=', '<<'} at 8:19
- extraneous input '5' expecting {'as', 'is', '[', '(', '.', ';', '+', '-', '*', '/', '%', '&', '|', '^', '<', '>', '?', '??', '++', '--', '&&', '||', '->', '==', '!=', '<=', '>=', '<<'} at 8:21
- no viable alternative at input 'c}' at 15:5
- missing '}' at 'EOF' at 15:6
Roslyn
- test(3,5): error CS1056: Unexpected character ''
- test(8,19): error CS1002:; expected
- test(8,21): error CS1002:; expected
- test(15,5): error CS1519: Invalid token '}' in class, struct, or interface member declaration
- test(15,6): error CS1513: } expected
, Roslyn , ANTLR. . . , Roslyn , . , ( , ), ANTLR . ANTLR , ( , ). , #if
, . ( - ).
рдореЗрдореЛрд░реА рдХреА рдЦрдкрдд
, ANTLR 4 , , . ( 70000 PHP ) , . lexer.Interpreter.ClearDFA()
parser.Interpreter.ClearDFA()
.
, . , GetAllTokens()
ClearDFA()
( ) "Object reference not set to an instance of an object". , ANTLR C#, ( ) ( ) ReadWriterLockSlim
.
Roslyn . 5 C# aspnet-mvc-6.0.0-rc1 , roslyn-1.1.1 , corefx , Newtonsoft.Json-8.0.2 ImageProcessor-2.3.0 200 .
рдирд┐рд╖реНрдХрд░реНрд╖
ANTLR Roslyn. рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╣рдо рдмрддрд╛рдПрдВрдЧреЗ:
- AST Visitor Walker (Listener);
- , ANTLR 4;
- .NET;
- AST;
- DSL .
VladimirKochetkov ┬л тАО SAST┬╗ 40 60 .
рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ