编译器学习--文法的类型

来源:互联网 发布:php curl模拟post 编辑:程序博客网 时间:2024/05/16 11:25
文法的类型


一个文法G[S],S为启始规则,如果它的所有规则符合形如:a=>b其中a和b都是G[S]文法的符号串,但a中至少要有一个非终结符,这时G[S]文法是短语文法。G[语言]为例“宾语张三=>名词张三”是短语文法的规则,“张三编写=>名词张三”则不是短语文法,因为“张三”和“编写”都是终结符规则左则没有非终结符。我们可以看出短语文法是对规则做了一些限制后形成的,下面的文法是对短语文法做进一步限制形成的。


如果G[S]的所有规则都满足形如:a=>b其中a的长度要小于等于b,这时G[S]文法是上下文有关文法(context-freegrammars)。上下文有关文法的更形象的定义是:文法的所有规则满足aBc=>abc的形式,
其中B是非终结符,a、b、c是符号串。也就是说B=>b 只在前面有a后面有c的情况下才能推导,所以是上下文有关的。例如:“张三动词程序=>张三编写程序”是上下文有关文法的规则。


如果G[S]的所有规则都满足形如:a=>b其中a是一个非终结符,b是符号串,这时G[S]文法是上下文无关文法(context-sensitivegrammars)。就是说a推导出b与其前后是什么符号串无关。上面G[语言]的文法就是上下文无关文法。


如果G[S]的所有规则都满足形如:A=>aB或A=>a其中A和B是非终结符,a是终结符,这时G[S]文法是正规文法(regulargrammars)。就是说规则的右则要以终结符开头。如:“谓语=>编写宾语”,“动词=>编写”都是正规文法的规则简称正规式,“谓语=>动词宾语”就不是正规式。


这四种文法是对规则的限制逐步加强形成的。正规文法是上下文无关文法的特例,上下文无关文法是上下文有关文法的特例,上下文有关文法是短语文法的的特例。文法产生的语言就是该文法的语言,如:上下文无关文法产生的语言就是上下文无关语言,正规文法产生的语言就是正规语言。文法是语言模型。计算机语言中普遍采用上下文无关文法来定义语法规则。
0 0
原创粉丝点击