我试图了解 LR1 解析器是如何工作的,但我遇到了一个奇怪的问题:如果语法包含 Epsilons 怎么办?例如:如果我有语法:
S -> A
A -> a A | B
B -> a
很清楚如何开始:
S -> .A
A -> .a A
A -> .B
... 等等
但我不知道如何为这样的语法做:
S -> A
A -> a A a | \epsilon
这样做是否正确:
S -> .A
A -> .a A a
( A -> .\epsilon )
然后让这个状态在 DFA 中接受?
任何帮助将不胜感激!