2012-12-24 38 views
1

我努力学习的编译器建设,我只是通过对SLR分析器龙书章阅读。所以,我决定写一个简单的语法,并尝试手动编写解析器。语法如下:LR分析器GOTO功能和Epsilon

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

其中e是空字符串生成。

another question在计算器上,在启动状态的项目应该像

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

,但会是什么GOTO功能样子。我知道GOTO('(') = *some state with A -> (.A)A*,但我不能真正包裹我的头GOTO(e)。解析器看到一个空字符串并没有什么意义。可以?

谢谢大家提前!

Michael

回答

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