Compiler construction LR解析器GOTO函数和Epsilon

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)。解析器

我正在努力学习编译器构造,我刚刚通读了龙书中关于SLR解析器的一章。因此,我决定编写一个简单的语法并尝试手工编写解析器。语法如下所示:

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