编译原理试题及答案(二)ppt
编译原理陈意云课后答案.ppt

5
3.2
• 考虑文法 S -> aSbS|bSaS|ε (a) 为句子abab构造两个不同的最左推导, 以说明此文法二义 (b) 为abab构造对应的最右推导 (c) 为abab构造对应的分析树 (d) 这个文法产生的语言是什么
2019/3/22
luanj@
6
3.2 (续)
luanj@ 9
2019/3/22
3.4 (续)
• 该文法没有体现运算符 |、*、() 、并置的优 先级,因而是二义的。
R=>R|R=> a|R =>a|R*=>a|b* R=>R*=>R|R*=>a|R*=>a|b*
• E -> E’|’T | T T -> TF | F F -> F* | (E) | a | b
• (1) S=>aSbS=>abS=>abaSbS=>ababS=>abab (2) S=>aSbS=>abSaSbS=>abaSbS=>ababS=>abab • S=>aSbS=>aSb=>abSaSb=> abSab =>abab (2)
S a S ε b a S ε (1) 描述的语言是a,b数目相等的串 S b S ε S
S
( L S a L , ( L S a
2019/3/22 luanj@ 3
) S L , ) S a
3.1 (续) - (a,((a,a),(a,a)))
S =>(L) =>(L,S) =>(S,S) =>(a,S) =>(a,(L)) =>(a,(L,S)) =>(a,(S,S)) =>(a,((L),S)) =>(a,((L,S),S)) =>(a,((S,S),S)) =>(a,((a,S),S)) =>(a,((a,a),S)) =>(a,((a,a),(L))) =>(a,((a,a),(L,S))) =>(a,((a,a),(S,S))) =>(a,((a,a),(a,S))) =>(a,((a,a),(a,a))) S =>(L) =>(L,S) =>(L,(L)) =>(L,(L,S)) =>(L,(L,(L))) =>(L,(L,(L,S))) =>(L,(L,(L,a))) =>(L,(L,(S,a))) =>(L,(L,(a,a))) =>(L,(S,(a,a))) =>(L,((L),(a,a))) =>(L,((L,S),(a,a))) =>(L,((L,a),(a,a))) =>(L,((S,a),(a,a))) =>(L,((a,a),(a,a))) =>(S,((a,a),(a,a))) =>(a,((a,a),(a,a)))
编译原理例题与习题解答PPT课件

第27页/共85页
• 例如,假定状态 s 1和s 2经a 弧 分 别 到 达t1和t2,而t1和t 2属于现行 中的两个
不同子集,说明有一个字, t1读出后到达终态,而t2读出后不能到达终 态,或者反之,那么对于字a , s1读出a后到达终态,而s2读出a不能到 达终态,或者反之,所以s1和s2不等价。
{c,d,e} {c,d,f}
{c,d1,f}
1
{c,d}
{c,d,e,g}
{c,d,f}
③.重命名后的状态转换矩阵
I1 {b,c,d}
1 {c,dF,e}
{c,d,e}
0{c,d,e}
{c,d,e,g}
{c,d,e}
S
0
1
A(始态)
Φ
B
B
C
D
C
C
D
D
E
D
E
C
F(终态)
33
F(终态)
第33页/共E85页
40
{10,11}
{12}
第40页/共85页
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}
• 描述工具:正规式和有限自动机理论
ห้องสมุดไป่ตู้
• 语法规则:语法单位的形成规则。
• 语法单位通常包括:表达式、语句、子程序、 过程、函数、程序等;
2
• 描述工具:上下文无关文法
编译原理试题及答案(二)ppt课件

CH.4.练习题1(P81.)
1.考虑下面文法G1:
S→a|^|(T) T→T,S|S (1) 消去G1的左递归。然后对每个非终结符,写出 不带回溯的递归子程序。
解(1) 消左后的文法G1’: S→a|^|(T) T→ST’ T’→ ,ST’|ε
2018/11/15 2
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;
4
CH.4.练习题1(P81.)
(2) 经改写后的文法是否是LL(1)的? 给出它的预测分析表。
消左后的文法G1’ :
(2) 因为G1’ : ① 文法不含左递归; ② 对 S→a|^|(T) FIRST(a)={a}, FIRST(^)={^}, FIRST( (T) )={ ( }, 集合互不相交且不含ε; ③ 对 T’→,ST’|ε FIRST( ,ST’ )={ , }, FIRST(ε)={ε}, 其交集为空。 但ε∈FIRST(T’)=FIRST( ,ST’ )∩FIRST(ε)={,,ε}, 然而,FOLLOW(T’)={ ) } FIRST(T’)={,,ε} ,两者 不 相交。 所以,G1’是LL(1)文法。 5
动作, 所用产生式
.
7
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (1) S→ABc A→ a|ε B→ b|ε。
编译原理教程课后习题答案第二章

第二章 词法分析2.1 完成下列选择题:(1) 词法分析器的输出结果是。
a. 单词的种别编码b. 单词在符号表中的位置c. 单词的种别编码和自身值d. 单词自身值(2) 正规式M1和M2等价是指。
a. M1和M2的状态数相等b. M1和M2的有向边条数相等c. M1和M2所识别的语言集相等d. M1和M2状态数和有向边条数相等(3) DFA M(见图2-1)接受的字集为。
a. 以0开头的二进制数组成的集合b. 以0结尾的二进制数组成的集合c. 含奇数个0的二进制数组成的集合d. 含偶数个0的二进制数组成的集合【解答】(1) c (2) c (3) d图2-1 习题2.1的DFA M2.2 什么是扫描器?扫描器的功能是什么?【解答】 扫描器就是词法分析器,它接受输入的源程序,对源程序进行词法分析并识别出一个个单词符号,其输出结果是单词符号,供语法分析器使用。
通常是把词法分析器作为一个子程序,每当词法分析器需要一个单词符号时就调用这个子程序。
每次调用时,词法分析器就从输入串中识别出一个单词符号交给语法分析器。
2.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}试构造相应的确定有限自动机M ′。
【解答】 对照自动机的定义M=(S,Σ,f,So,Z),由f 的定义可知f(x,a)、f(y,b)均为多值函数,因此M 是一非确定有限自动机。
先画出NFA M 相应的状态图,如图2-2所示。
图2-2 习题2.3的NFA M 用子集法构造状态转换矩阵,如表表2-1 状态转换矩阵1b将转换矩阵中的所有子集重新命名,形成表2-2所示的状态转换矩阵,即得到 M ′=({0,1,2},{a,b},f,0,{1,2}),其状态转换图如图2-3所示。
表2-2 状态转换矩阵将图2-3所示的DFA M ′最小化。
编译原理(龙书)习题答案(chap2-3)省名师优质课赛课获奖课件市赛课一等奖课件

Hundreds LowHundreds | CD | D LowHundreds | CM
LowHundreds | C | CC | CCC Thousands M Thousands |
第三章 词法分析
3.2.2 试描述下列正则体现式定义旳语言:
2)全部由按词典递增序排列旳小写字母构成旳串。
a *b * z *
3)注释,即/*和*/之间旳串,且串中没有不在双引号 (“)中旳*/。
/\* ([^*"] | \*[^/] | \"([^"]*)\")* \*/
8)全部由a和b构成且不含子串abb旳串。
b *(a | ab)*
9)全部由a和b构成且不含子序列abb旳串。
第二章 一种简朴旳语法制导翻译器
2.2.1 考虑下面旳上下文无关文法:
S S S |S S |a
1)试阐明怎样使用该文法生成串 aa a
S S S S S S a S S 最左推导 aa S aa a
2)试为这个串构造一棵语法分析树。
3)该文法生成旳语言是什么? 以a为变量,+和*为二元操作符旳后缀体现式旳集合
RomanNumeral Thousands Hundreds Tens Ones | RomanNumeral Ones LowOnes | IV |V LowOnes | IX
LowOnes | I | II | III
Tens LowTens | XL | L LowTens | XC
1) a(a | b) * a
以a开头和结尾且至少包括两个字符旳a,b字符串旳集合
2) (( | a)b*) *
编译原理2习题答案

2.对 下 面 的 文 法 G : E → TE' F → PF' E' → +E| ε F' → *F'| ε T → FT' T' → T| ε P → (E) | a | b | ^
(1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。 (2) 证明这个方法是 LL(1) 的。 (3) 构造它的预测分析表。 FIRST(E')={+,ε} FIRST(P)={(,a,b,^); 解:(1)计算这个文法的每个非终结符的 FIRST 集和 FOLLOW 集。 FIRST 集合有: FIRST(E)=FIRST(T)=FIRST(F)=FIRST(P)={(,a,b,^); FIRST(T')=FIRST(T)+{ε}={(,a,b,^,ε); FOLLOW(E)={+,},#};//不包含 ε FOLLOW(T')=FOLLOW(T)=FIRST(E')∪FOLLOW(E)={+,},#}; FOLLOW(F)=FIRST(T')∪FOLLOW(T)={(,a,b,^,+,),#};//不包含 ε FOLLOW(F')=FOLLOW(F)=FIRST(T')∪FOLLOW(T)={(,a,b,^,+,),#}; FOLLOW(P)=FIRST(F')∪FOLLOW(F)={*,(,a,b,^,+,),#};//不包含 ε (2)证明这个方法是 LL(1)的。 各产生式的 SELECT 集合有: SELECT(E->TE')=FIRST(T)={(,a,b,^); SELECT(E'->+E)={+}; SELECT(E'->ε)=FOLLOW(E/)={},#} SELECT(T->FT')=FIRST(F)={(,a,b,^); SELECT(T'->T)=FIRST(T)={(,a,b,^); SELECT(T'->ε)=FOLLOW(T/)={+,},#}; SELECT(F->PF')=FIRST(P)={(,a,b,^); SELECT(F'->*F')={*}; SELECT(F'->ε)=FOLLOW(F')={(,a,b,^,+,),#}; SELECT(P->(E))={() SELECT(P->a)={a} SELECT(P->b)={b} SELECT(P->^)={^} 可见,相同左部产生式的 SELECT 集的交集均为 空,所以文法 G[E]是 LL(1)文法。 (3)构造它的预测分析表。 文法 G[E]的预测分析表如下: FIRST(F')={*,ε};
编译原理习题及答案(课堂PPT)

.
8
《编译原理教程》习题解析
9
1.3 请画出编译程序的总框图。如果你是一个编译程 序的总设计师,设计编译程序时应当考虑哪些问题?
【解答】 编译程序总框图如图1-1所示。 作为一个编译程序的总设计师,首先要深刻理解被编 译的源语言其语法及语义;其次,要充分掌握目标指令的 功能及特点,如果目标语言是机器指令,还要搞清楚机器 的硬件结构以及操作系统的功能;第三,对编译的方法及 使用的软件工具也必须准确化。总之,总设计师在设计编 译程序时必须估量系统功能要求、硬件设备及软件工具等 诸因素对编译程序构造的影响。
《编译原理教程》习题解析
1
第一章 绪 论 第二章 词 法 分 析 第三章 语 法 分 析
.
1
《编译原理教程》习题解析
2
第一章 绪 论
1.1 完成下列选择题: (1) 下面叙述中正确的是 。
A.编译程序是将高级语言程序翻译成等价的机 器语言程序的程序
B.机器语言因其使用过于困难,所以现在计算 机根本不使用机器语言
.
5
《编译原理教程》习题解析
6
(4) 编译各阶段的工作都涉及到构造、查找或更新有 关表格,即编译过程的绝大部分时间都用在造表、查表和 更新表格的事务上。故选D。
(5) 由(1)可知,编译程序实际上实现了对高级语言程 序的翻译。故选D。
.
6
《编译原理教程》习题解析
7
1.2 计算机执行用高级语言编写的程序有哪些途径?它们 之间的主要区别是什么?
.
12
《编译原理教程》习题解析
13
图2-1 习题2.1的DFA M
(完整版)编译原理期末试题(二)含答案,推荐文档

5.文法 G(S)
S→dAB
A→aA| a
B→Bb| ε
描述的语言是什么?
6. 证明文法 G(S)
S→SaS| ε
是二义性的。
7. 已知文法 G(S)
S→BA
A→BS| d
B→aA| bS | c
的预测分析表如下
a
b
c
d
#
S
S→BA
S→BA
S→BA
A
A→BS
A→BS
A→BS
A→d
B
B→aA
B→bS
B→c
S=>SaS=>SaSaS=>aSaS=>aaS=>aa
S=>SaS=>aS=>aSaS=>aaS=>aa
7.句子 adccd 的分析过程:
步骤
符号栈
输入串
产生式
0
#S
adccd#
1
#AB
adccd#
S→BA
2
#AAa
adccd#
B→aA
3
#AA
dccd#
4
#Ad
dccd#
A→d
5
#A
ccd#
6
#SB
()
16.一个 LL(1)文法一定是无二义的。
()
17.逆波兰法表示的表达试亦称前缀式。
()
18.目标代码生成时,应考虑如何充分利用计算机的寄存器的问题。
()
19.正规文法产生的语言都可以用上下文无关文法来描述。
()
20.一个优先表一定存在相应的优先函数。
()
21.3 型文法一定是 2 型文法。
()
13.删除多余运算,代码外提,强度削弱,变换循环控制条件,合并已知量,复写传播和删除无用赋值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解,因为
FOLLOW(S)={#}
① 文法不含左递归;
FIRST(S)={a,b,c}
② 对 A→a|ε
候选式的FIRST集合互不相交; ε∈ FIRST(A)
但, FOLLOW(A)={b,c} FIRST(A)={a,ε} 两者不相交。
③ B→b|ε
其候选式的FIRST集合互不相交; ε∈ FIRST(B)
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。
解, 因为 ① 文法不含左递归;
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|ε出发证明也可)
else error
end
else error
End;
-
3
CH.4.练习题1(P81.)
解(1) 不带回溯的递归 子程序: T→ST’ Procedure T; Begin S; T’ end;
解(1) 不带回溯的递归 子程序:
T’→,ST’|ε
procedure T’;
begin
if sym=‘,’ then
程序设计语言
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’|ε
预测分析表:
FOLLOW(T’)={)}
a S S→a T T→ST’ T’
2020/5/20
^ 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
符号栈
所以,G1’是LL(1)文法。 -
5
CH.4.练习题1(P81.)
(2)构造G1’的预测分析表:
① 对S→a|^|(T)
② 对T→ST’
FIRST(a)={a}
FIRST(ST’)={a,^,(}
FIRST(^)={^}
③ 对 T’→,ST’|ε
FIRST((T))={(}
FIRST(,ST’)={,}
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.)
集合互不相交且不含ε;
③ 对 T’→,ST’|ε
FIRST( ,ST’ )={ , }, FIRST(ε)={ε}, 其交集为空。
但ε∈FIRST(T’)=FIRST( ,ST’ )∩FIRST(ε)={,,ε},
然而,FOLLOW(T’)={ ) } FIRST(T’)={,,ε} ,两者 不
相交。
② 对 S→aSe|B、B→bBe|C 和 C→cCe|d
各产生式的候选式的FIRST集合均不相交; 即
FIRST(aSe) ∩ FIRST(B)= ;
FIRST(bBe) ∩ FIRST(C)= ;
FIRST(cCe) ∩ FIRST(d)= ;
③ FIRST(S)={ a,b,c,d } ,FIRST(B)={ b,c,d }
但, 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|ε ;
匹配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|ε。
2020/5/20
-
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
FIRST(C)={ c,d } 均不含ε。
所以,文法是LL(1)文法。
-
11
程序设计语言
Chapter 7. 语义分析和中 间代码产生
begin
advance;
S;
T’
end
End;
-
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) )={ ( },
#S #)T( #)T #)T’S #)T’a
#)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