构建一个跟随集

时间:2011-04-26 23:49:58

标签: grammar context-free-grammar set-theory

在为给定语法创建第一组时,我注意到我的算法参考中没有描述的场景。

即,如何使用这样的规则计算非终结符的跟随集。

<exp-list_tail> --> COMMA <exp> <exp-list_tail>

由&lt; ..&gt;包围的表达式是非终结者,COMMA是终端 我最好的猜测是我应该将空字符串添加到跟随集中,但我不确定。

通常情况下,对于非终结符号位于生产规则末尾的情况,您只需计算左侧非终结符的跟随列表,但您可以看到这是一个问题。

1 个答案:

答案 0 :(得分:1)

要正确回答这个问题,了解整个语法会很有帮助。但是,这是一个普遍答案的尝试:

以下是计算关注组的算法:

初始化所有关注组到{},除了初始为{$}的S 虽然有变化,但每个A∈V都有:
对于每个Y→αAβ执行:
遵循(A)=跟随(A)∪第一(β)
如果β⇒*ε,也可以:跟随(A)=跟随(A)∪跟随(Y)

请注意,这是一个确定性算法,只会根据您的(整个)语法给出一个答案。

具体来说,我不认为这个特殊规则会影响<exp-list_tail>的跟随集(可能,但可能不会)。