这个语法LL(1)? http://hackingoff.com/compilers/ll-1-parser-generator会出错

时间:2015-06-29 09:09:16

标签: parsing context-free-grammar

我尝试在hackingoff.com网站上使用非常简单的语法,但我对结果感到有点困惑。

我使用的语法如下:

1. E -> int T
2. T -> + int
3. T -> ε

我做了一些手动计算并计算出以下内容:

First(int) = {int}
First(+) = {+}
First(ε) = {ε}
First(E) = {int}
First(T) = {+,ε}

Follow(E) ⊆ Follow(T)
First(T) ⊆ Follow(int)
Follow(E) ⊆ Follow(int)
First(int) ⊆ Follow(+)
Follow(E) ⊆ Follow(int)

=>

Follow(E) = {$}
Follow(T) = {$}
Follow(int) = {+,$}
Follow(+) = {int}

然后我构建了一个解析表:

    int       +       $
  ------------------------
E | int T                |
T |          +int     ε  |
  ------------------------ 

但是当我在hackingoff.com网站上使用这个语法时,根据我的理解,它说语法有一些错误。显示在网站上的表格如下:

[0,"int","+","$"]
[0,0,0,0]
[0,1,5,4]
[0,5,2,3] 

根据我对网站上的描述的理解,在我的情况下,表格中单元格中的值大于3时会出现错误。 显然问题出现在我的桌子中没有任何生产的单元格中。当我手动构建解析表时,单元格中没有碰撞,为什么它会给我错误?可能我错过了一些基本的东西?

1 个答案:

答案 0 :(得分:0)

这些条目并不表示语法错误。相反,它们识别要解析的文本中的语法错误。当状态机遇到错误值而不是新的状态编号时,它会发出语法错误信号。

顺便说一下,你的语法只接受两个输入:intint + int。你可能想让T递归。