最近在学习编译原理相关知识,学到了文法的类型。在网上浏览了一圈,发现已发布的文章中,几乎没有正确的讲解。
在这里做一个正确的解读。
1型文法:也称为上下文无关语法,对非终结符进行替换是务必考虑上下文
它有下面两个特点:
(1)式子左面可以有多个字符,但是必须有一个终结字符。
(2)式子右面可以是终结字符也可是非终结字符,但是必须是有限字符
2型文法:又被称为上下文无关语法:即非终结字符的替换可以不必考虑上下文。
它有以下特点:
(1)式子左边只能有一个字符,而且必须是非终结字符。
(2)式子右边可以有多个字符,可以是终结符,也可以是非终结符,但是必须是有限个字符。
3型文法:也称为正规文法,(正规文法有包括做线性文法和右线性文法)
(1)式子左面只能有一个字符,必须是非终结符。
(2)式子右面最多有两个字符,而且这两个字符中必须有一个终结字符和一个非终结字符。如果产生式右面只有一个字符,可以是终结符也可以是非终结符(这一条非常重要,也是其他文章有问题的地方)
右线性文法
必须是三型文法,式子右面的产生式只能是终结符+非终结符的格式。
左线性文法
必须是三型文法,式子左面的产生式只能是非终结符+终结符的格式。