题
我想了解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接受?
任何帮助将真正理解!
解决方案
是的,没错(认为小量的空白区域,那里有没有两个地方在两侧的点)。
在一个LR(0)自动机,则会使状态接受和减少。然而,由于A->a A a
生产,存在会成为一个移位/减少冲突。
在一个LR(1)的自动机,则就要确定是否移位或降低使用先行(a
- >移,在FOLLOW(A)
任何东西 - >减少)
请参阅维基百科文章
不隶属于 StackOverflow