Compiler construction LR解析器GOTO函数和Epsilon
我正在努力学习编译器构造,我刚刚通读了龙书中关于SLR解析器的一章。因此,我决定编写一个简单的语法并尝试手工编写解析器。语法如下所示:Compiler construction LR解析器GOTO函数和Epsilon,compiler-construction,lr,Compiler Construction,Lr,我正在努力学习编译器构造,我刚刚通读了龙书中关于SLR解析器的一章。因此,我决定编写一个简单的语法并尝试手工编写解析器。语法如下所示: S -> A A -> (A)A A -> e, 其中e是空字符串生成 根据on StackOverflow,处于启动状态的项应该如下所示 S -> .A A -> .(A)A A -> .e, 但是GOTO函数是什么样子的呢。我知道GOTO('(')=*某个状态带有->(.A)A*,但我无法真正理解GOTO(e)。解析器
S -> A
A -> (A)A
A -> e,
其中e
是空字符串生成
根据on StackOverflow,处于启动状态的项应该如下所示
S -> .A
A -> .(A)A
A -> .e,
但是GOTO函数是什么样子的呢。我知道GOTO('(')=*某个状态带有->(.A)A*
,但我无法真正理解GOTO(e)
。解析器看到空字符串是没有意义的,是吗
提前谢谢大家
Michael不,解析器没有看到空字符串。它看到的是传入符号(下一个标记)。如果传入符号没有导致转到操作(转到新状态),则解析器将被迫进行缩减(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