编译原理试题及答案二

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

. A := E1 * (E3 + D)
. A := E1 * (E3 + E4)
. A := E1 * (E5)
. A := E1 * E6
. A := E7 . S
k1 K2
k3
k4
符号表
k5
k6
k7
翻译过程:
E1.place=k2
E2.place=k3
产生一个新的中间变量T1
E3.place=k5
105:(j,-,-,109)
while A < C and B < D do
106:(+,C,‘1’,T1)
if A=1 then C:=C+1
107:(:=,T1,-,C)
else
108:(j,-,-,100)
while A ≤ D do
109:(j≤,A,D,111)
A:=A+2;
110:(j,-,-,100)
FIRST(S)={a,b}
FIRST(B)={b,ε}与FIRST(ε)={ε}相交;
所以文法不是LL(1)文法。
解(2) 对 A→a|ε
因为ε∈FIRST(A)={ a,b,ε} ,FOLLOW(A)={b}, FOLLOW和FIRST两者相交。 所以文法不是LL(1)文法。
9
CH.4.练习题3(P82.)
么? 3. 有哪些存储分配策略?并叙述何时用何种
存储分配策略? 4. 代码优化的常用措施和优化的三个层次。
2023/11/2
21
程序设计语言
补充题
补充题
1. 画出编译程序的总体逻辑结构图,简述各 部分的主要功能。
2023/11/2
23
补充题
2. 已知文法G[Z]: Z→0U|1V U→1Z|1 V→0Z|0
4
CH.4.练习题1(P81.)
(2) 经改写后的文法是否是LL(1)的? 给出它的预测分析表。
消左后的文法G1’ : S→a|^|(T)
T→ST’
(2) 因为G1’ : ① 文法不含左递归;
T’→ ,ST’|ε
② 对 S→a|^|(T)
FIRST(a)={a}, FIRST(^)={^}, FIRST( (T) )={ ( },
后缀式:A B and C not D or or
2023/11/2
13
P217-3
-(a+b)*(c+d)-(a+b+c)
的四元式序列:
(1)(+,a,b,T1)
(2)(-,T1,-,T2)
(3)(+,c,d,T3)
(4)(*,T2,T3,T4)
(5)(+,a,b,T5)
(6)(+,T5,c,T6)
5 02467 #AdBd b#
s8 移进
6 024678 #AdBdb #
r5 归约
9 0246 #AdB #
r1 归约
10 01
#S
#
acc
11
2023/11/2

27
补充题
4 . 给定文法和语义动作如下: A → aB {print “0”} A → c {print “1”} B → Ab {print “2”}
25
补充题
3. 已知文法和它的LR分析表如下,给出串dbdb# 的LR分析过程。
G[S]:(1) S→AdB (2)A→a (3) A→ε
(4) B→b (5)B→Bdb (6)B→ε
ACTION
GOTO
LR分析表
adb#SAB
0 s3 r3
12
1
acc
2
s4
3
r2
4
r6 s5 r6
6
5
r4
r4
FOLLOW(A)={ a, b, # }, FIRST(A)={ a,ε} 两者相交。
所以,文法不是LL(1)文法。
10
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (4) S→aSe|B B→bBe|C C→cCe|d。
解, 因为 ① 文法不含左递归; ② 对 S→aSe|B、B→bBe|C 和 C→cCe|d 各产生式的候选式的FIRST集合均不相交; 即
问:按照以上的语义子程序,aacbb 经 翻译后的输出结果是什么?请给出翻译 过程。
28
A
a
B⑤
A b④
a B③
A b②
c①
A → aB {print “0”} A → c {print “1”} B → Ab {print “2”}
程序设计语言
Chapter 4. 自上而下 语法分析
CH.4.练习题1(P81.)
1.考虑下面文法G1: S→a|^|(T) T→T,S|S
(1) 消去G1的左递归。然后对每个非终结符,写出 不带回溯的递归子程序。
解(1) 消左后的文法G1’: S→a|^|(T) T→ST’ T’→ ,ST’|ε
匹配a; 用T’ , , 查表
T’→ ,ST’, 展开T’ 匹配, ;用 S , ^查表 S→ ^, 展开S 匹配^ ;用 T’ , )查表 T’→ε,展 开T’ 匹配 ) 分析成功, 结束分析
7
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (1) S→ABc A→ a|ε B→ b|ε。
2023/11/2
……
17
P218-6:用7.4.2节的办法,把A or (B and not(C or D))翻译成四元式序列
100:(jnz,A,-,0)
101:(j,-,-,102)
102:(jnz,B,-,104)
103:(j,-,-,0)
104:(jnz,C,-,.)
105:(j,-,-,106)
2023/11/2
2
CH.4.练习题1(P81.)
解(1) 不带回溯的递归子程序: S→a|^|(T) Procedure S; Begin if sym=‘a’ or sym=‘^’ then advance else if sym=‘(‘ then begin advance; T; if sym=‘)’ then advance else error end else error End;
FC 106:(jnz,D,-,.)
107:(j,-,-,.)
TC
2023/11/2
18
P218-7
100:(j<,A,C,102) 101:(j,-,-,115) 102:(j<,B,D,104) 103:(j,-,-,115)
用7.5.1节的办法,把下 面的语句翻译成四元式序 列:
104:(j=,A,‘1’,106)
集合互不相交且不含ε;
③ 对 T’→,ST’|ε
FIRST( ,ST’ )={ , }, FIRST(ε)={ε}, 其交集为空。
但ε∈FIRST(T’)=FIRST( ,ST’ )∩FIRST(ε)={,,ε},
然而,FOLLOW(T’)={ ) } FIRST(T’)={,,ε} ,两者 不
相交。
(7)(-,T4,T6,T7)
2023/11/2
14
P218-4
自下而上分析过程中把赋值语句 A := B * (-C + D)翻译成三地址码 的步骤:
(参看p179的语义子程序)
2023/11/2
15
wk.baidu.com
语法分析
A := B * (-C + D)
. A := E1 * (-C + D)
. A := E1 * (-E2 + D)
3
CH.4.练习题1(P81.)
解(1) 不带回溯的递归 子程序: T→ST’ Procedure T; Begin S; T’ end;
解(1) 不带回溯的递归 子程序: T’→,ST’|ε procedure T’; begin if sym=‘,’ then begin advance; S; T’ end End;
111:(+,A,‘2’,T2)
112:(:=,T2,-,A)
113:(j,-,-,109)
114:(j,-,-,100)
1210253/:11/2
19
程序设计语言
Chapter 8.– Chapter 11.
CH8.– CH11.
1. 什么是符号表?符号表有哪些重要作用? 2. 符号表的表项常包括哪些部分?各描述什
a S S→a T T→ST’ T’
2023/11/2
^ S→^ T→ST’
( S→(T) T→ST’
) T’→ε
, T’→ ,ST’
#
6
CH4.1.(3) 给出对符号串(a,^) 的分析过程
步骤
0 1 2 3 4
5 6 7 8 9 10 11 12
符号栈
#S #)T( #)T #)T’S #)T’a
产生代码 k5:=uminus k3 ……
名字
属性
地址
A
B
C
D
T1 T2 T
A := B * (-C + D)的三地址码
k5:=uminus k3
k6:= k5+ k4 k7:= k2* k6
名字 k1 A
属性
地址
k1:= k7
(参看p179的语义 子程序)
符号表
K2 B
k3 C
k4 D
k5 T1 k6 T2 k7 T3
解,因为
FOLLOW(S)={#}
① 文法不含左递归;
FIRST(S)={a,b,c}
② 对 A→a|ε
候选式的FIRST集合互不相交; ε∈ FIRST(A)
但, FOLLOW(A)={b,c} FIRST(A)={a,ε} 两者不相交。
③ B→b|ε
其候选式的FIRST集合互不相交; ε∈ FIRST(B)
6
s7
r1
7
s8
8
r5
r5
2023/11/2
26
【解】
串dbdb# 的LR分析过程如下:
步骤 状态
符号
输入串 下一步的动作
00
#
dbdb# r3 归约
1 02
#A
dbdb# s4 移进
2
024
#Ad
bdb#
s5 移进
3 0245 #Adb db#
r4 归约
4 0246 #AdB db#
s7 移进
所以,G1’是LL(1)文法。
5
CH.4.练习题1(P81.)
(2)构造G1’的预测分析表:
① 对S→a|^|(T)
② 对T→ST’
FIRST(a)={a} FIRST(^)={^}
FIRST(ST’)={a,^,(} ③ 对 T’→,ST’|ε
FIRST((T))={(} 预测分析表:
FIRST(,ST’)={,} FOLLOW(T’)={)}
#)T’ #)T’S, #)T’S #)T’^ #)T’ #) # #
输入串
(a,^)# (a,^)# a,^)# a,^)# a,^)#
,^)# ,^)# ^)# ^)#
)# )# # #
动作, 所用产生式 .
初始;用 S , ( 查表 S→(T), 展开S 匹配(;用 T , a 查表 T→ST’ , 展开T; 用 S ,a 查表 S→ a, 展开S
FIRST(aSe) ∩ FIRST(B)= ; FIRST(bBe) ∩ FIRST(C)= ; FIRST(cCe) ∩ FIRST(d)= ;
③ FIRST(S)={ a,b,c,d } ,FIRST(B)={ b,c,d } FIRST(C)={ c,d } 均不含ε。
所以,文法是LL(1)文法。 11
但, FOLLOW(B)={c} FIRST(B)={b,ε} 两者也不相交。
所以,文法是LL(1)文法。
8
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (2) S→Ab A→ a|B|ε B→ b|ε。
解(1) 因为
FOLLOW(S)={#}
对 A→a|B|ε ;
请写出此文法描述的只含有4个符号的全部句子。 G[Z]产生的语言是什么? 该文法在Chomsky文法分类中属于几型文法?
2023/11/2
24
【解】
(1)0101,0110,1010, 1001
Z→0U|1V U→1Z|1 V→0Z|0
(2)分析G[Z]所推导出的句子的特点:由Z开始的
推导不外乎图1所示的四种情形。
程序设计语言
Chapter 7. 语义分析和中 间代码产生
P217-1
a*(-b+c) 后缀式:ab-c+* a+b*(c+d/e) 后缀式:abcde/+*+ -a+b*(-c+d) 后缀式:a-bc-d+*+ not A or not(C or not D)
后缀式:A not C D not or not or (A and B)or(not C or D)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (3) S→ABBA A→ a|ε B→ b|ε。
解,虽然
FOLLOW(S)={#}
① 文法不含左递归;
FIRST(S)={a, b,ε}
② 对 A→a|ε,其候选式的FIRST集合不相交;
对 B→b|ε,其候选式的FIRST集合也不相交;
但 对 A→a|ε (由 B→b|ε出发证明也可)
Z
Z
Z
Z
0U
0 U1 V 1 V
1Z
1
0Z
0
图 1 文 法 G [Z ]可 能 的 几 种 推 导
由Z推导出10或01后就终止或进入递归,而Z的每次 递归将推导出相同的符号串:10或01。所以G[Z]产 生的语言L(G[Z])={x|x∈(10|01)+ }
(3) 该文法属于3型文法。
2023/11/2
相关文档
最新文档