将语法转换为LL(1),确定它是否为LL(1)

时间:2015-03-23 17:56:31

标签: parsing grammar context-free-grammar automata formal-languages

我不太明白如何确定语法是否为LL(1)。我得到了以下语法:

S → Y | 1X 
X → 1X | 0
Y → Y0|1X1|2X2

我声明这个语法不是LL(1),因为Y0是递归的。

所以我提出了以下解决方案:

S → Y | 1X
X → 1X | 0
Y → 1X1F | 2X2F
F → ε | 0F

但我仍然不确定这是否正确。我仍然认为我一定错过了某种规则,比如某种因素。我是否必须将1X和2X带入不同的变量?

提前感谢您的帮助。我还想知道是否有更简单的方法来确定语法是否是LL(1)我遇到了很多“第一”和“跟随”表,但实际上并没有设法自己构建一个。

2 个答案:

答案 0 :(得分:1)

如果考虑我们的1X,那么我得到以下结果:

S → Y | Z
X → Z | 0
Y → Z1F | 2X2F
F → ε | 0F
Z → 1X | ε

这意味着S→Y | Z和我认为这是不允许的。

答案 1 :(得分:0)

LL(1)语法需要能够基于单个((1))前瞻标记来预测生产。但是,Y1X都可以以1开头,因此无法预测在给定第一个输入符号{S→YS→1X时是否使用1或{{1}} 1}}。因此,原始语法和转换后的语法都不是LL(1)。