编译原理试题及答案(二)ppt

合集下载

编译原理陈意云课后答案.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课件

编译原理例题与习题解答PPT课件
27
第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课件

编译原理试题及答案(二)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)省名师优质课赛课获奖课件市赛课一等奖课件

编译原理(龙书)习题答案(chap2-3)省名师优质课赛课获奖课件市赛课一等奖课件
LowTens | X | XX | XXX
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习题答案

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)

编译原理习题及答案(课堂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.删除多余运算,代码外提,强度削弱,变换循环控制条件,合并已知量,复写传播和删除无用赋值。

编译原理试题及答案(二)ppt课件

编译原理试题及答案(二)ppt课件

else error
end
else error
End;
精选课件
33
CH.4.练习题1(P81.)
解(1) 不带回溯的递归 解(1) 不带回溯的递归
子程序:
子程序:
T→ST’ Procedure T; Begin
S; T’ end;
T’→,ST’|ε procedure T’; begin
if sym=‘,’ then begin advance; S;
FIRST(C)={ c,d } 均不含ε。
所以,文法是LL(1)文法。
精选课件
11 11
程序设计语言
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)
精选课件
99
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (3) S→ABBA A→ a|ε B→ b|ε。
解,虽然
FOLLOW(S)={#}
① 文法不含左递归;
FIRST(S)={a, b,ε}
② 对 A→a|ε,其候选式的FIRST集合不相交;
对 B→b|ε,其候选式的FIRST集合也不相交;
while A ≤ D do
109:(j≤,A,D,111)
A:=A+2;
110:(j,-,-,100)
111:(+,A,‘2’,T2)

编译原理期末试题(含答案+大题集+重要知识点)

编译原理期末试题(含答案+大题集+重要知识点)

《编译原理》期末试题(一)一、是非题(请在括号内,正确的划√,错误的划×)(每个2分,共20分)1.编译程序是对高级语言程序的解释执行。

(× )2.一个有限状态自动机中,有且仅有一个唯一的终态。

(×)3.一个算符优先文法可能不存在算符优先函数与之对应。

(√ )4.语法分析时必须先消除文法中的左递归。

(×)5.LR分析法在自左至右扫描输入串时就能发现错误,但不能准确地指出出错地点。

(√)6.逆波兰表示法表示表达式时无须使用括号。

(√ )7.静态数组的存储空间可以在编译时确定。

(×)8.进行代码优化时应着重考虑循环的代码优化,这对提高目标代码的效率将起更大作用。

(×) 9.两个正规集相等的必要条件是他们对应的正规式等价。

(× )10.一个语义子程序描述了一个文法所对应的翻译工作。

(×)二、选择题(请在前括号内选择最确切的一项作为答案划一个勾,多划按错论)(每个4分,共40分) 1.词法分析器的输出结果是_____。

A.( ) 单词的种别编码B.( ) 单词在符号表中的位置C.( ) 单词的种别编码和自身值D.( ) 单词自身值2.正规式M 1 和M 2 等价是指_____。

A.( ) M1和M2的状态数相等B.( ) M1和M2的有向边条数相等C.( ) M1和M2所识别的语言集相等D.( ) M1和M2状态数和有向边条数相等3.文法G:S→xSx|y所识别的语言是_____。

A.( ) xyx B.( ) (xyx)* C.( ) xnyxn(n≥0) D.( ) x*yx*4.如果文法G是无二义的,则它的任何句子α_____。

A.( )最左推导和最右推导对应的语法树必定相同B.( ) 最左推导和最右推导对应的语法树可能不同C.( ) 最左推导和最右推导必定相同D.( )可能存在两个不同的最左推导,但它们对应的语法树相同5.构造编译程序应掌握______。

最新编译原理(课后习题答案ppt课件

最新编译原理(课后习题答案ppt课件
(a) 请指出此文法的终结符号, 非终结符号和开始符号. 终结符号: or, and, not, (, ), true, false 非终结符号: bexpr, bterm, bfactor 开始符号: bexpr
10
(b) 试对于句子 not ( true or false) 构造一棵分析树.
bexpr bterm bfactor not bfactor
a S b S
(d) 此文法产生的语言是什么?
由相同个数的a和b组成的字符串.
9
1.3 考虑文法 bexpr bexpr or bterm | bterm bterm bterm and bfactor | bfactor bfactor not bfactor | ( bfactor ) | true | false
(a) 0 ( 0 | 1)* 0 由0和1组成且以0开始和结束的符号串全体.
(b) ( ( | 0 ) 1* ) * 由0和1组成的符号串全体.
(c) ( 0 | 1 )* 0 ( 0 | 1) ( 0 | 1) 由0和1组成且以000,001,010或011结束的符号串全体. 长度大于等于3且倒数第3个字符为0的01符号串全体.
16
3.4 对于下列语言分别写出它们的正规表达式:
(a) 英文字母组成的所有符号串, 要求符号串中顺序包含 五个元音字母. 令letter={非元音的英文字母} letter* (a|A) letter* (e|E) letter* (i|I) letter* (o|O) letter* (u|U) letter*
18
(e) 带有偶数个0和奇数个1的由0和1组成的符号串全体. E为带有偶数个0和1的由0和1组成的符号串全体. 即 ( 00 | 11)* ( ( 01 | 10 ) ( 00 | 11)* ( 01 | 10 ) ( 00 | 11)* )* E1E|E0E1E0E

归纳编译原理试题及答案(二).ppt

归纳编译原理试题及答案(二).ppt
..........
补充题
1. 画出编译程序的总体逻辑结构图,简述各 部分的主要功能。
2020/9/9
..........
23
补充题
2. 已知文法G[Z]: Z→0U|1V U→1Z|1 V→0Z|0
请写出此文法描述的只含有4个符号的全部句子。 G[Z]产生的语言是什么? 该文法在Chomsky文法分类中属于几型文法?
..........
22
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
但, FOLLOW(A)={b,c} FIRST(A)={a,ε} 两者不相交。
③ B→b|ε
其候选式的FIRST集合互不相交; ε∈ FIRST(B)
但, FOLLOW(B)={c} FIRST(B)={b,ε} 两者也不相交。
所以,文法是LL(1)文法。
..........
88
CH.4.练习题3(P82.)
..........
CH8.– CH11.
1. 什么是符号表?符号表有哪些重要作用? 2. 符号表的表项常包括哪些部分?各描述什
么? 3. 有哪些存储分配策略?并叙述何时用何种
存储分配策略? 4. 代码优化的常用措施和优化的三个层次。
2020/9/9
..........
21
程序设计语言
补充题
(3) 该文法属于3型文法。

编译原理习题及答案1~3[优质PPT]

编译原理习题及答案1~3[优质PPT]

《编译原理教程》习题解析
40
图2-16 正规式((a | b)*|aa)*b对应的NFA
故选D。
《编译原理教程》习题解析
17
(5) NFA可以有DFA与之等价,即两者描述能力相同; 也即,对于任一给定的NFA M,一定存在一个DFA M', 使L(M)=L(M′)。故选B。
(6) DFA便于识别,易于计算机实现,而NFA便于定 理的证明。故选C。
(7) 本题虽然是第二章的题,但答案参见第三章3.1.3 节。即选C。
实际上,当闭包*取0时,正规式(ab) *a与正规 式a(ba)*由初态X到终态Y之间仅存在一条a弧。由 于(ab)*在a之前,故描述(ab)*的弧应在初态结点X 上;而(ba)*在a之后,故(ba)*对应的弧应在终态结 点Y上。因此,(ab)*a和a(ba)*所对应的NFA也可 分别描述为如图2-9(a)和(b)所示的形式,它们确定 化并化简后仍可得到图2-8所示的最简DFA。
【解答】 计算机执行用高级语言编写的程序主要有两种途 径:解释和编译。
在解释方式下,翻译程序事先并不采用将高级语言程序全 部翻译成机器代码程序,然后执行这个机器代码程序的方法, 而是每读入一条源程序的语句,就将其解释(翻译)成对应其功能 的机器代码语句串并执行,然后再读入下一条源程序语句并解 释执行,而所翻译的机器代码语句串在该语句执行后并不保留。 这种方法是按源程序中语句的动态执行顺序逐句解释(翻译)执行 的,如果一语句处于一循环体中,则每次循环执行到该语句时, 都要将其翻译成机器代码后再执行。
《编译原理教程》习题解析
19
2.3 设M=({x,y}, {a,b}, f, x, {y})为一非确定的
有限自动机,其中f定义如下:

编译原理考试习题及答案PPT课件

编译原理考试习题及答案PPT课件

自底向上的语法分析是从输入的字符串出发,逐步将其归约为文法的起始符号。
自底向上的语法分析通常采用LR(0)、SLR(1)、LALR(2)等算法。
自底向上的语法分析可以检测出输入的字符串是否符合语言的语法规则,并生成相应的语法结构。
01
02
03
自底向上的语法分析
语法分析的算法和数据结构
语法分析的算法包括预测分析法、移位/归约法、LR(0)、SLR(1)、LALR(2)等。
三地址代码的生成
对三地址代码进行优化可以提高目标代码的执行效率,常见的优化技术包括常量折叠、死代码删除、循环展开等。
三地址代码的优化
循环优化
循环是程序中常见的结构之一,对循环进行优化可以提高程序的执行效率。常见的循环优化技术包括循环展开、循环合并、循环剪枝等。
要点一
要点二
死代码删除
死代码是指程序中永远不会被执行的代码,删除这些死代码可以减小目标代码的大小并提高程序的执行效率。
习题及答案解析
词法分析习题及答案解析
题目
给定一个字符串,判断它是否是合法的标识符。
答案解析
合法的标识符必须以字母或下划线开头,后面可以跟字母、数字或下划线。
题目
给定一个字符串,判断它是否是关键字。
答案解析
关键字是编程语言中预定义的保留字,不能用作标识符。例如,在C语言中,关键字包括`int`, `float`, `if`, `else`等。
答案解析
上下文无关文法是一种形式文法,它的产生式右部不依赖于左部的任何符号。这意味着产生式右部是一个终结符或一个非终结符的序列。
题目
给定一个抽象语法树,判断它是否是二叉树。
答案解析
抽象语法树是源代码的树形表示,每个节点表示源代码中的一个结构。如果一个抽象语法树中的每个节点最多有两个子节点,则它是二叉树。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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
相关文档
最新文档