我想了解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)任何东西 - >减少)

请参阅维基百科文章

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top