当所有人都有`$`时,为什么我们把'A'作为前瞻符号?

时间:2013-04-19 14:28:15

标签: parsing syntax compiler-construction lr

我正在使用 canonical LR Method 来构建解析表。

考虑语法:

s -> D C A
s -> D a B
a -> C
s -> a A

我正在阅读的书中提到第一个闭合状态

I(0) = [s -> .D C A , $]
       [s -> .D a B , $]
       [a -> .C , A]
       [s -> .a A , $]

在州

[a -> .C , A]

A中的item来自哪里?所有项目都有$作为向前看符号,第三项有A

请解释一下。

1 个答案:

答案 0 :(得分:2)

项目:

[ a -> · C, A ]

项目扩展的结果:

[ s -> · a A ]

其中非终结符a后跟终端A。这意味着C减少到a可能发生在后继状态为s -> a · A的后继状态;或者换句话说,当前瞻是A时。

您提及的州中的所有其他项目都来自初始(隐含)项目

[ s' -> · s $ ]

其中非终结符s后跟伪终结符$(即输入结束标记),因此它们的前瞻符都是$