编译原理
- 考点1:文法
- 考点2:正规式
- 考点3:有穷自动机
- 考点4:语法推导树
- 考点5:算符优先
表格,看完整篇在看这个表格,更好的记忆
类型 | 别称 | 对应机器 | 规则(简记) |
---|---|---|---|
0型文法 | 短语文法 | 图灵机 | 必须属于Vn,Vt,α至少一个大写(非终止符) |
1型文法 | 上下文有关文法 | 线性有界自动机 | |β|>=|α| |
2型文法 | 上下文无关文法 | 下推自动机 | 左边只能都是非终结符,左边只能是大写 |
3型文法 | 正规文法 | 有限状态自动机 | 一个终结符|一个终结符加上一个非终结符&左线性|右线性 |
1.文法(α->β)
终结符不能单独在左边
1.1文法的类型
- 0型文法
- 1型文法
- 2型文法
- 3型文法
Vn 非终结符,一般为大写字母:S、A、D
Vt 终结符,一般为小写字母:a、b、d
1.2 0型文法(短语文法)
设G=(Vn,Vt,P,S),α->β,如果α∈(Vn∪Vt),并且至少含有一个非终结符,而β∈(Vn∪Vt),则G是一个0型文法。
简单来说:α->β,这个式子的左右两边,都必须属于Vn,Vt,可以单独,也可以任意组合,而且左边至少有一个大写:
Aa->b A->aba
0型文法也称为短语文法,能力相当于图灵机,任何0型文法都是递归可枚举的,反之,递归可枚举集必定是一个0型文法
1.3 1型文法(上下文有关文法)
对应与线性有界自动机
在0型文法的基础上,每一个α->β,都有**|β|>=|α|**。这里的|β|表示为长度
但有一特例:α→ε也满足1型文法
1.4 2型文法(上下文无关文法)
2型文法也叫上下文无关文法,对应下推自动机。
2型文法是在1型文法的基础上再满足,每一个α->β都有α是非终结符。
如:
A->Ba,符合2型文法要求
Ab->Bab虽然符合1型文法要求,但是不符合2型文法要求,因为α=Ab,α含有一个b(终止符)
简单的说就是规则左边只能都是非终结符
1.5 3型文法(正规文法)
3型文法对应于正规文法,对应于有限状态自动机。
在2型文法的基础上满足:A->α|αB(右线性)或A->α|Bα(左线性)
规则:
-
首先他要是2型文法
-
推导式的右边必须是一个终结符或者是一个终结符加上一个非终结符
-
在一串推导式中,只能有一套规则,就是说,只能全部都是左线性,或者是全部都是右线性
解释:
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型文法
1.6 如何判断一个串是否为某个文法的句型
两种方法:构造推导树和直接进行推导
例题:
已知文法G[S]:S→A0|Bl,A→S1|1,B→S0|0;该文法属于乔姆斯基定义的__(12)文法,它不能产生串(13)__。
解答:
第一步,首先列出G的所有推导式:
S->A0;
S->B1;
A->S1;
A->1;
B->S0;
B->0;
第二步,根据上面所有的推导式,分析:
- 0型文法,左边必定至少有一个大写(非终止符) 正确
- 1型文法,|β|>=|α|,正确
- 2型文法,左边只有大写(非终止符) 正确
- 3型文法,单线性,符合A->α|Bα(左线性)规则,且只有一套规则,正确
所以为3型文法,正规文法
第三步,通过第一步的推导式推导得出串:
S->A0->S10->A010->1010 即B
S->B1->S01->A001->1001 即C
S->B1->S01->B101->0101 即D
所以A 0011推导不出来,所以选A