一、明确定义
- 0型文法:对任一产生式α→β,都有α∈(VN∪VT)+, β∈(VN∪VT)*
- 1型文法:对任一产生式α→β,都有|β|≥|α|, 仅仅 α→ε除外
- 2型文法:对任一产生式α→β,都有α∈VN , β∈(VN∪VT)*
- 3型文法:任一产生式α→β的形式都为A→aB或A→a,其中A∈VN,B∈VN,a∈VT。上述叫做右线性文法,另有左线性文法,二者等价。
二、基本思路
- 0型文法
- 首先字符串 α 的是 (Vn⋃Vt)+ ,是全符号集的一个正闭包,那么包含符号集中所有符号的一个任一组合,但不包含 ε 元素。
- 字符串 β 的是 (Vn⋃Vt)∗ ,是全符号集的一个闭包,那么它比 α 会多一个 ε 元素。
- 那么我们想要判断一个文法是否为0型文法,只需要判断左侧非空即可
- 任何0型语言都是递归可枚举的,故0型语言又称递归可枚举集
- 1型文法
- 首先1型文法必须是0型文法
- 1型文法除了 α→ε 这一个特例外,其他情况都满足 β 的长度大于 α 的长度
- 1型文法也叫作上下文相关文法
- 2型文法
- 首先2型文法必须是1型文法
- 2型文法左边必须是一个非终结字符
- 2型文法也叫做上下文无关文法
- 3型文法
- 首先3型文法必须是2型文法
- 3型文法必须是线性文法
- 也就是在A,B为非终结符,a是终结符的情况下,产生式只满足如下两种形式(如下为右线性的例子):
- A→aB
- A→a