我很难接受这本教科书,而我的教授认为回答问题对于已经知道课堂材料的学生是不公平的(从这个人那里获得反馈本身就是一个数据挖掘过程)。无论如何,我的问题围绕着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
答案 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),然后我们使用最左边的派生完成派生。