首页 > 代码库 > 文法的分类
文法的分类
0型文法
0型文法是一个四元组$(V_N, V_T, R, S)$(各部分分别表示非终结符号、终结符号、规则和起始符号),且满足:
1) $V_N$和$V_T$是符号的有限集
2) $V_N \cap V_T = \oslash$
3) R是(P, Q)的集合,且
a) $P \in (V_N \cup V_T)^+$ (这里表示不严谨,P至少包含一个非终结符号)
b) $Q \in (V_N \cup V_T)^*$
4) $S \in V_N$
0型文法相当于图灵机,都是递归可枚举的。
1型文法
分为两种
1) 单调(monotonic)1型文法: 不存在任何一个左侧符号比右侧符号多
2) 上下文相关(context-sensitive)1型文法: 所有的规则都是上下文相关的
2型文法
2型文法是上下文无关(context-free)文法: 所有规则左侧只有一个非终结符号。
左递归: $A \to Aa$
右递归: $A \to aA$
自嵌入(self-embedding): $A \to \alpha A\beta$ 。用于处理嵌套(nesting),$\alpha$在进入一层嵌套时产生,$\beta$在退出一层嵌套时产生。
上下文无关文法的规则只有一种可能会是非单调的(non-monotonic):右侧为空。这种规则被称为$\epsilon-rule$。没有$\epsilon-rule$的文法被称为$\epsilon-free$文法。
3型文法
3型文法是正则(regular)文法/有限状态(finite-state)文法,即:规则右侧只能有一个非终结符号,且必须在最后。(right-regular grammars)
正则文法是非嵌套文法(non-nesting grammars),无法处理嵌套
4型文法
4型文法的规则右侧不得有非终结符号,所以又称为有限选择(finite-choice)文法。它不在乔姆斯基谱系中,但它也是有用的,可以用来处理编程语言的keywords之类的东西。