假设我有以下语法:
S → X
X → a | ϵ
如果语法中没有涉及ϵ
,我会像这样构建第一个状态:
S' → .S
S → .X
X → .a
但是关于符号 ϵ
呢?我应该包含它吗:
X → .ϵ
也就是说...在创建下一个状态时,我应该执行GOTO(Io,ϵ)
,其中Io是第一个状态吗?
假设我有以下语法:
S → X
X → a | ϵ
如果语法中没有涉及ϵ
,我会像这样构建第一个状态:
S' → .S
S → .X
X → .a
但是关于符号 ϵ
呢?我应该包含它吗:
X → .ϵ
也就是说...在创建下一个状态时,我应该执行GOTO(Io,ϵ)
,其中Io是第一个状态吗?
我同意 Howard 的观点。在 DFA 中,你的状态应该包含项:x → .
这是我为一个使用两个 epsilon 产生式的语法识别 SLR(1) 解析器所绘制的 DFA:
由于ϵ
本身不是终止符,所以您必须从规则中将其删除,这将给出:
X → .
那么以后你就不会有任何奇怪的使用带有“符号” ϵ
的 GOTO
,而是会用状态来替代。
S' → S.
在你的图中是一个接受状态。