SLR(1)Parser和epsilon参与其中

Osc*_*ros 15 theory grammar parsing compiler-theory language-theory

我们假设我有以下语法:

S ? X  
X ? a | ?
Run Code Online (Sandbox Code Playgroud)

如果那个语法没有?涉及,我会构建第一个状态,如:

S' ? .S
S ? .X
X ? .a
Run Code Online (Sandbox Code Playgroud)

但这个?符号怎么样?我应该包括:

X ? .?
Run Code Online (Sandbox Code Playgroud)

太?

如果是这样......当创建下一个州......我应该这样做GOTO(Io,?),是否是第一个州?

Ros*_*one 16

我同意霍华德的观点.你在DFA中的状态应该包含项目:x ? .这是我为SLR(1)解析器绘制的DFA,它识别使用两个epsilon产生的语法:SLR(1)DFA


How*_*ard 11

由于?不是终端本身,您必须将其从您的规则中删除

X ? .
Run Code Online (Sandbox Code Playgroud)

然后你不会对GOTO"符号" 感到奇怪,?而是你的状态

S' ? S.
Run Code Online (Sandbox Code Playgroud)

是图表中的接受状态.