Я работал над компилятором для императивного языка, используя 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
блок - это просто список операторов в скобках {}