LR Parser GOTO功能和Epsilon

时间:2012-12-24 01:22:17

标签: compiler-construction lr

我正在尝试学习编译器构造,我只是阅读了有关SLR解析器的Dragon Book章节。所以,我决定制作一个简单的语法并尝试手工编写解析器代码。语法看起来像这样:

S -> A
A -> (A)A
A -> e,

其中e是空字符串生成。

根据StackOverflow上的another question,处于起始状态的项应该看起来像

S -> .A
A -> .(A)A
A -> .e,

但是GOTO的功能是什么样的。我知道GOTO( '(' ) = *some state with A -> (.A)A*,但我无法真正地围绕GOTO(e)。解析器看到一个空字符串并没有多大意义。是吗?

提前谢谢大家!

迈克尔

1 个答案:

答案 0 :(得分:0)

不,解析器看不到空字符串。它看到的是传入的符号(下一个标记)。如果传入符号不引起goto动作(进入新状态),则强制解析器进行缩减(A→> e),然后基于A(非终结转换)进行转换。

In State:   

A -> '(' . A ')' A
A -> . '(' A ')' A 
A -> e

if the input symbol is not '(', then the parser will make the reduction:

A -> e

and go to the new state:

A -> '('  A . ')' A