关于3型文法
3型文法也叫正规文法,它对应于有限状态自动机。它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。
上面的话是大多数教材中的解释,十分了抽象,其中最不理解的是下面一句话
它是在2型文法的基础上满足:A→α|αB(右线性)或A→α|Bα(左线性)。
分析这句话,什么是左线性,什么是右线性
我觉得,左右线性其实说的就是在推导式的右边中,非终结符所位于的位置,例如aB,B(非终结符)位于a的右侧,所以是右线性
之后我在网上找到了这样的解释:
如有:A->a,A->aB,B->a,B->cB,则符合3型文法的要求。但如果推导为:A->ab,A->aB,B->a,B->cB或推导为:A->a,A->Ba,B->a,B->cB则不符合3型方法的要求了。具体的说,例子A->ab,A->aB,B->a,B->cB中的A->ab不符合3型文法的定义,如果把后面的ab,改成“一个非终结符+一个终结符”的形式(即为aB)就对了。例子A->a,A->Ba,B->a,B->cB中如果把B->cB改为B->Bc的形式就对了,因为A→α|αB(右线性)和A→α|Bα(左线性)两套规则不能同时出现在一个语法中,只能完全满足其中的一个,才能算3型文法。
很多情况下我们是看不懂这样的解释的,我也是在研究了一会后,才明白,所以我就归结了一下,什么是3型文法
1. 首先他要是2型文法
2. 推导式的右边必须是一个终结符或者是一个终结符加上一个非终结符
3. 在一串推导式中,只能有一套规则,就是说,只能全部都是左线性,或者是全部都是右线性
上面解释中一共列举了3个例子:
A->a,A->aB,B->a,B->cB 这个例子是正确的,他符合上面的三条
A->ab,A->aB,B->a,B->cB 这个例子中A->ab不符合上面的第2条,所以不是3型文法
A->a,A->Ba,B->a,B->cB A->Ba,是左线性的,但是B->cB是右线性的,违反第3条所以,也不是3型文法
注意:上面例子中的大写字母表示的是非终结符,而小写字母表示的是终结符。