我正在尝试学习编译器构造,我只是阅读了有关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)
。解析器看到一个空字符串并没有多大意义。是吗?
提前谢谢大家!
迈克尔
答案 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