我对这本教科书很难接受,而且我的教授认为回答问题对已经知道进入课堂的材料的学生是不公平的(从这个人获得的反馈是一个数据挖掘过程本身)。无论如何,我的问题围绕着CFG(正式语言/函数式编程类)的派生。 Given a context free grammar that looks like:
S-> a|B
B-> b|C
C-> c
找到最左边的推导。是简单的吗?因为S-> a是S->
以下语法生成句子a, a,a, b,b, b,...,h, b。不幸的是,它不是LR(1),所以不能用于诸如“yacc”之类的工具。 S -> a comma a.
S -> C comma b.
C -> a | b | c | d | e | f | g | h.
是否有可能改变这个语法为LR(1)(或甚至LALR(1),LL(k)或LL(1)),而不需要扩大非终结C,因此显著增加制作
我打算用野牛解析一些脚本语言移减少冲突,在这种语言,我可以写类似下面的代码: a = input()
b = a + 1
function myfunc
a = input()
b = a + 1
end function
我发现,该块 a = input()
b = a + 1
其中进出函数定义的同时出现可以通过相同的规则stmts被减小,所以我写如下代码 %
考虑下面的语法 S -> aPbSQ | a
Q -> tS | ε
P -> r
虽然构建DFA,我们可以看到有一个应当包含项目 Q -> .tS
Q -> . (epsilon as a blank string)
因为t为后续的状态(Q)似乎有一个转变 - 减少冲突。 我们可以总结语法的本质不是SLR(1)吗?