Поскольку эти два правила идентичны вплоть до code_ifelse
(и предполагается, что code_ifelse является пустым правилом, как действие в правиле), он не может определить, следует ли уменьшить code_ifelse
до или после YST_ELSE. Вы можете исправить это, приведя два правила в соответствие с порядком code_ifelse
и YST_ELSE
.
Некоторые практические правила для грамматик:
- Дон Не используйте symbli c имена для одиночных символьных токенов, таких как
'('
и ')'
- это просто запутывает вещи и делает грамматику трудной для чтения и понимания. - Не используйте действия в правилах если в этом нет крайней необходимости - лучше создать одно правило токена с действием конечного правила, которое делает то, что вам нужно.