编译原理作业题整理.doc
《编译原理作业题整理.doc》由会员分享,可在线阅读,更多相关《编译原理作业题整理.doc(19页珍藏版)》请在冰豆网上搜索。
![编译原理作业题整理.doc](https://file1.bdocx.com/fileroot1/2022-10/19/938add4c-326f-4aed-af79-9f26ec0c2e5a/938add4c-326f-4aed-af79-9f26ec0c2e5a1.gif)
第一章
习题一
1.解释名词:
源语言、目标语言、翻译器、编译器和解释器。
答:
源语言:
被翻译器翻译的语言,用于书写源程序的语言。
目标语言:
被翻译器翻译之后得到的语言,用于书写目标程序的语言。
翻译器:
能够完成从一种语言到另一种语言的变换的软件。
编译器:
一种特殊的翻译器,要求目标语言比源语言低级。
解释器:
解释器是不同于编译器的另一种语言处理器。
解释器不像编译器那样通过翻译来生成目标程序,而是直接执行源程序所指定的运算。
第二章词法分析
作业:
假设∑={0,1},求
1.写出包含010的所有串的正规式
2.写出不包含010的所有串的正规式
答:
1.(0|1)*(010)(0|1)*
2.(10*1)*|((11|00)*|0111*0)*.
2.
(0|1)*010(0|1)*
解:
(1)RE的分解树如下:
r17
r16
r11
*
r15
r14
(
)
|
r12
r13
0
1
r10
0
r9
r8
1
r7
r6
0
r5
*
r4
r3
(
)
|
r1
r2
0
1
(2)由分解树及基本的Thompson构造算法逐步构造等价的NFA过程如下:
2
3
0
Start
r1:
4
5
1
Start
r2:
1
2
4
3
5
0
1
r3、r4:
6
Start
0
1
2
4
3
5
0
1
6
r5:
7
Start
7’
8
0
Start
r6:
0
1
2
4
3
5
0
1
6
7
0
r7:
8
Start
8’
9
1
Start
r8:
0
1
2
4
3
5
0
1
6
7
8
0
1
r9:
9
Start
9’
10
0
Start
r10:
0
1
2
4
3
5
0
1
6
7
8
0
1
r11:
9
10
0
Start
12
13
0
r12:
Start
14
15
1
r13:
Start
11
12
14
13
15
Start
0
1
16
r14、r15:
10’
Start
11
12
14
13
15
0
1
16
17
r16:
Start
0
1
2
4
3
5
0
1
6
7
8
0
9
1
10
0
11
12
14
13
15
0
1
16
17
r17:
(3)由子集法构造等价的DFA过程如下:
0
1
A
B
C
B
B
D
C
B
C
D
E
C
E
F
G
F
F
G
G
H
I
H
F
G
I
F
I
其中含有r.初态的是A作为新的DFA的初态,含有原r17终态的是E、F、G和H作为新的DFA的终态。
做出对应DFA的状态转换图如下:
Start
A
0
H
B
C
1
0
1
D
0
1
0
E
1
F
0
G
1
0
1
0
1
1
I
0
1
0
(4)直接由分割算法处理该DFA,如得到的DFAmin与原DFA一致说明原DFA本身就是最简的:
由于导致{A,B,C}和D落入的状态集是不等价的,说明{A,B,C}和D是不等价的,故{A,B,C,D}应该分裂为{A,B,C}和{D},故:
由于落入不同的状态集(相对来说是两个不等价的状态集),说明{A,C}和B是不等价的,故{A,B,C,D}应该分裂为{A,C}和{B},故:
由于落入同一个状态集,故{E,F,G,H,I}暂不分裂。
由于落入同一个状态集},故{E,F,G,H,I}暂不分裂。
故最终划分为:
说明A和C是等价的,E、F、G、H和I是等价的。
合并等价状态(A和C中保留A,E、F、G、H和I中保留E)并处理对应弧线得最小化DFA如下:
A
0
B
0
1
D
1
0
E
1
1
0
0
0
1
0
1
2
1
0
3
1
1
0
0
1
0
1
0
1
0
2
2
3
0
3
3
3
1.
0
1
0
0
1
1
2
3
2
4
0
3
1
2
4
3
4
0
1
1
0
2
0
0
4
0
3
1
0
1
0
1
3.1考虑文法
S®(L)|a
L®L,S|S
(a)建立句子(a,(a,a))和(a,((a,a),(a,a)))的分析树。
(b)为(a)的两个句子构造最左推导。
(c)为(a)的两个句子构造最右推导。
(d)这个文法产生的语言是什么。
(a,(a,a))的分析树
S
( L)
L,S
S(L)
aL,S
Sa
a
(a,((a,a),(a,a)))的分析树
S
(L)
L,S
a(L)
L,S
a(L)
L,S
a(L)
L,S
Sa
a
(a,(a,a))的最左推导
S=>lm(L)=>lm(L,S)=>lm(S,S)=>lm(a,S)
=>lm(a,(L))=>lm(a,(L,S))=>lm(a,(S,S))=>lm(a,(a,S))=>lm(a,(a,a))
(a,((a,a),(a,a)))的最左推导
S=>lm(L)=>lm(L,S)=>lm(S,S)=>lm(a,S)=>lm(a,(L))
=>lm(a,(L,S))=>lm(a,(S,S))=>lm(a,((L),S))=>lm(a,((L,S),S))=>lm(a,((S,S),S))=>lm(a,((a,S),S))=>lm(a,((a,a),S))=>lm(a,((a,a),(L)))=>lm(a,((a,a),(L)))
=>lm(a,((a,a),(L,S)))=>lm(a,((a,a),(S,S)))=>lm(a,((a,a),(a,S)))=>lm(a,((a,a),(a,a)))
(a,(a,a))的最右推导
S=>rm(L)=>rm(L,(L))=>rm(L,(L,S))=>rm(L,(L,a))
=>rm(L,(S,a))=>rm(L,(a,a))=>rm(S,(a,a))=>rm(a,(a,a))
(a,((a,a),(a,a)))的最右推导
S=>rm(L)=>rm(L,S)=>rm(L,(L))=>rm(L,(L,S))
=>rm(L,(L,(L)))=>rm(L,(L,(L,S)))=>rm(L,(L,(L,a)))=>rm(L,(L,(S,a)))=>rm(L,(L,(a,a)))=>rm(L,(S,(a,a)))=>rm(L,((L),(a,a)))=>rm(L,((L,S),(a,a)))=>rm(L,((L,a),(a,a)))=>rm(L,((S,a),(a,a)))=>rm(L,((a,a),(a,a)))=>rm(S,((a,a),(a,a)))=>rm(a,((a,a),(a,a)))
(d)该文法产生的语言是括号匹配的串,串中的各项用“,”隔开,项可以是括号匹配的子串或a
3.2考虑文法
S→aSbS|bSaS|ε
(a)为句子abab构造两个不同的最左推导,以此说明文法是二义的。
(b)为abab构造对应的最右推导。
(c)为abab构造对应的分析树
(a)1.S=>lmaSbS=>lmabSaSbS=>lmabaSbS=>lmababS
=>lmabab
2.S=>lmaSbS=>lmabS=>lmabaSbS=>lmababS=>lmabab
(b)S=>rmaSbS=>rmaSb=>rmabSaSb=>rmabSab=>rmabab
(C)分析树
(1)
S
aSbS
εaSbS
εε
分析树
(2)
S
aSbS
aSbSε
εε
(d)该文法产生的语言是a、b个数相等的ab串含空串
习题3
3.3下面的二义文法描述命题演算公式,为它写一个等价的非二义性文法。
S→SandS|SorS|notS|true|false|(S)
答:
E->EorT|T
T->TandF|F
F->notF|(E)|true|false
3.10构造下面文法的LL
(1)分析表
D->TL
T->int|real
L->idR
R->,idR|ε
答:
First(TL)={int,real} Follow(D)={#}
First(T)={int,real} Follow(T)={id}
First(D)={int,real} Follow(L)={#}
First(int)={int} Follow(R)={#}
First(real)={real}
First(idR)={id}
First(L)={id}
First(,idR)={,}
First(ε)={ε}
First(R)={,,ε}
Int
Real
Id
#
D
D->TL
D->TL
T
T->int
T->real
L
L->idR
R
R->,idR
R->ε
3.11下面的文法是否为LL
(1)文法?
说明理由。
(两种方法)
S->AB|PQx
A->xy
B->bc