在 编译原理 - 文法(一) 一文中,讲了文法分为四类。该分类标准由乔姆斯基于1956年提出,所以又将其称为乔姆斯基层次结构。
这个分类谱系把所有的文法分成四种类型:0型文法、1型文法、2型文法和3型文法。这四种文法类型依次拥有越来越严格的产生式规则,所能表达的语言也越来越少。
尽管表达能力比0型文法和1型文法要弱,但由于可以高效率的实现,2型文法和3型文法成为四类文法中最重要的两种文法类型。
文法分类中涉及的几个基本概念
设A、B代表字母表Σ上的两个字符串集合,基本运算如下:
例如, { a , b , c } ∗ = { ε , a , b , c , a a , a b , a c , b a , b b , b c , . . . } \{a, b, c\}^* = \{ε, a, b, c, aa, ab, ac, ba, bb, bc, ...\} {a,b,c}∗={ε,a,b,c,aa,ab,ac,ba,bb,bc,...}
若对于四元组 G = ( V T , V N , P , S ) G = (V_T, V_N, P, S) G=(VT,VN,P,S)的每个产生式 α->β,
则称G是0型文法。
0型文法的功能相当于图灵机。任何0型语言都是递归可枚举的;递归可枚举集也必定是一个0型语言。递归可枚举的意思就是,你可以用类似穷举的算法在有限时间内判定一个元素属于该集合;对于不属于该集合的元素,则很可能无法验证。
一般的文法至少都是0型文法。0型文法的限制最少,所以也称0型文法为无限制文法。。
在0型文法的基础上,满足
1型文法等价于线性有界自动机。
在1型文法的基础上,满足
简单的说就是规则左边只能是非终结符,且只有一个字符。
例如,对于产生式 A a → B b Aa→Bb Aa→Bb 符合1型文法的要求,但不符合2型文法的要求,因为α=Aa,而Ab包含终结符,且包含两个字符。
2型文法等价于下推自动机。
在2型文法的基础上,满足
3型文法分为左线性文法和右线性文法。
注意,左线性文法和右线性文法不能混用,即所有产生式的格式保持一致。
例如,对于如下产生式:
则符合3型文法的要求,且属于右线性文法。
对于如下产生式:
则不符合三型文法的要求。因为产生式 B→Bc 属于右线性文法,其它产生式属于左线性文法。两种文法不能同时出现在一种语法中。
3型文法等价于有限状态自动机。