я работал над компилятором для императивного языка, используя lex и yacc, и сегодня я закончил грамматику, дело в том, что я читал в Интернете, что каждая грамматика должна иметь несколько конфликтов сдвига/уменьшения, особенно, если у него есть операторы if/else, которые часто называют висячими if-else, а у моего действительно есть операторы if/elsif/else, но при компиляции он не вызывает конфликтов, вопрос
¿Означает ли это, что эта грамматика имеет недостатки только потому, что она не вызывает конфликтов сдвига/свертки? у меня нет большого опыта в этом, но я не вижу никаких проблем с этим
Если вам нужна дополнительная информация, то производство операторов if/elsif/else в этой грамматике выглядит примерно так:
statement -> ...
------------| initial_conditional_stmt
initial_conditional_stmt: conditional_stmt
-----------------------| conditional_stmt 'else' block
conditional_stmt -> 'if' '(' expression ')' block
------------------| conditional_stmt elsif '(' expression ')' block
block — это просто список операторов в квадратных скобках {}