我尝试在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时会出现错误。 显然问题出现在我的桌子中没有任何生产的单元格中。当我手动构建解析表时,单元格中没有碰撞,为什么它会给我错误?可能我错过了一些基本的东西?
答案 0 :(得分:0)
这些条目并不表示语法错误。相反,它们识别要解析的文本中的语法错误。当状态机遇到错误值而不是新的状态编号时,它会发出语法错误信号。
顺便说一下,你的语法只接受两个输入:int
和int + int
。你可能想让T递归。