Я пытаюсь писать, если синтаксис с помощью гибких бизонов и синтаксического анализа У меня есть проблемаПочему, если я добавляю лямбда-левую рекурсию?
здесь грамматика, если синтаксис в CPP
program : //start rule
|statements;
block:
TOKEN_BEGIN statements ';'TOKEN_END;
reexpression:
| TOKEN_OPERATOR expression;
expression: //x+2*a*3
TOKEN_ID reexpression
| TOKEN_NUMBER reexpression;
assignment:
TOKEN_ID'='expression
statement:
assignment;
statements:
statement';'
| block
| if_statement;
else_statement:
TOKEN_ELSE statements ;
else_if_statement:
TOKEN_ELSE_IF '(' expression ')' statements;
if_statement:
TOKEN_IF '(' expression ')' statements else_if_statement else_statement;
Я не могу понять, почему, если я заменю их три правила, левая рекурсия, я просто добавляю лямбда к этим правилам
else_statement:
|TOKEN_ELSE statements ;
else_if_statement:
|TOKEN_ELSE_IF '(' expression ')' statements;
if_statement:
TOKEN_IF '(' expression ')' statements else_if_statement else_statement;
, пожалуйста, помогите мне разобраться.