编译原理例题与习题解答

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分。
编译原理
28

例如,假定状态s1和s2经a弧分别到达t1和 t2,而t1和t2属于现行中的两个不同子集, 说明有一个字, t1读出后到达终态,而 t2读出后不能到达终态,或者反之,那 么对于字a , s1读出a后到达终态,而 s2读出a不能到达终态,或者反之,所以 s1和s2不等价。 s1 s2
编译原理
21
例题与习题解答
第三章
22
非确定有限自动机状态图的改造
1. 假定NFA M=<S, , , S0, F>,我们对M的 状态转换图进行以下改造:
1) 引进新的初态结点X和终态结点Y,X,YS, 从X到S0中任意状态结点连一条箭弧, 从F 中任意状态结点连一条箭弧到Y。
2) 对M的状态转换图进一步施行替换,其中k是 新引入的状态。
0
E 1
I1 {b,c,d}
1 0 {c,d} 1 D {c,d,f} 1
{c,d} {c,d,f}
1 {c,d,e} F
{c,d,e}
0 {c,d,e}
{c,d,e,g}
{c,d,e}
{c,d,e,g}
③.重命名后的状态转换矩阵
S A(始态) B C D E F(终态) 0
Φ
1 B D D D F(终态) D
S i S e S i S S
i
S
i
i
i
S e S
i i
结论:因为该文法存在句子iiiei对应两棵 不同的语法树,因而该文法是二义的。
编译原理
18
10. 把下面文法改写成无二义性的文法 S->SS | (S) | ( )
解答: S-> TS | T T->(S) | ( )
编译原理
19
11、给出下面语言的相应文法 L2={aibncn| n≥1,i≥0}
编译原理
S
B a b b B B S b A a
8
例题2.2 试构造生成语言 L={anbnci|n1, i 0}的文法
分析:要求a和b的个数一样多,并至少为一个, 而c的个数为0个以上即可,所以可以用一个终结 符去生成anbn串,用另一个非终结符去生成ci 。 G(Z): ZAB A aAb|ab B cB|
设I是M’的状态集的一个子集,定义I的-闭包 -closure(I)为: i) 若sI,则s-closure(I); ii) 若sI,则从s出发经过任意条弧而能到达 的任何状态s’都属于-closure(I) 即: -closure(I)=I{s’|从某个sI出发经过 任意条弧能到达s’}
编译原理
27

具体做法: 对M的状态集进行划分
首先,把S划分为终态和非终态两个子集,
形成基本划分。
假定到某个时候,已含m个子集,记为
={I(1),I(2),,I(m)},检查中的每个子 集看是否能进一步划分:
对某个I(i),令I(i)={s1,s2, ,sk},若存在一 个输入字符a使得Ia(i) 不会包含在现行的 某个子集I(j)中,则至少应把I(i)分为两个部
编译原理 31
1(0|1)*101
①.状态转换图
a a 1 1(0|1)*101 g
b
(0|1)*
0 c
d
ε
101
g 1
a
1
b
ε
d
e
0
f
1
g
1
编译原理
32
②.状态转换矩阵 a 1 0 ε b c 1 I0 Φ {c,d} {c,d} {c,d,f} {c,d} {c,d,f}
编译原理
i+i+i 的语法树 E E E + T T F i F i
编译原理
+
T F
i
i
9、证明文法: S → iSeS | iS | i 是二义的。 二义性的含义: 如果文法存在某个句子对应两棵以上 不同的语法树,或者两种以上不同的最 左/右推导,则称这个文法是二义的。 首先:找到此文法对应的一个句子 iiiei 其次:构造与之对应的两棵语法树
(1) 给出 i+i*i、i*(i+i)的最左推导 和最右推导。 解:此处仅以 i*(i+i) 为例给出答案
最左推导 E T T*F F*F i*F i*(E) i*(E+T) i*(T+T) i*(F+T) i*(i+T) i*(i+F ) i*(i+i) 最右推导 E T T*F T*(E) T*(E+T) T*(E+F) T*(E+i) T*(T+i) T*(F+i) T*(i+i) F*(i+i) i*(i+i)

定义:如果一个文法存在某个句子对应两 颗不同的语法树,则说这个文法是二义的。
语言的二义性:一个语言是二义性的,如 果对它不存在无二义性的文法。
可能存在G和G’,一个为二义的,一个为无二

义的。但L(G)=L(G’)
编译原理
7
例题2.1:有一个文法
G=({S,A,B},{a,b},P,S),其中 a P: S aB|bA A a|aS|bAA B b|bS|aBB 采用最左推导产生句子aabbab 并画出相应的语法树。 S aBaaBB aabSB aabbABaabbaB aabbab
a
t1 t2

i
a

j
29
编译原理
例题3.1

给出下面描述的正规表达式
以01结尾的二进制数串
能被5正除的十进制整数
包含奇数个1或者奇数个0的二进制数串
编译原理
30
例题3.2

构造下面正规式相应的DFA 1(0|1)*101
步骤: ①.根据正规式画出对应的状态转换图;
②.根据状态转换图画出对应的状态转换矩阵; ③.根据状态转换矩阵得到重命名后的状态转换矩阵; ④.根据重命名后的状态转换矩阵得出最后的DFA.
编译原理 25

设a是中的一个字符,定义 Ia= -closure(J) 其中,J为I中的某个状态出发经过一条a 弧而到达的状态集合。 把确定化的过程: 不失一般性,设字母表只包含两个a和b, 我们构造一张表:
I -Closure({X}) Ia Ib

编译原理
26
DFA M最少化

对一个DFA M最少化的基本思想: 把M的状态集划分为一些不相交的子集, 使得任何两个不同子集的状态是可区别 的,而同一子集的任何两个状态是等价 的。最后,让每个子集选出一个代表, 同时消去其他状态。
编译原理
9

例题2.3 请证实文法G(E): E EiT | T T T+F | iF | F F E* | ( 是一个二义文法。
编译原理
10
P36-6.
N →D|ND D →0|1|2|3|4|5|6|7|8|9 (1) G6的语言L(G6)是什么? G6的语言是: 0~9的数字组成的任意非空数字串 L(G6)={x|x∈{0,1,2,3,4,5,6,7,8,9}+} (2)给出句子0127、34和568的最左和最右推导。 文法G6为:
编译原理
36
用子集法构造状态转换矩阵
I {x} {y} {x, y}
Ia {x, y} {x, y}
编译原理
Ib {y} {x, y} {x, y}
37
重命名后的状态转换矩阵
S
0
a
2
b
1
1 2
2
2 2
编译原理
38
编译原理
39

P64-7. 构造下列正规式相应的DFA。
1(1010*|1(010)*1)*0
编译原理
23
按下面的三条规则对V进行分裂:
i AB
j
代之为
i i
Biblioteka Baidu
A
k A
B
j j
i i
A|B A*
j j
代之为
B
代之为 i k A j

逐步把这个图转变为每条弧只标记为上的 一个字符或,最后得到一个NFA M’,显然 L(M’)=L(M) 24 编译原理
确定有限自动机的确定化 ——采用子集法

语法规则:语法单位的形成规则。
语法单位通常包括:表达式、语句、子程序、
过程、函数、程序等; 描述工具:上下文无关文法
编译原理 3
回顾
标识符与名字
标识符:以字母开头的,由字母数字组成 的字符串。 标识符与名字两者有本质区别:

标识符是语法概念 名字有确切的意义和属性
编译原理
4
回顾
编译原理

8. 令文法为 E → T|E+T|E-T T → F|T*F|T/F F → (E)|i
i-i-i 的语法树 E E E - T T F i F i T F i
(2) 给出 i+i+i、i+i*i和i-i-i的语法树。

注意:树枝和符号均不可随意增减!
i+i*i 的语法树 E E T F + T T * F F i i
ε
d
1
e
0
f
I1
1
g
I {a}
{b,c,d} {c,d}
{c,d,e} {c,d,f} {c,d,e,g}
{b,c,d} {c,d,e} {c,d,e} {c,d,e} {c,d,e,g} {c,d,e}
33
④.DFA
I {a}
{b,c,d}
{c,d} {c,d,e} {c,d,f}
A
1
B
I0 0 0 ΦC {c,d}
例题与习题解答
第二章
1
回顾

程序语言的定义
一个程序语言是一个记号系统,它主要由以下
方面定义:
语法 语义

每个句子构成的规律
语法 语义
2
研究语言
每个句子的含义
编译原理
回顾
语法={词法规则+语法规则}

词法规则:单词符号的形成规则。
单词符号是语言中具有独立意义的最基本结构。
一般包括:常数、标识符、基本字、算符、界 符等。 描述工具:正规式和有限自动机理论
上下文无关文法的定义:一个上下文无关文
法G是一个四元式G=(VT,VN,S,P),其中
VT:终结符集合(非空)
VN:非终结符集合(非空),且VT VN=
S:文法的开始符号,SVN
P:产生式集合(有限),每个产生式形式为
P, PVN, (VT VN)*
开始符S至少必须在某个产生式的左部出现一次。
G2(S): S→AB A→aA|ε B→bBc|bc
L3={anbnambm| m,n≥0} G3(S): S→AB A→aAb|ε B→aBb|ε
20
编译原理
L4={1n 0m 1m 0n| n,m≥0} 可以看成是两部分: 中间部分是 0m 1m : A→ 0A1 | ε 剩下两边的部分就是: S→ 1S0 | A 所以G4[S]可以写为: S→ 1S0 | A A→ 0A1 |ε
编译原理
11
注意:1)步骤,和 的区别;2) 不能写 为→ 解:0127的最左推导: NNDNDDNDDDDDDD

+
0DDD01DD012D0127 0127的最右推导: NNDN7ND7N27ND27 N127D1270127
编译原理

8. 令文法为 E → T|E+T|E-T T → F|T*F|T/F F → (E)|i
编译原理 5
回顾
文法产生语言 假定G是一个文法,S是它的开始符号。 * ,则称是一个句型。仅含终 如果S 结符号的句型是一个句子。 文法G所产生的句子的全体是一个语言, 将它记为L(G) + & ∈V *} L(G) ={ | S T

编译原理 6
回顾 文法和语言的二义性
g
0 1
①.状态转换图
f
h ε ε i ε d
1 0
a
1
b
ε
1
1
c
0
e
j ε k
0
n ε
0
l
1 编译原理
m
40
②.状态转换矩阵
I
{0} {1,2,3} {5,9,10,11} {6,12} {2,3} {2,3,7,8,13} {2,3,4,8,10,11} {2,3,4,8,12} {2,3,5,9,10,11} {2,3,4,8} {5,9,10,11,13} {4,6,12} {6,10,11,12} {12} {13} {10,11}
34
C C E C
编译原理 E
例题3.3

设M=({x,y}, {a,b}, f, x, {y}),其中f定义如 下: f(x,a)={x, y} f(x,b)={y} f(y,a)= φ f(y,b)={x,y} 请构造对应的确定有限自动机。
编译原理
35
【解答】 对照自动机的定义,由f的定义可知 f(x,a)、f(y,b)均为多值函数,因此M是一非 确定有限自动机。 先画出NFA M相应的状态图,
I0
Φ {4} {6,12} Φ {4} {2,3,4,8,10,11} {2,3,4,8,12} {2,3,4,8} {4,6,12} {2,3,4,8} {6,10,11,12} Φ {12} Φ {10,11} {12}
I1
{1,2,3} {5,9,10,11} {2,3} {2,3,7,8,13} {5,9,10,11} {5,9,10,11} {2,3,5,9,10,11} {5,9,10,11,13} {2,3,5,9,10,11} {5,9,10,11} {2,3} {2,3,7,8,13} {2,3,7,8,13} {13} Φ {2,3}
相关文档
最新文档