Я продолжаю сталкиваться с проблемами уменьшения/уменьшения и сокращения/сдвига с моей грамматикой, но я не уверен, почему и как это исправить.
Вот что у меня есть
block ::=
block_statement
| block_statement block
;
block_statement ::=
type variable_declarators SEMICOLON
| statement
;
statement ::= sub_statement
| IF LPAREN boolexp RPAREN statement FI
| IF LPAREN boolexp RPAREN statement ELSE statement FI
| WHILE LPAREN boolexp RPAREN statement ELIHW
| FOR LPAREN assignment SEMICOLON boolexp SEMICOLON
statement_expression RPAREN statement ROF
;
sub_statement ::=
statement_expression SEMICOLON
| RETURN Exp SEMICOLON
| block
;
statement_expression ::=
assignment
| IDENTIFIER LPAREN argument_list RPAREN
| IDENTIFIER PLUSPLUS
| IDENTIFIER MINUSMINUS
;