当前位置:文档之家› 编译原理第六章标准答案

编译原理第六章标准答案

编译原理第六章标准答案
编译原理第六章标准答案

第6章自底向上优先分析

第1题

已知文法G[S]为:

S T a|A |(T)

T,S|S

(1)计算G[S]的FIRSTVT 和LASTVT。

(2)构造G[S]的算符优先关系表并说明G[S]是否为算符优先文法。

⑶计算G[S]的优先函数。

(4)给出输入串(a,a)#和(a,(a,a))#的算符优先分析过程。

答案:

文法展开为:

S^a

S T A

S T (T)

T T T,S

T T S

(1) FIRSTVT - LASTVT 表:

:3)算符优先災系&

友情提示:记得增加拓广文法

S' T #S#,所以# FIRSTVT(S) , LASTVT(S) # 。

(4)対输入串(a +a> #的算符忧先分折过程为 R (STACK)

当前输入字?j (CHAR)

剁余输入申< PMPUT_STRING ) 胡作(ACTION)

( a.a)# Move in 武

a

,a)# XI OVE in

a)# Kx 山忙匕:S-*a

a

3)^ - … Move in

調

)# Move in

#(N-a ) # RcdiKe: 5一n

#(N,N

)

Rirdiive: T —^T.S

)

# Move in

kfN)

Reduces S +(T|

Success!

对输入串(a,(a,a) ) #的算符优先分析过程为:

第2题

已知文法G[S]为:

S T a|A |(T)

T,S|S

(1)给出(a,(a,a))和(a,a)的最右推导,和规范归约过程。

⑵将⑴和题1中的⑷进行比较给出算符优先归约和规范归约的区另叽答案:

(I ) (a,a)的最右推导过程为: sn(T)

(T.S)

(T.a)

=>(S.a)

=>(a.a)

(a.(a.a))的最右推导过程为: S=>(T)

=>(T.S)

=>(T.(T))

=>(T.(T.a))

=>(T.(S.a))

=HT,(a.a))

n(sg))

^?(a.(a.a))

(a.(a^a))的规范归约过程:

(X册现范卩I约过用:

(2)

非终结符无关,只需知道把当前可归约串归约为某一个非终结符,不必知道该非终结符的名字是什么,因此去掉了单非终结符的归约。

规范归约的可归约串是句柄,并且必须准确写出可归约串归约为哪个非终结符。

第3题: 有文法G[S]:

S V

V T|ViT

T F|T+F

F )V*|(

(1)给出(+(i(的规范推导。

⑵指出句型F+Fi(的短语,句柄,素短语。

(3) G[S]是否为OPG ?若是,给出(1)中句子的分析过程。

(])S=>A =>ViT=>Vifi(=>T+F i(=>T+( i(=>F+( ](=><+( i(

⑵旬空F+Fi(的谄浓Hh /IX I

T + F f 轴语:Ft F+F,(r F+Fi( 何衲:F 素短语;( 丨

F

(3)riRSTVT 和LASTVT

FIRSTXT LASTA T T

S

V")?(

T

r*4

i+()

r

1>

+>

>>

(>>>

)*

-

OPG。

(+(i(的分析过程

文法G[S]为:

S T S;G I G

3 G(T) I H

HT a I (S)

T T T+S I S

(1)构造G [ S]的算符优先关系表,并判断G : S]是否为算符优先文法。

(2)给出句型a(T+S);H;(S)的短语、句柄、素短语和最左素短语。

(3)给出a;(a+a)和(a+a)的分析过程,说明它们是否为G[S]的句子。

(4)给出(3)中输入串的最右推导,分别说明两输入串是否为G[S]的句子。

(5)由(3)和(4)说明了算符优先分析的哪些缺点。

(6)算符优先分析过程和规范归约过程都是最右推导的逆过程吗?

答案:

(1 )构造文法G : S]的算符优先关系矩阵:

民上农中可看出终结符之间的优先关系址唯的.或稍^ [门的照初化先/系加阵不泮多电入口’因此+ G LS]是一个岸符优先文法

编译原理第六章答案

第6 章自底向上优先分析 第1 题 已知文法G[S]为: S→a|∧|(T) T→T,S|S (1) 计算G[S]的FIRSTVT 和LASTVT。 (2) 构造G[S]的算符优先关系表并说明G[S]是否为算符优先文法。 (3) 计算G[S]的优先函数。 (4) 给出输入串(a,a)#和(a,(a,a))#的算符优先分析过程。 答案: 文法展开为: S→a S→∧ S→(T) T→T,S T→S (1) FIRSTVT - LASTVT 表: 表中无多重人口所以是算符优先(OPG)文法。 友情提示:记得增加拓广文法 S`→#S#,所以# FIRSTVT(S),LASTVT(S) #。 (3)对应的算符优先函数为:

Success! 对输入串(a,(a,a))# 的算符优先分析过程为: Success! 第2 题 已知文法G[S]为: S→a|∧|(T) T→T,S|S

(1) 给出(a,(a,a))和(a,a)的最右推导,和规范归约过程。 (2) 将(1)和题1 中的(4)进行比较给出算符优先归约和规范归约的区别。答案:

(2)算符优先文法在归约过程中只考虑终结符之间的优先关系从而确定可归约串,而与 非终结符无关,只需知道把当前可归约串归约为某一个非终结符,不必知道该非终结符的名字是什么,因此去掉了单非终结符的归约。 规范归约的可归约串是句柄,并且必须准确写出可归约串归约为哪个非终结符。 第3题:

有文法G[S]: S V V T|ViT T F|T+F F )V*|( (1) 给出(+(i(的规范推导。 (2) 指出句型F+Fi(的短语,句柄,素短语。 (3) G[S]是否为OPG?若是,给出(1)中句子的分析过程。 因为该文法是OP,同时任意两个终结符的优先关系唯一,所以该文法为OPG。(+(i(的分析过程

编译原理56章作业答案

第五章 练习5.1.1: 对于图5-1中的SDD,给出下列表达式对应的注释语法分析树: 1)(3+4)*(5+6)n 练习5.2.4: 这个文法生成了含“小数点”的二进制数: S->L.L|L L->LB|B B->0|1 设计一个L属性的SDD来计算S.val,即输入串的十进制数值。比如,串101.101应该被翻译为十进制的5.625。提示:使用一个继承属性L.side来指明一个二进制位在小数点的哪一边。 答: 元文法消除左递归后可得到文法: S->L.L|L L->BL’ L’->BL’|ε B->0|1 使用继承属性L.side指明一个二进制位数在小数点的哪一边,2表示左边,1表示右边 使用继承属性m记录B的幂次 非终结符号L和L’具有继承属性inh、side、m和综合属性syn

练习5.3.1:下面是涉及运算符+和整数或浮点运算分量的表达式文法。区分浮点数的方法是看它有无小数点。 E-〉E+T|T T-〉num.num|num 1)给出一个SDD来确定每个项T和表达式E的类型 2)扩展(1)中得到的SDD,使得它可以把表达式转换成为后缀表达式。使用一个单目运算符intToFloat把一个整数转换为相等的浮点数 答: 练习5.4.4:为下面的产生式写出一个和例5.10类似的L属性SDD。这里的每个产生式表

示一个常见的C语言中的那样的控制流结构。你可能需要生成一个三地址语句来跳转到某个标号L,此时你可以生成语句goto L 1)S->if (C) S1 else S2 2)S->do S1 while (C) 3)S->’{’ L ‘}’; L -> LS|ε 请注意,列表中的任何语句都可以包含一条从它的内部跳转到下一个语句的跳转指令,因此简单地为各个语句按序生成代码是不够的。 第六章 练习6.1.1:为下面的表达式构造DAG ((x+y)-((x+y)*(x-y)))+((x+y)*(x-y)) 答:DAG如下

天津理工大学编译原理期末考试试卷

天津理工大学考试试卷 ~2010学年度第二学期 《编译原理》期末考试试卷 课程代码: 0660116 试卷编号: 1-A 命题日期: 2010 年 6 月 15 日 答题时限: 120 分钟考试形式:闭卷笔试 大题号 一二三四 总分 一、单项选择题(请从4个备选答案中选择最适合的一项,每小题2分, 得 分 1 2 3 4 5 6 7 8 9 10 D C B D D B C B D C 1. 编译程序是对() A. 汇编程序的翻译 B. 高级语言程序的解释执行 C. 机器语言的执行 D. 高级语言的翻译 2. 词法分析器的输出结果是() A.单词的种别编码B.单词在符号表中的位置 C.单词的种别编码和自身值D.单词自身值 3. 在规范规约中,用()来刻画可规约串。 A.直接短语 B.句柄 C.最左素短语 D.素短语 4. 与正规式(a* | b) * (c | d)等价的正规式是() A.a* (c | d) | b(c | d) B.a* (c | d) * | b(c | d) * C.a* (c | d)| b* (c | d) D.(a | b) * c| (a | b) * d 含有Aα·,则在状态K时,仅当面临输入符号a∈FOLLOW(A)时,才采 5. 若项目集I K 取Aα·动作的一定是() A.LALR文法 B.LR(0) 文法C.LR(1)文法 D.SLR(1)文法 6. 四元式之间的联系是通过()实现的。

A. 指示器 B. 临时变量 C. 符号表 D. 程序变量 7.文法G :S x Sx | y 所识别的语言是( ) A .xyx B .(xyx) * C .x n yx n (n ≥0) D .x * yx * 8. 有一语法制导翻译如下所示: S b Ab {print “1”} A (B {print “2”} A a {print “3”} B Aa) {print “4”} 若输入序列为b(((aa)a)a)b ,且采用自下而上的分析方法,则输出序列为( ) A .32224441 B. 34242421 C .12424243 D. 34442212 9.关于必经结点的二元关系,下列叙述不正确的是( ) A .满足自反性 B .满足传递性 C .满足反对称型 D .满足对称性 10.错误的局部化是指( )。 A .把错误理解成局部的错误 B .对错误在局部范围内进行纠正 C .当发现错误时,跳过错误所在的语法单位继续分析下去 D .当发现错误时立即停止编译,待用户改正错误后再继续编译 二、判断题(每小题1分,共5分) 得 分 1. 文法G 的一个句子对应于多个推导,则G 是二义性的。(× ) 2. 动态的存储分配是指在运行阶段为源程序中的数据对象分配存储单元。(√ ) 3. 算符优先文法采用“移进-规约”技术,其规约过程是规范的。( × ) 4. 删除归纳变量是在强度削弱以后进行。( √ ) 5. 在目标代码生成阶段,符号表用于目标代码生成。( × ) 5分,共15分) 得 分 1. 构造正规式(0∣1)* 00相应的正规式并化简。(共5分) (1)根据正规式,画出相应的NFA M (2分) I I 0 I 1 {x,1,2} {1,2,3} {1,2} {1,2,3} {1,2,3,4} {1,2} {1,2} {1,2,3} {1,2 } {1,2,3, {1,2,3,4} {1,2 } X 12 3 4 01

编译原理第4章作业答案

编译原理第4章作业 答案 本页仅作为文档封面,使用时可以删除 This document is for reference only-rar21year.March

第四章 习题4.2.1:考虑上下文无关文法: S->S S +|S S *|a 以及串aa + a* (1)给出这个串的一个最左推导 S -> S S * -> S S + S * -> a S + S * -> a a + S * -> aa + a* (3)给出这个串的一棵语法分析树 习题4.3.1:下面是一个只包含符号a和b的正则表达式的文法。它使用+替代表示并运算的符号|,以避免和文法中作为元符号使用的竖线相混淆: rexpr→ rexpr + rterm | rterm rterm→rterm rfactor | rfactor rfactor→ rfactor * | rprimary rprimary→a | b 1)对这个文法提取公因子 2)提取公因子的变换使这个文法适用于自顶向下的语法分析技术吗? 3)提取公因子之后,原文法中消除左递归 4)得到的文法适用于自顶向下的语法分析吗? 解

1)提取左公因子之后的文法变为 rexpr→ rexpr + rterm | rterm rterm→rterm rfactor | rfactor rfactor→ rfactor * | rprimary rprimary→a | b 2)不可以,文法中存在左递归,而自顶向下技术不适合左递归文法 3)消除左递归后的文法

rexpr -> rterm rexpr’ rexpr’-> + rterm rexpr’|ε rterm-> rfactor rterm’ rterm’-> rfactor rterm’|ε rfactor-> rprimay rfactor’ rfactor’-> *rfactor’|ε rprimary-> a | b 4)该文法无左递归,适合于自顶向下的语法分析 习题4.4.1:为下面的每一个文法设计一个预测分析器,并给出预测分析表。可能要先对文法进行提取左公因子或消除左递归 (3)S->S(S)S|ε (5)S->(L)|a L->L,S|S 解 (3) ①消除该文法的左递归后得到文法 S->S’ S’->(S)SS’|ε ②计算FIRST和FOLLOW集合 FIRST(S)={(,ε} FOLLOW(S)={),$} FIRST(S’)={(,ε} FOLLOW(S’)={),$} ③构建预测分析表

四川大学编译原理期末复习总结

一、简答题 1.什么是编译程序 答:编译程序是一种将高级语言程序(源程序)翻译成低级语言(目标程序)的程序。 将高级程序设计语言程序翻译成逻辑上等价的低级语言(汇编语言,机器语言)程序的翻译程序。 2.请写出文法的形式定义 答:一个文法G抽象地表示为四元组 G=(Vn,Vt,P,S) –其中Vn表示非终结符号 –Vt表示终结符号,Vn∪Vt=V(字母表),Vn∩Vt=φ –S是开始符号, –P是产生式,形如:α→β(α∈V+且至少含有一个非终结符号,β∈V*) 3.语法分析阶段的功能是什么 答:在词法分析的基础上,根据语言的语法规则,将单词符号串分解成各类语法短语(例:程序、语句、表达式)。确定整个输入串是否构成语法上正确的程序。 4.局部优化有哪些常用的技术 答:优化技术1—删除公共子表达式 优化技术2—复写传播 优化技术3—删除无用代码 优化技术4—对程序进行代数恒等变换(降低运算强度) 优化技术5—代码外提 优化技术6—强度削弱 优化技术7—删除归纳变量 优化技术简介——对程序进行代数恒等变换(代数简化) 优化技术简介——对程序进行代数恒等变换(合并已知量) 5.编译过程分哪几个阶段 答:逻辑上分五个阶段:词法分析、语法分析、语义分析与中间代码生成、代码优化、目标代码生成。每个阶段把源程序从一种表示变换成另一种表示。 6. 什么是文法 答:文法是描述语言的语法结构的形式规则。是一种工具,它可用于严格定义句子的结构; 用有穷的规则刻划无穷的集合;文法是被用来精确而无歧义地描述语言的句子的构成方式;文法描述语言的时候不考虑语言的含义。 7. 语义分析阶段的功能是什么 答:对语法分析所识别出的各类语法范畴分析其含义,进行初步的翻译(翻译成中间代码); 并对静态语义进行审查。 8.代码优化须遵循哪些原则 答:等价原则:不改变运行结果 有效原则:优化后时间更短,占用空间更少 合算原则:应用较低的代价取得较好的优化效果 9.词法分析阶段的功能是什么 答:

河南科技大学期末考试编译原理试卷及答案

河南科技大学电信科卷A 一. 填空题(每空2分,共20分) 1. 不同的编译程序关于数据空间的存储分配策略可能不同,但大部分编译中采用的方案有两种:静态存储分配方案和动态存储分配方案,而后者又分为(1) 和 (2) 。 2. 规范规约是最(3)规约。 3. 编译程序的工作过程一般划分为5个阶段:词法分析、(4) 、语义分析与中间代码生成,代码优化及(5) 。另外还有(6)和出错处理。 4.表达式x+y*z/(a+b)的后缀式为 (7) 。 5.文法符号的属性有综合属性和 (8)。 6.假设二位数组按行存放,而且每个元素占用一个存储单元,则数组a[1..15,1..20]某个元素a[i ,j]的地址计算公式为(9)。 7.局部优化是局限于一个(10)范围内的一种优化。 二. 选择题(1-6为单选题,7-8为多选题,每问2分,共20分) 1. 一个上下文无关文法G 包括四个组成部分:一组终结符,一组非终结符,一个( ),以及一组 ( )。 A . 字符串 B . 产生式 C . 开始符号 D . 文法 2.程序的基本块是指( )。 A . 一个子程序 B . 一个仅有一个入口和一个出口的语句 C . 一个没有嵌套的程序段 D . 一组顺序执行的程序段,仅有一个入口和一个出口 3. 高级语言编译程序常用的语法分析方法中,递归下降分析法属于( )分析方法。 A . 自左向右 B . 自顶向下 C . 自底向上 D . 自右向左 4.在通常的语法分析方法中,( )特别适用于表达式的分析。 A . 算符优先分析法 B . LR 分析法 C . 递归下降分析法 D . LL (1)分析法 5.经过编译所得到的目标程序是( )。 A . 四元式序列 B . 间接三元式序列 C . 二元式序列 D . 机器语言程序或汇编语言程序 6. 一个文法所描述的语言是( );描述一个语言的文法是( )。

编译原理龙书第六章课后作业答案

6.1 假如有下面的Pascal说明 TYPE atype=ARRAY [0..9,-10..10] OF integer; cell=RECORD a,b:integer END; pcell=↑cell; foo=ARRAY [1..100] OF cell; FUNCTION bar(r:integer;y:cell):pcell; BEGIN……END; 写出atype,cell,pcell,foo和bar的类型表达式。 解答: atype: ARRAY(0..9, ARRAY(-10..10, integer)); cell: RECORD((a× integer)× (b×integer)); pcell: POINTER(cell); 或 : POINTER(RECORD((a ×integer)× (b× integer))); foo: ARRAY(1..100, cell); 或 : ARRAY(1..100, RECORD((a ×integer)× (b× integer))); bar: integer× cell→pcell; 或 : integer× cell→POINTER(RECORD((a×integer) ×(b×integer))); 6.4 假定类型定义如下: TYPE link=↑cell; cell=RECORD info:integer; next: link END; 下面哪些表达式结构等价?哪些名字等价? (1)Link (2)pointer(cell) (3)pointer(Link) (4)pointer(record(info?integer)?(next ? pointer(cell))) 解答:(1)(2)(4)结构等价,无名字等价。

编译原理 作业标准答案

《编译原理》第一次作业参考答案 一、下列正则表达式定义了什么语言(用尽可能简短的自然语言描述)? 1.b*(ab*ab*)* 所有含有偶数个a的由a和b组成的字符串. 2.c*a(a|c)*b(a|b|c)* | c*b(b|c)*a(a|b|c)* 答案一:所有至少含有1个a和1个b的由a,b和c组成的字符串. 答案二:所有含有子序列ab或子序列ba的由a,b和c组成的字符串. 说明:答案一要比答案二更好,因为用自然语言描述是为了便于和非专业的人员交流,而非专业人员很可能不知道什么是“子序列”,所以相比较而言,答案一要更“自然”. 二、设字母表∑={a,b},用正则表达式(只使用a,b, ,|,*,+,?)描述下列语言: 1.不包含子串ab的所有字符串. b*a* 2.不包含子串abb的所有字符串. b*(ab?)* 3.不包含子序列abb的所有字符串. b*a*b?a* 注意:关于子串(substring)和子序列(subsequence)的区别可以参考课本第119页方框中的内容. ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ ~\(≧▽≦)/~ 《编译原理》第二次作业参考答案 一、考虑以下NFA: 1.这一NFA接受什么语言(用自然语言描述)? 所有只含有字母a和b,并且a出现偶数次或b出现偶数次的字符串. 2.构造接受同一语言的DFA. 答案一(直接构造通常得到这一答案):

答案二(由NFA构造DFA得到这一答案): 二、正则语言补运算 3.画出一个DFA,该DFA恰好识别所有不含011子串的所有二进制串. 1.画出一个DFA,该DFA恰好识别所有不含011子串的所有二进制串.

编译原理作业参考答案

第1章引言 1、解释下列各词 源语言:编写源程序的语言(基本符号,关键字),各种程序设计语言都可以作为源语言。 源程序: 用接近自然语言(数学语言)的源语言(基本符号,关键字)编写的程序,它是翻译程序处理的对象。 目标程序: 目标程序是源程序经过翻译程序加工最后得到的程序。目标程序 (结果程序)一般可由计算机直接执行。 低级语言:机器语言和汇编语言。 高级语言:是人们根据描述实际问题的需要而设计的一个记号系统。如同自然语言(接近数学语言和工程语言)一样,语言的基本单位是语句,由符号组和一组用来组织它们成为有确定意义的组合规则。 翻译程序: 能够把某一种语言程序(源语言程序)改变成另一种语言程序(目 标语言程序),后者与前者在逻辑上是等价的。其中包括:编译程序,解释程序,汇编程序。 编译程序: 把输入的源程序翻译成等价的目标程序(汇编语言或机器语言), 然后再执行目标程序(先编译后执行),执行翻译工作的程序称为编译程序。 解释程序: 以该语言写的源程序作为输入,但不产生目标程序。按源程序中语句动态顺序逐句的边解释边执行的过程,完成翻译工作的程序称为解释程序。 2、什么叫“遍” 指对源程序或源程序的中间形式(如单词,中间代码)从头到尾扫描一次,并作相应的加工处理,称为一遍。

3、简述编译程序的基本过程的任务。 编译程序的工作是指从输入源程序开始到输出目标程序为止的整个过程,整个过程可以划分5个阶段。 词法分析:输入源程序,进行词法分析,输出单词符号。 语法分析:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位,并判断输入串是否构成语法正确的“程序”。 中间代码生成:按照语义规则把语法分析器归约(或推导)出的语法单位翻译成一定形式的中间代码。 优化:对中间代码进行优化处理。 目标代码生成:把中间代码翻译成目标语言程序。 4、编译程序与解释程序的区别 编译程序生成目标程序后,再执行目标程序;然而解释程序不生成目标程序,边解释边执行。 5、有人认为编译程序的五个组成部分缺一不可,这种看法正确吗 编译程序的5个阶段中,词法分析,语法分析,语义分析和代码生成生成是必须完成的。而中间代码生成和代码优化并不是必不可少的。优化的目的是为了提高目标程序的质量,没有这一部分工作,仍然能够得到目标代码。 6、编译程序的分类 目前基本分为:诊断编译程序,优化编译程序,交叉编译程序,可变目标编译程序。

大学编译原理课程复习试题及答案

编译原理复习材料 选择题 1. 文法S→0S | S1 | 0的语言是( )。 A. { 0 m1m| m >=0 } B. { 0 m1m| m >=1 } C. { 0 m1n | m>=1,n>=0 } D. { 0 m1n | m>=0,n>=1 } 2. 描述程序语言所采用的Ⅲ型文法是( )。 A. 短语文法 B.正规文法 C.上下文无关文法 D.上下文有关文法 3. 状态转换图实现的简单方法是使每个状态结对应( )。 A.一个终结符 B.一个非终结符 C.一段小程序 D.一个函数 4. 规范归约的关键问题是寻找( )。 A. 最左素短语 B.句柄 C.直接短语 D.短语 5. 一个算符文法的任何产生式的右部都不含有两个相继的( )。 A.终结符 B.非终结符 C.终结符和非终结符 D.空字 6. 算符优先分析法的关键在于规定( )。 A.算符优先顺序和结合性质 B.算符优先顺序 C.结合性质 D.终结符和非终结符之间关系 7. 优先函数的优点是( )。 A.形象直观 B.便于进行比较运算 C.语法分析速度快 D.语法分析方法简单 8. 文法符号的属性通常分为( )两类。 A. 共用属性和私有属性 B.固有属性和可变属性 C.语法属性和语义属性 D.综合属性和继承属性 9. 在程序流图中,组成循环的结点序列应满足( ) A. 它们是强连通的 B.它们中间有唯一的入口结点 C.它们中间有一条回边 D.它们是强连通的且有唯一的入 口结点 10. 在利用寄存器R生成T1:=C/B的目标代码同时,还应记录信息( )。 A. C/B在T1中 B. T1在C/B中 C. R含有T1, T1在R中 D. R含有C/B, C/B在R中 1.D 2.B 3.C 4.B 5.B 6.A 7.B 8.D 9.D 10.C

北方工业大学16编译原理期末复习题(答案)资料

北方工业大学 《编译原理》课程期末复习题(答案) A 卷 2016年春季学期 开课学院 考试方式:闭卷 考试时间:120 分钟 班级 姓名 学号 一判断题(每个小题1分,共10分) 1. 程序语言主要由语法和语义两方面定义。 ( ) 2. 自上而下分析方法会遇到的主要问题有左递归和回溯。 ( ) 3. 已知文法G :E →i | EAE ,A →+|* ,其中的终结符号集包括{i ,+}。( ) 4. 编译程序是将高级语言程序翻译成机器语言程序。 ( ) 5. 只含有综合属性的属性文法称为S-属性文法。 ( ) 6. LL(1)文法中第一个L 的含义是从左到右扫描输入串。 ( ) 7. 在编译中进行语法检查的目的是为了发现程序中所有错误。 ( ) 8. 一个语义子程序描述了一个文法所对应的翻译工作。 ( ) 9. 一个句型的直接短语是唯一的。 ( ) 10. 确定的自动机以及不确定的自动机都能正确地识别正规集。 ( ) 解:1.√ 2.√ 3.× 4.× 5.√ 6.√ 7.× 8.× 9.× 10.√ 二、选择题(每个小题1分,共20分) 1. 文法分为四种类型,即0型、1型、2型、3型。其中3型文法是____。 A. 短语文法 B. 正规文法 C. 上下文有关文法 D. 上下文无关文法 2. 不可能是目标代码。 A. 汇编指令代码 B. 可重定位指令代码 C. 绝对指令代码 D. 中间代码 3. 将编译程序分成若干个“遍”是为了 。 A. 提高程序的执行效率 B. 利用有限的机器内存并提高机器的执行效率 C. 使程序的结构更加清晰 D. 利用有限机器内存但降低了机器的执行效率 4. 后缀式ab+cd+/可用表达式 来表示。 订 线 装

郑州大学《编译原理》期末试题样卷

词法分析: 1、根据正规式(a|b)*(aa|bb) (a|b)*构造NFA, 然后确定化成DFA 2、设计一个最小化的DFA,其输入字母表是{0,1},接受从0开始以1结尾的所有序列 正规式为:0(0|1)*1 语法分析: 1、已知文法G[E]: E E+T|E-T|T,T T*F|T/F|F,F(E)|i 证明(F+i)-T*(E-T)是文法的句型,并给出该句型的短语、直接短语和句柄 3、文法:S Aa A BB B sb|c 消除左递归 4、文法:S Qd Q Rb|Se R Sa|Qf|a 消除左递归 5、判断文法S cA|BA A CB|ε B dB C a|bd 是否是LL(1)文法,说明理由。是的话构造预测分析表 6、已知文法G[A]: A(A)|a,构造该文法的LR(0)分析表 7、判断文法S Sab|bR R S|a 是不是SLR文法,若是,构造分析表,不是的话说明理由。 语法制导翻译和中间代码生成: 1、分别给出表达式-(a*(b-c))+d 的逆波兰式、四元式和三元式 逆波兰式:@(a*(b-c))+d到@(a*(bc-))+d到@(abc-*)+d到(abc-*@)+d到abc-*@d+ 注意:@为求负的运算符- 四元式: (-,b,c,T1) (*,a,T1,T2) (@,T2,-,T3) (+,T3,d,T4) 2、写出a*-(b+c)树形表示法 3、对布尔式X+Y>Z∨A∧(┐B∨C)进行翻译 4、把语句if A∨B

编译原理作业答案最终版

第一次作业答案: 3.12 词法单元描述 3.3.5 b)a*b*……z* c) /\*([^*”]|\*[^/]|\”([^”]*)\”)*\*/ h)b*(a|ab)* 3.7.3d

F转G错误,F跳转后的状态子集应包含9

第二次作业答案: 4.2.2 最左推导 S->SS S->S*S S->(S)*S S->(S+S)*S S->(a+S)*S S->(a+a)*S S->(a+a)*a Parse tree: 最右推导: S->SS S->S*a S->(S)*a

S->(S+S)*a S->(S+a)*a S->(a+a)*a 无二义性,只能画出一棵语法树。 4.3.2 提取左公因子: S->SS’|(S)|a S’->+S|S|* 消除左递归: S->(S)A|aA , A->BA|?B->S|+S|* FIRST(S) = { a , ( } FIRST(A) = {* , a , ( , + , ?} FIRST(B) = {* , a , ( , +} FOLLOW(S) = { ( , ) , a , * , + , $} LL1 parse table: 转换表如下: match stack input action S$ (a+a)*a$ (S)A$ (a+a)*a$ S->(S)A

( S)A$ a+a)*a$ match( ( aA)A$ a+a)*a$ S->aA (a A)A$ +a)*a$ match a (a BA)A$ +a)*a$ A->BA (a +SA)A$ +a)*a$ B->+S (a+ SA)A$ a)*a$ match + (a+ aAA)A$ a)*a$ S->aA (a+a AA)A$ )*a$ match a (a+a A)A$ )*a$ A->? (a+a )A$ )*a$ A->? (a+a) A$ *a$ match ) (a+a) BA$ *a$ A->BA (a+a) *A$ *a$ B->* (a+a)* A$ a$ match * (a+a)* BA$ a$ A->BA (a+a)* SA$ a$ B- >S (a+a)* aAA$ a$ S->aA (a+a)*a AA$ $ match a (a+a)*a $ $ A->?

合肥工业大学编译原理期末复习

编译原理基础题 一、选择题 1、在使用高级语言编程时,首先可通过编译程序发现源程序的全部( A)错误和部分语义错误。 A、语法 B、语义 C、语用 D、运行 2、编译过程中,语法分析器的任务是( B)。 (1)分析单词是怎样构成的; (2)分析单词串是如何构成语句和说明的; (3)分析语句和说明是如何构成程序的;(4)分析程序的结构 A、(2)(3) B、(2)(3)(4) C、(1)(2)(3) D、(1)(2)(3)(4) 3.生成能被5整除的正整数的文法G[Z]是_ C____。 A. G[Z]: Z→AC,A→BA|B,B→0|1|2|…|9,C→0|5 B. G[Z]: Z→AC,A→BA|ε,B→0|1|2|…|9,C→0|5 C. G[Z]:Z→DA0|A5,A→BA|ε,B→0|D,D→1|2|…|9 D. G[Z]:Z→AC|C,A→BA|B,B→0|1|2|…|9,C→0|5 4、编译程序中的语法分析器接受以( C)为单位的输入,并产生有关信息供以后各阶段使用。 A、表达式 B、产生式 C、单词 D、语句 5、算符优先分析法每次都是对( D)进行归约。 A、直接短语 B、句柄 C、素短语 D、最左素短语 6、过程调用时,参数的传递方法通常有( C )。 (1)传值;(2)传地址;(3)传结果;(4)传名 A、(1)(2) B、(1)(2)(3) C、(1)(2)(4) D、(1)(2)(3)(4) 7、在编译方法中,动态存储分配的含义是( A )。 A、在运行阶段对源程序中的量进行分配 B、在编译阶段对源程序中的量进行分配 C、在编译阶段对源程序中的量进行分配,在运行时这些量的地址可以根据需要改变 D、以上都不对 8、a:= a+b*c↑(d/e)/f的逆波兰记号表示是()。 A、aabc*+↑de/f/:= B、aabcde↑/*f/:= C、aabcde/↑*f/+:= D、以上都不对。 9.算符文法是指 A 的文法。 ①没有形如U→...VW...的规则(U,V,W VN) ②VT中任意两个符号之间至多存在一种算符优先关系

四川大学编译原理期末试卷4套+复习资料

(2012-2013学年第2学期) 一.简答题 1.符号表的作用是什么?为了达到对其插入删除等操作的复杂度为O(1),需将其组织成什么数据结构。 2.分析树和语法书的区别。 3.什么是正规集。 4.什么叫句子,什么叫句型。 5.二义文法一定不是LL(1) 二.给定文法 S→A A→A+A|B++ B→y 1.画出句子y+++y++的分析树 2.给出句子y+++y++的最右推导 三.给定正则表达式(a|b)*abb 1.使用thompson构造法构造等价的NFA。 2.用子集法对(1)得到的NFA进行确定化和最小化,得到等价的最小DFA。 3.使用双层多分支语句实现(2)得到的DFA。写出伪代码。 四.给定文法 statement→if-stmt|other|e if-stmt→if(exp)statement else-part else-part→else statement|e exp→0|1 写出递归下降子程序的伪代码。 五.给定文法 S→[SX]|a X→e|+SY|Yb Y→e|-SXc 1.对文法中的每一个非终结符构造First集和Follow集。 2.构造LL(1)分析表 3.基于分析表,使用LL(1)对句子[a+a-ac]进行自顶向下的语法分析,给出每一步的动作及分析栈和输入串的变化情况。 六.给定文法 E→E+T|T T→T*F|F F→(E)|id 1.构造LR(0)项目的DFA: 2.构造SLR(1)的分析表 3.利用2得到的分析表对id+id*id进行自顶向下的语法分析。 七. 1.给出构造Follow集合的算法描述 2.给出SLR(1)算法的描述

编译原理第6章

编译原理第六章习题 1、构造符号串翻译文法,它接受由0和1组成的任意符号串,并产生下面的输出符号串: (1)输入符号串的倒置; (2)符号串0m1n 解:该翻译文法为:E-->E0 | E1 |ε (1)E-->@0E0 | @1E1 |ε (2)E-->@0E0 | E1@1 |ε 2、根据上题得到的翻译文法,设计递归下降翻译,并用C程序实现翻译。 (1)符号串的倒置:E-->@0E0 | @1E1 |ε转换为递归下降翻译:E-->{@00 | @11} (2)符号串0m1n :E-->@0E0 | E1@1 |ε转换为递归下降翻译:E-->{@00 | 1@1} # include int test1() { int temp=0; char ch; if((ch=getchar())!='\0') temp=test1(); printf("%c",ch); return (temp); } int test2() { int temp=0; char ch; ch=getchar(); if(ch=='0') { printf("0"); temp=test2(); } else if(ch=='1') { temp=test2(); printf("1"); } return (temp); } int main() { int temp=0,judge=0; pritnf("输入符号串的倒置测试:"); temp=test1(); if(!temp)printf("测试1成功\n"); else printf("测试1失败\n");

pritnf("符号串0m1n 测试:"); judge=test2(); if(!judge) printf("测试2成功\n"); else printf("测试2失败\n"); return 0; } 3、输入文法为: S-->aAS S->b A->cASb A->ε 翻译文法为: S-->aA@xS S-->b@z A-->c@yAS@vb A-->ε@w 设计递归下降翻译。 解:结合输入文法和翻译文法,消除左递归得到结果为:S->{aA@x}b@z; A>{c@y}@w{S@vb};

编译原理第二版课后习答案

《编译原理》课后习题答案第一章 第 1 章引论 第 1 题 解释下列术语: (1)编译程序 (2)源程序 (3)目标程序 (4)编译程序的前端 (5)后端 (6)遍 答案: (1)编译程序:如果源语言为高级语言,目标语言为某台计算机上的汇编语言或机器语言,则此翻译程序称为编译程序。 (2)源程序:源语言编写的程序称为源程序。 (3)目标程序:目标语言书写的程序称为目标程序。 (4)编译程序的前端:它由这样一些阶段组成:这些阶段的工作主要依赖于源语言而与目标机无关。通常前端包括词法分析、语法分析、语义分析和中间代码生成这些阶 段,某些优化工作也可在前端做,也包括与前端每个阶段相关的出错处理工作和符 号表管理等工作。 (5)后端:指那些依赖于目标机而一般不依赖源语言,只与中间代码有关的那些阶段,即目标代码生成,以及相关出错处理和符号表操作。 (6)遍:是对源程序或其等价的中间语言程序从头到尾扫视并完成规定任务的过程。 第 2 题 一个典型的编译程序通常由哪些部分组成?各部分的主要功能是什么?并画出编译程 序的总体结构图。 答案: 一个典型的编译程序通常包含 8 个组成部分,它们是词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、中间代码优化程序、目标代码生成程序、表格管理程序和错误处理程序。其各部分的主要功能简述如下。 词法分析程序:输人源程序,拼单词、检查单词和分析单词,输出单词的机表达形式。 语法分析程序:检查源程序中存在的形式语法错误,输出错误处理信息。 语义分析程序:进行语义检查和分析语义信息,并把分析的结果保存到各类语义信息表中。 中间代码生成程序:按照语义规则,将语法分析程序分析出的语法单位转换成一定形式 的中间语言代码,如三元式或四元式。 中间代码优化程序:为了产生高质量的目标代码,对中间代码进行等价变换处理。 目标代码生成程序:将优化后的中间代码程序转换成目标代码程序。 表格管理程序:负责建立、填写和查找等一系列表格工作。表格的作用是记录源程序的 各类信息和编译各阶段的进展情况,编译的每个阶段所需信息多数都从表格中读取,产生的中间结果都记录在相应的表格中。可以说整个编译过程就是造表、查表的工作过程。需要指出的是,这里的“表格管理程序”并不意味着它就是一个独立的表格管理模块,而是指编译程序具有的表格管理功能。 错误处理程序:处理和校正源程序中存在的词法、语法和语义错误。当编译程序发现源

编译原理课后作业参考答案

作业参考答案 第二章 高级语言及其语法描述 6、(1)L (G 6)={0,1,2,......,9}+ (2)最左推导: N=>ND=>NDD=>NDDD=>DDDD=>0DDD=>01DD=>012D=>0127 N=>ND=>DD=>3D=>34 N=>ND=>NDD=>DDD=>5DD=>56D=>568 最右推导: N=>ND =>N7=>ND7=>N27=>ND27=>N127=>D127=>0127 N=>ND=>N4=>D4=>34 N=>ND=>N8=>ND8=>N68=>D68=>568 7、G:S →ABC | AC | C A →1|2|3|4|5|6|7|8|9 B →BB|0|1|2|3|4|5|6|7|8|9 C →1|3|5|7|9 8、(1)最左推导: E=>E+T=>T+T=>F+T=>i+T=>i+T*F=>i+F*F=>i+i*F=>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=>E+T=>E+T*F=>E+T*i=>E+F*i=>E+i*i=>T+i*i=>F+i*i=>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) (2) 9、证明:该文法存在一个句子iiiei 有两棵不同语法分析树,如下所示,因此该文法是二义的。 T F F i F i F i T F i F i S i

编译原理第五章 作业参考答案

第五章自顶向下语法分析方法 1.对文法G[S] S→a|∧|(T) T→T,S|S (1)给出(a,(a,a))和(((a,a),∧,(a)),a)的最左推导。 (2)对文法G,进行改写,然后对每个非终结符写出不带回溯的递归子程序。 (3)经改写后的文法是否是LL(1)的?给出它的预测分析表。 (4)给出输入串(a,a)#的分析过程,并说明该串是否为G的句子。 解: (1) (a,(a,a))的最左推导为S→(T)→(T,S)→(S,S)→(a,(T))→(a,(T,S))→(a,(S,a))→(a,(a,a)) (((a,a),∧,(a)),a)的最左推导为 S→(T)→(T,S)→(S,a)→((T),a)→((T,S),a)→((T,S,S),a)→((S,∧,(T)),a)→(((T),∧,(S)),a) →(((T,S),∧,(a)),a)→(((S,a),∧,(a)),a)→(((a,a),∧,(a)),a) (2)由于有T→T,S的产生式,所以消除该产生式的左递归,增中一个非终结符U有新的文法G/[S]: S→a|∧|(T) T→SU U→,SU|ε 分析子程序的构造方法 对满足条件的文法按如下方法构造相应的语法分析子程序。 (1) 对于每个非终结号U,编写一个相应的子程序P(U); (2) 对于规则U::=x1|x2|..|xn,有一个关于U的子程序P(U),P(U)按如下方法构造: IF CH IN FIRST(x1) THEN P(x1) ELSE IF CH IN FIRST(x2) THEN P(x2) ELSE ... . . . IF CH IN FIRST(xn) THEN P(xn) ELSE ERROR 其中,CH存放当前的输入符号,是一个全程变量;ERROR是一段处理出错信息的程序; P(xj)为相应的子程序。 (3) 对于符号串x=y1y2...yn;p(x)的含义为: BEGIN P(y1); P(y2); ... P(yn); END 如果yi是非终结符,则P(yi)代表调用处理yi的子程序; 如果yi是终结符,则P(yi)为形如下述语句的一段子程序 IF CH=yi THEN READ(CH) ELSE ERROR 即如果当前文法中的符号与输入符号匹配,则继续读入下一个待输入符号到CH中, 否则表明出错。 (4) 如果文法中有空规则U::=EPSILON,则算法中的语句 IF CH IN FIRST(xn) THEN P(xn)

兰州大学《编译原理》16秋平时作业1 免费答案

一、单选题(共 15 道试题,共 60 分。) V 1. 设G是一个给定的文法,S是文法的开始符号,如果Sx(其中x∈V*),则称x是文法G 的一个。 A. 候选式 B. 句型 C. 单词 D. 产生式 标准答案:B 2. 堆式动态分配申请和释放存储空间遵守_____原则。 A. 先请先放 B. 先请后放 C. 后请先放 D. 任意 标准答案:D 3. 文法分为四种类型,即0型、1型、2型、3型。其中3型文法是()。 A. 短语文法 B. 正则文法 C. 上下文有关文法 D. 上下文无关文法 标准答案:B 4. LR分析法是一种______的分析技术。 A. 自顶向下 B. 自底向上 C. 由左到右 D. 由右向左 标准答案:A 5. 下面说法正确的是( ) A. 一个正规式只能对应一个确定的有限状态自动机 B. 一个正规语言可能对应多个正规文法 标准答案:B 6. 与编译系统相比,解释系统_____。 A. 比较简单 , 可移植性好 , 执行速度快 B. 比较复杂 , 可移植性好 , 执行速度快 C. 比较简单 , 可移植性差 , 执行速度慢 D. 比较简单 , 可移植性好 , 执行速度慢 标准答案:D 7. 在目标代码生成阶段,符号表用_____。 A. 目标代码生成 B. 语义检查 C. 语法检查 D. 地址分配 标准答案:D 8. 在LR分析法中,分析栈中存放的状态是识别规范句型()的DFA状态。 A. 句柄

B. 前缀 C. 活前缀 D. LR(0)项目 标准答案:C 9. 下列不属于字符串banana的字串是______。 A. b B. baa C. babn D. baan 标准答案:B 10. 在程序流图中,我们称具有下述性质()的结点序列为一个循环。 A. 它们是非连通的且只有一个入口结点 B. 它们是强连通的但有多个入口结点 C. 它们是非连通的但有多个入口结点 D. 它们是强连通的且只有一个入口结点 标准答案:D 11. 若文法G定义的语言是无限集,则文法必然是()。 A. 递归的 B. 前后文无关的 C. 二义性的 D. 无二义性的 标准答案:A 12. 表达式(┐A∨B)∧(C∨D)的逆波兰表示为()。 A. ┐AB∨∧CD∨ B. A┐B∨CD∨∧ C. AB∨┐CD∨∧ D. A┐B∨∧CD∨ 标准答案:B 13. 按逻辑上划分,编译程序第二步工作是。 A. 语义分析 B. 词法分析 C. 语法分析 D. 代码代码优化 标准答案:C 14. 过程P1调用P2时,连接数据不包含()。 A. 嵌套层次显示表 B. 老SP C. 返回地址 D. 全局DISPLAY地址 标准答案:A 15. 使用解释程序时,在程序未执行完的情况下,______重新执行已执行的部分。 A. 也能 B. 不能 标准答案:A

相关主题
文本预览
相关文档 最新文档