LALR (1) рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд▓рд┐рдЦрдирд╛ред рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд

рдкрд░рд┐рдЪрдп, рдпрд╛ рдкрд╛рд░реНрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ


рд╢реБрдн рджреЛрдкрд╣рд░
рдмрд╣реБрдд рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдореБрдЭреЗ рдПрдХ рд╣реА рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдерд╛ред рдХрд╛рд╢, рдореМрдЬреВрджрд╛ рд╕рдорд╛рдзрд╛рди рдореБрдЭреЗ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддреЗ, рдЗрд╕рд▓рд┐рдП рд╕рдорд╕реНрдпрд╛ рдореЗрд░реЗ рдЕрдкрдиреЗ рдкрд╛рд░реНрд╕рд░ рдЬрдирд░реЗрдЯрд░ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдереАред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡рд┐рд╖рдп рдХрд╛рдлреА рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЗрддрдиреЗ рдХрдо рд▓реЗрдЦ рдФрд░ рдХрд┐рддрд╛рдмреЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдореИрдВрдиреЗ рдЕрднреА рднреА рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рд╕рдмрд╕реЗ рдмреБрдирд┐рдпрд╛рджреА рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд┐рдпрд╛ред

рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдХрдВрдкреНрдпреВрдЯрд░ рд╡рд┐рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд, рдЖрдзрд╛рд░ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИред рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдпрд╣ рд░реВрд╕ рдореЗрдВ рд╕реНрдХреВрд▓реЛрдВ / рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдпреЛрдВ рдореЗрдВ рднреА рдкрдврд╝рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рдВрд╕ рдЦреБрдж рджреВрд╕рд░реЗ рднрд╛рдЧ рд╕реЗ рдЬрд╛рдПрдЧрд╛ред

рддреЛ, рдХрд┐рд╕реА рдХреЛ рдПрдХ рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реЛрдЧреА, рдФрд░ рдпрд╣ рд╕рдм рдХреНрдпрд╛ рд╣реИ? рдПрдХ рдкрд╛рд░реНрд╕рд░ рдПрдХ рдХреЛрдб рд╣реИ рдЬреЛ рдПрдХ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЪрд░рд┐рддреНрд░ рд╕реЗрдЯ рдЕрд░реНрде рдЕрд░реНрде рджреЗрддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдЗрди рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ рдЗрди рдЕрдХреНрд╖рд░реЛрдВ рдФрд░ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рдПред рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг "1 + 2" рд╣реИ, рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж рдпрд╛ рдЙрд╕рдХреЗ рджреМрд░рд╛рди, "+" рдЪрд┐рдиреНрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдкреНрд▓рд╕ рдкреНрд░рддреАрдХ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдмрд╛рдЗрдирд░реА рдПрдбрд┐рд╢рди рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдкрджрдирд╛рдо рд╣реИ, рдФрд░ "+3" рдореЗрдВ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдЪрд┐рд╣реНрди рдХрд╛ рдПрдХрд░реА рд╕рдВрдЪрд╛рд▓рдХ рд╣реИред рдпрд╣ рдЬреНрдпрд╛рджрд╛рддрд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред

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


рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд╛рд░реНрд╕рд░реНрд╕


рдареАрдХ рд╣реИ, рдЗрд╕ рддрдХрдиреАрдХ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦрди рдорд╛рдирдХреЛрдВ рдХреЗ рд╕рд╡рд╛рд▓ рдХреЛ рдЙрдард╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред

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

рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЕрд░реНрде рд╣реИ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ - рдЗрдирдкреБрдЯ рдЬрд╛рдирдХрд╛рд░реА рдФрд░ рддрд░реНрдХ рдХреЗ рдкреНрд░рд╛рд░реВрдк / рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг, рдЬреЛ рдЕрдм рд╕реНрд╡рдЪреНрдЫ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рдВрд░рдЪрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
scheme: DIGIT = '0'..'9' ADD = DIGIT '+' DIGIT SIGN = ('+' | '-') DIGIT EXPR = ADD | SIGN code: long result = 0; ParseNode & expr = Parse(input); ParseNode & oper = expr.child() switch (oper.type) { // 0: DIGIT, 1: '+', 2: DIGIT case ADD: result = oper.child(0) + oper.child(2); break; // 0: '+' or '-', 1: DIGIT case SIGN: result = oper.child(0) == '-' ? - oper.child(1) : oper.child(1); break; } 


рджреВрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕рдордЭрд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рджрд┐рдЦрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
  char c = ''; long result = 0; input >> c; // we have three variants of first symbol switch (c) { case '+': // next symbol is digit input >> c; if (c < '0' || c > '9') return SyntaxError; result = c - '0'; break; case '-': // next symbol is digit input >> c; if (c < '0' || c > '9') return SyntaxError; result = c - '0'; break; default: if (c < '0' || c > '9') return SyntaxError; result = c - '0'; input >> c; if (c != '+') return SyntaxError; input >> c; if (c < '0' || c > '9') return SyntaxError; result += (c - '0'); break; } 


рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рддрд░реАрдХрд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рд╕ рджреВрд╕рд░реЗ рдХреЗ рдПрдХ рдЛрдг рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

рд╡реНрдпрд╛рдХрд░рдг рд╡рд┐рд╡рд░рдг рд▓рд╛рдн:
  1. рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЖрд╕рд╛рди рднрд╛рд╖рд╛ рд╕рдорд░реНрдерди рд╣реИред рдпрд╣реА рд╣реИ, рд╕рдВрд╢реЛрдзрдиреЛрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдбрд┐рдирд▓, рдмрд╣реБрдд рд╕рд░рд▓ рд░реВрдк рд╕реЗ рдЖрд░реЛрдкрд┐рдд рд╣реИрдВред
  2. рдЪреВрдВрдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрдЯрд┐рдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рд░реВрдк рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╕рдордЧреНрд░ рд░реВрдк рд╕реЗ рднрд╛рд╖рд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рд╡рд┐рдХрд▓реНрдк рдореЗрдВ, рдЖрдк рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд рд╣рдЬрд╛рд░реЛрдВ рдФрд░ рджрд╕рд┐рдпреЛрдВ рд╣рдЬрд╝рд╛рд░реЛрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдмреАрдЪ рдмрд╕ рджреАрд╡рд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рднрд╛рд╖рд╛ рдХреА рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ, рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд░реНрдерд╛рддреН, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ DIGIT ADD рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ EXPR рдореЗрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рд╢рдмреНрджрд╛рд░реНрде рддрд░реНрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  3. рдЖрд╕рд╛рди рдмрдЧ рдЯреНрд░реИрдХрд┐рдВрдЧред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдмрд╛рд░ рдореЗрдВ рджреЛ рд╢реНрд░реЗрдгрд┐рдпрд╛рдВ - рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдФрд░ рдХреЛрдб рдЦреБрдж рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рддреНрд░реБрдЯрд┐рдпрд╛рдВред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдХреЛрдб рдореЗрдВ рд╡рд┐рд╕рдВрдЧрддрд┐рдпрд╛рдВ, рдореГрдд рдЕрдиреБрднрд╛рдЧ рдФрд░ рдЕрдиреНрдп рддрд╛рд░реНрдХрд┐рдХ рдЦреБрд╢рд┐рдпрд╛рдБ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЙрд╕реА рд╕рдордп рд╕рдВрдХрд▓рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рджрд┐рдП рдЧрдП рд╕рд░реНрдХрд┐рдЯ рдХреЗ рд╕рд╛рде, рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдкреАрдврд╝реА рд╕реНрддрд░ рдкрд░ рддреБрд░рдВрдд рдХреА рдЬрд╛рддреА рд╣реИред
  4. рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдбрд┐рдмрдЧ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд░реНрдгреЛрдВ рдХреА рдПрдХ рд╕рд░рд▓ рдзрд╛рд░рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдХрдИ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред


рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ:
  1. рдкреНрд░рд╡реЗрд╢ рд╕реАрдорд╛ рдмрд╣реБрдд рдХрдо рд╣реИред рдпрд╣реА рд╣реИ, рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ "рд╕рд┐рдЯ рд░рд╛рдЗрдЯ рдХреЛрдб" рдХрд╣ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкрд╛рд░реНрд╕рд░ рдХреЛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╢реИрд▓реА рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдПрдХ рдФрдкрдЪрд╛рд░рд┐рдХ рд╡реНрдпрд╛рдХрд░рдг рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЫреЛрдЯреЗ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг, рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдорд╛рддреНрд░рд╛ - рдЧрдгрд┐рддреАрдп рддрд░реНрдХ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ, рд╡реНрдпрд╛рдХрд░рдг рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреЛрдб рдЬрдирд░реЗрд╢рди рдЯреВрд▓ рдХреЗ рдорд╛рд▓рд┐рдХ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  2. рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реНрдпрд╛рдХрд░рдг рд▓рдЧрднрдЧ рд╣рд░ рдЪреАрдЬ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрдкрд╡рд╛рдж рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реАрдорд┐рдд рдЗрдВрд╕реНрдЯреНрд░реВрдореЗрдВрдЯреЗрд╢рди рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпрдХреНрд╖ рдХреЛрдбрд┐рдВрдЧ рдЕрддреНрдпрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИред
  3. рдЕрднреА рднреА рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдкреНрд▓рд╕ рд╣реИ - рд╕рднреА рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ред рдпрд╣реА рд╣реИ, рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдЧрдарди рдХреЗ рд╕рд╛рде, рдЖрдк рддрд░реНрдХ рдХреЗ рдкреНрд░рдореБрдЦ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рддреБрд░рдВрдд рдЙрдирдХреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рдЖрд╡рд╢реНрдпрдХ рд╕реНрдХреНрд░реАрди рд╣реИрдВ - рдПрдХ рдпреЛрдЬрдирд╛ рд╕реНрдХреНрд░реАрди + рдПрдХ рдХреЛрдб рд╕реНрдХреНрд░реАрдиред рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдлрд┐рд░, рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд▓рд╛рдн рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдЖрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдбрд┐рдВрдЧ рдХреЗ рджреВрд╕рд░реЗ рдкреНрд▓рд╕ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред


рдкрд╛рд░реНрд╕рд░ рд╕рдВрд░рдЪрдирд╛


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



рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд╢рд░реНрдд рдпреЛрдЬрдирд╛ рд╣реИ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рд╕рднреА рддреАрди рднрд╛рдЧреЛрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдкрд╣рд▓реЗ рдпрд╛ рдЕрдВрддрд┐рдо рджреЛ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдШрдЯрдХреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдареЛрд╕ рдЯреБрдХрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдЧрдарди рдореЗрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рд╕рд░реНрд╡реЛрддреНрддрдо рдкреНрд░рдерд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдХрдЯрд▓реЗрдЯ рд╕реЗ рдордХреНрдЦрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдПрдХ рд╣реЛрд▓рд┐рд╡рд░ рдирд╕реНрд▓ рдирд╣реАрдВ рдХрд░реВрдБрдЧрд╛, рд▓реЗрдХрд┐рди рдмрд╕ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпреЗ рдШрдЯрдХ рдХреНрдпрд╛ рд╣реИрдВред рд╢рд╛рдмреНрджрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рд░реНрдгрдорд╛рд▓рд╛ (рд╡рд░реНрдг, рд╕рдВрдЦреНрдпрд╛, рдкреНрд░рдпреБрдХреНрдд рд╡рд░реНрдг, рдЖрджрд┐) рдХреЗ рдкрд╛рддреНрд░реЛрдВ рдХреА рдПрдХ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╣ рдЗрд╕ рдзрд╛рд░рд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЖрджрд┐рдо (рдЬреИрд╕реЗ рдПрдХ рдСрдХреНрд╕реАрдореЛрд░реЛрди, рд╣рд╛рдБ) рдореЗрдВ рддреЛрдбрд╝рддрд╛ рд╣реИ, рддрдерд╛рдХрдерд┐рдд рдЯреЛрдХрди рдпрд╛ рдЯрд░реНрдорд┐рдирд▓ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд▓рдВрдмрд╛рдИ рдХреЗ рдЕрдВрдХреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдмрдЬрд╛рдп, рдкрд╛рд░реНрд╕рд░ рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ "рд╕рдВрдЦреНрдпрд╛" рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдореИрдВ рдиреАрдЪреЗ рдмрддрд╛рдКрдВрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, рджреВрд╕рд░реЗ рдкрджрд╛рдиреБрдХреНрд░рдорд┐рдд рдХреНрд░рдо (рдкрд╣рд▓реЗ - рдЯреЛрдХрди) рдХреЗ рдкреНрд░рддреАрдХреЛрдВ рдХреА рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдкрд╛рд░реНрд╕рд░, рддрдерд╛рдХрдерд┐рдд рдЧреИрд░-рдЯрд░реНрдорд┐рдирд▓, рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдЯреНрд░реА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ ADT рд╡рд┐рд╢рд┐рд╖реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЕрдВрддрд┐рдо рдЪрд░рдг рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреЗрдбрд╝ рдХрд╛ рдПрдХ рдЕрд░реНрде рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдмрд╕ рдЗрд╕ рдЪрд░рдг рдХреЛ рдкрд╣рд▓реА рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдЧрд░ рд╣рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ рднрд╛рдЧ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддреЛ рд╣рдореЗрдВ рдПрдХ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЖрдЦрд┐рд░ рд╡рд╣ рдХреМрди рд╕рд╛ рдЕрдВрддрд░ рд╣реИ рдЬрд┐рд╕реЗ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрдорд╛рд▓рд╛ - рдореВрд▓ рдпрд╛ рдирдпрд╛ рд╕рд┐рдВрдереЗрдЯрд┐рдХред рдЙрддреНрддрд░ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реИ - рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╡рд░реНрдгрдорд╛рд▓рд╛ рдХрд╛ рдПрдХ рд╕рдВрдХреАрд░реНрдгрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд, рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рд╕рд░рд▓реАрдХрд░рдг; рджреВрд╕рд░реА рдмрд╛рдд, рд╣рдо рдЗрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП рдкреЗрдбрд╝ рдХреЗ рдПрдХ рдпрд╛ рдХрдИ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд▓реЗрдХреНрд╕рд┐рдХрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдХреА рднреВрдорд┐рдХрд╛ рдирд╣реАрдВ рдорд╛рдирдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЕрд░реНрдердкреВрд░реНрдг, рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ "1 + 2" рдкрд░ 3 рдирд╣реАрдВ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдЬреИрд╕реЗ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХрд╛рдлреА рдЙрдкрдпреБрдХреНрдд рд╣реИрдВред рдЖрдЗрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЯреНрд░реА рдХреЛ рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВред рдЙрд╕реА рд╕рдордп, рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдкреЗрдбрд╝ рд╣реИ, рдЬреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рдХреЛ рдХрд╛рдлреА рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВред
  DIGIT = '0'..'9' NUMBER = NUMBER? DIGIT ADD = NUMBER '+' NUMBER SIGN = ('+' | '-') NUMBER EXPR = ADD | SIGN 


рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рднрд╛рд╡ 12 + 34 рд╣реИрдВ


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

рдЕрдм рджреВрд╕рд░реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдорд┐рд╢реНрд░ рдзрд╛рддреБ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдпрд╣ рдкреЗрдбрд╝ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЪрд░рдг рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рд╢рдмреНрджрд╛рд░реНрде рдореЗрдВ рд╕реАрдзреЗ рд╢рдмреНрджрд╛рд░реНрде рддрд░реНрдХ рдХрд╛ рдПрдХреАрдХрд░рдг рд╣реИред рдпрд╣рд╛рдВ рд░рдгрдиреАрддрд┐ рд╕рд░рд▓ рд╣реИ - рд╣рдо рдЙрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдЕрд░реНрде рдЕрд░реНрде рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг:
  DIGIT = '0'..'9' {value = child[0] - '0'} ADD = DIGIT '+' DIGIT {value = child[0].value + child[1].value} SIGN = ('+' | '-') DIGIT {value = child[0].value == '-' ? - child[1].value : child[1].value} EXPR = ADD | SIGN {result = child[0].value} 


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

рдПрд▓рдПрд▓ рдмрдирд╛рдо рдПрд▓рдЖрд░, рдпрд╛ рд╣рд╛рдереА рдмрдирд╛рдо рд╡реНрд╣реЗрд▓

рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред

рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рджреЛ рд╕рдореВрд╣ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рд╣реИрдВ - рдЖрд░реЛрд╣реА (рдПрд▓рдЖрд░) рдФрд░ рдЕрд╡рд░реЛрд╣реА (рдПрд▓рдПрд▓)ред

рд╡реЗ рдЕрдкрдирд╛ рдирд╛рдо рдЖрдЙрдЯрдкреБрдЯ рдЯреНрд░реА рдмрдирд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВред рдкрд╣рд▓рд╛ рдиреАрдЪреЗ рд╕реЗ рдПрдХ рдкреЗрдбрд╝ рдмрдирд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗред рдореИрдВ рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рдмреЗрд╡рдХреВрдл рдПрд▓реНрдЧреЛрд░рд┐рджрдо рджреЗ рджреВрдБрдЧрд╛ред

LR parser рдореЗрдВ рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ рдПрдХ рд╕реНрдЯреИрдХ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдЕрдВрддрд┐рдо рдЖрд╡рдХ рд╡рд░реНрдгреЛрдВ (рджреЛрдиреЛрдВ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдФрд░ рдЧреИрд░-рдЯрд░реНрдорд┐рдирд▓реЛрдВ) рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░, рдЕрдЧрд▓реЗ рдЯреЛрдХрди рдХреЛ рдкрдврд╝рддреЗ рд╣реБрдП, рдкрд╛рд░реНрд╕рд░ рдПрдХ рдирд┐рдпрдо рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╕реНрдЯреИрдХ рдХреЗ рд╢реАрд░реНрд╖ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рд╡рд░реНрдг рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрджрд┐ рдпрд╣ рдорд┐рд▓ рдЬрд╛рдП, рддреЛ рдпрд╣ рдврд╣ рдЬрд╛рддрд╛ рд╣реИ рдПрдХ nonterminal рдореЗрдВ рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдПрдХ рдХреНрд░рдоред рдпрд╣реА рд╣реИ, рдпрджрд┐ рд╕реНрдЯреИрдХ {DIGIT, +, DIGIT} рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рддреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕реЗ {ADD}, рдФрд░ рдлрд┐рд░ {EXPR} рдХреЛ рдзреНрд╡рд╕реНрдд рдХрд░ рджреЗрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЫрджреНрдо рдХреЛрдб рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:

 input >> term; while (term != EOF) { stack.push(term); do { reduced = false; for (Rule rule : rules) if (rule.Reduce(stack)) { stack.pop(rule.right.length); stack.push(rule.symbol); reduced = true; break; } } while (reduced); input >> term; } 


рдПрдХ рдПрд▓рдПрд▓ рдкрд╛рд░реНрд╕рд░ рд╡рд┐рдкрд░реАрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ - рдкреНрд░рддреНрдпреЗрдХ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреЗ рд▓рд┐рдП, рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдирд┐рдпрдо рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЖрджрд┐рдо рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, EXPR рдХреЛ рдкрд╣рд▓реЗ рдЪрд░рд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ ADD рдпрд╛ SIGN, рдпрд╛рдиреА 2 рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ) рдФрд░ рдирдП рдкрде рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╡рдВрд╢ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЪрдпрдирд┐рдд рдкрде рд╕реЗ рдЧреИрд░-рдЯрд░реНрдорд┐рдирд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдирд┐рдпрдо рдЯрд░реНрдорд┐рдирд▓реЛрдВ рд╕реЗ рд╡рд┐рдШрдЯрд┐рдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреЗред рд╡рд┐рд╡рд░рдг рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рд╣реИ, рдХреЛрдб рдореЗрдВ рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛрдЧрд╛:
 function ExpandRule(symbol, term) { for (Rule rule : rules) { if (rule.sybmol == symbol && firstTerminal(rule) == term) break; } for (s : rule) { if (s.type == NonTerminal) term = ExpandRule(s, term); else { if (term != s) throw SyntaxError; input >> term; } } return term; } input >> term; ExpandRule(EXPR, term); 


рдХрд┐рд╕ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реНрд╡рд╛рдж рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред рд▓рдЧрднрдЧ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡реЗ рд╕рдорд╛рди рд╣реИрдВред рд╕реЛрд╡рд┐рдпрдд рдореЗрдВ рдПрд▓рдПрд▓ (рдПрдХреНрд╕) рдФрд░ рдкрд╢реНрдЪрд┐рдо рдореЗрдВ рдПрд▓рдЖрд░ (рдПрдХреНрд╕) рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд╛рдЗрдХ рдЪрд▓рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рд╕рдЪ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд╡реИрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдПрд▓рдЖрд░ рдкрд╕рдВрдж рдерд╛, рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдмрддрд╛рдКрдВрдЧрд╛ред

рдкреБрдирд╢реНрдЪ: рд▓реЗрдЦреЛрдВ рдХреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рдорд╣рддреНрд╡ рдХреЛ рд▓реЗрдЦ рдХреЗ рд╕рд╣реА рджреВрд╕рд░реЗ рдЦрдВрдб рдХреЛ рджреЗрдЦрдХрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕реА рд╕реНрд░реЛрдд рдмреНрд▓реЙрдХ рдореЗрдВ рд▓рд┐рдкрдЯрд╛ рд╣реБрдЖ рд╣реИред

рд▓реЗрдЦ рдХреЗ рдЕрдВрд╢


  1. рднрд╛рдЧ 1. рдореВрд▓ рд╕рд┐рджреНрдзрд╛рдВрдд
  2. рднрд╛рдЧ 2. LR рдЬрдирд░реЗрдЯрд░ рдХрд╛ рд╡рд┐рд╡рд░рдг
  3. рднрд╛рдЧ 3. рдПрд▓рдЖрд░-рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓реЗрдЦрди рдФрд░ рд╕рдВрднрд╡ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

Source: https://habr.com/ru/post/In140058/


All Articles