如何选择在CFG推导中使用哪个规则?

时间:2015-12-02 23:10:13

标签: context-free-grammar computation-theory derivative ll lr

我很难接受这本教科书,而我的教授认为回答问题对于已经知道课堂材料的学生是不公平的(从这个人那里获得反馈本身就是一个数据挖掘过程)。无论如何,我的问题围绕着CFG(形式语言/函数式编程类)的推导。

Given a context free grammar that looks like: 
S-> a|B
B-> b|C
C-> c

找到最左边的派生。简直就是一个?因为S-> a是S-> a | B中最左边的规则?或者我只是得出结论推导可以是a,b或c?我真的很困惑实际选择哪条规则,我一直在吹嘘这些问题,只是按照左右顺序排序,选择分析的每个(最左边)变量的规则,但这个没有& #39;有递归,所以我不知道该怎么办。我非常感谢对此的任何见解,我观看了视频并阅读了本书,但似乎没有人谈论这个场景。谢谢。

另外,我们的书:http://cglab.ca/~michiel/TheoryOfComputation/TheoryOfComputation.pdf

1 个答案:

答案 0 :(得分:0)

你没有任何字符串可以衍生出来。这就是为什么你很难为此而烦恼的原因。你给我们的给出的只是生产规则。

例如,我们的语法看起来像这样

S -> A + B | a | b A -> B + B | a | b B -> a | b | c

让我们说我们即将找到字符串a+b+c的最左边派生。

然后,这是我们要查阅生产规则的时候。

让我们用起始符号

开始派生

S => A + B (S has been derived to A + B )

A + B => B + B + B (A, the leftmost variable has been derived to B + B)

B + B + B => a + B + B (B, the leftmost variable has been derived to a)

a + B + B => a + b + B (B, the leftmost variable has been derived to b)

a + b + B => a + b + c (the remaining B, and the leftmost B has been derived to c)

因为我们生成的最终字符串(a + b + c)与

匹配

字符串我们即将派生(a + b + c),然后我们使用最左边的派生完成派生。