编译原理第六章答案-编译原理第六章
《编译原理》(陈火旺版)课后作业参考答案ch6-10

第6章属性文法和语法制导翻译7. 下列文法由开始符号S产生一个二进制数,令综合属性val给出该数的值:试设计求的属性文法,其中,已知B的综合属性c, 给出由B产生的二进位的结果值。
例如,输入时,=,其中第一个二进位的值是4,最后一个二进位的值是。
【答案】11. 设下列文法生成变量的类型说明:(1)构造一下翻译模式,把每个标识符的类型存入符号表;参考例。
【答案】第7章语义分析和中间代码产生1. 给出下面表达式的逆波兰表示(后缀式):【答案】3. 请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。
【答案】间接码表:(1)→(2)→(3)→(4)→(1)→(5)→(6)4. 按节所说的办法,写出下面赋值句A:=B*(-C+D) 的自下而上语法制导翻译过程。
给出所产生的三地址代码。
【答案】5. 按照7.3.2节所给的翻译模式,把下列赋值句翻译为三地址代码:A[i, j]:=B[i, j] + C[A [k, l]] + d[ i+j]【答案】6. 按7.4.1和节的翻译办法,分别写出布尔式A or ( B and not (C or D) )的四元式序列。
【答案】用作数值计算时产生的四元式:用作条件控制时产生的四元式:其中:右图中(1)和(8)为真出口,(4)(5)(7)为假出口。
7. 用7.5.1节的办法,把下面的语句翻译成四元式序列: While A<C and B<D do if A=1 then C:=C+1 else while A ≦D do A:=A+2; 【答案】第9章 运行时存储空间组织4. 下面是一个Pascal 程序:当第二次( 递归地) 进入F 后,DISPLAY 的内容是什么当时整个运行栈的内容是什么 【答案】第1次进入F 后,运行栈的内容: 第2次进入F 后,运行栈的内容: 109 87 6 5 4 3 2 1 017 1615 14 13 12 11 10 9 8 7 6 5第2次进入F 后,Display 内容为:5. 对如下的Pascal 程序,画出程序执行到(1)和(2)点时的运行栈。
编译原理及其习题解答(武汉大学出版社)课件chap6

练习1题目 练习 题目
文法G[T]: T→ F | T*F F →F ↑ P | P P→ (T) | i 证明T*P ↑(T*F)是文法G的一个句型,并 指出这个句型的所有短语、直接短语、 句柄。
编译原理 Compiler Principles
练习1 练习1解答
证明:T T*F T*F↑P T*F↑(T) 语法树: T T * F P F ↑ ( P T )
编译原理 Compiler Principles
练习2题目
设有文法G[S]: 设有文法 S →V1 V1→ V2 | V1iV2 V2→ V3 | V2+V3 V3→ )V1* | ( (1)给出 (+(i( 的最右推导,并画出相应的语法树; 给出 的最右推导,并画出相应的语法树; (2)证明 2+V3i( 是文法的一个句型,并指出这个句型的短语、直接 证明V 是文法的一个句型,并指出这个句型的短语、 证明 短语、句柄。 短语、句柄。
编译原理 Compiler Principles
非确定的自下而上的分析器
非确定的自下而上的分析器,是一般移进 归约方法 非确定的自下而上的分析器,是一般移进-归约方法 的抽象模型,可识别任何上下文无关语言。 的抽象模型,可识别任何上下文无关语言。给定一个上下 文无关文法,可构造一个自下而上的分析器。 文无关文法,可构造一个自下而上的分析器。 非确定的自下而上的分析器与非确定的自上而下的分 析器的不同之处: 析器的不同之处: 课本P147 课本
编译原理 Compiler Principles
自下而上分析法存在的问题
可归约串的问题;(∵ 该分析的每一步就是从当前串中找一 ;(∵
个子串( 个子串(称“可归约串”),将它归约到某个非终结符号) 可归约串”),将它归约到某个非终结符号) 将它归约到某个非终结符号 自下而上分析法的关键就是找哪个子串是“可归约串” 自下而上分析法的关键就是找哪个子串是“可归约串”, 关键就是找哪个子串是 哪个不是“可归约串” 例如上例中的(3) 哪个不是“可归约串”。例如上例中的
北大编译原理chapter6

(12)CHARACTER FUNCTION PRDUCE()
(13) CHARACTER * 80 BUFFER
(14) INTEGER NEXT
(15) SAVE BUFFER,NEXT
(16) DATA NEXT/81/
(17) IF(NEXT.GT.80)THEN
(18) READ(*,'(A)')BUFFER
15
environment
state
名字
存储单元
值
l-value
r-value
存储分配
程序运行
图6.5 从名字到值的两个阶段映射
16
静态概念 过程定义 名字说明 说明的作用域
动态对应 过程活动 名字的绑定 活动的生存期
17
6.1.6 提出的问题
编译程序组织存储分配所采用策略和方法主
要取决于对源程序中下面的问题的回答。
可能有几处说明,语言的作用域规则规定:
在语句序列中引用的一个名字是在何处说
明的名字。
3 . 编译时,处理说明把名字及其属性信息填
写进符号表(add(id.entry,id.vul)); 处理引用
名字时,查找这个名字的属性信息
(lookup(id)),符号表管理程序根据语 言的
作用域规则,使 lookup(id)返回id的作用域
3. 栈:Pascal,c 4. 堆: Pascal,c
21
6.2.2 活动记录 把过程的一个活动所需要的信息组织成一
块连续的存储单元,称为活动记录。 一个活动所需要的信息的每个数据项有相
同的生存期,因此,组织成一个活动记录是 很自然的。
对于pascal语言来说,运行过程中,当调用 一个过程时,在栈顶构筑它的活动记录;当 这个过程的活动执行完后,把它从栈顶弹出。
编译原理(第2版)课后习题答案详解

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

第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→aS→∧S→(T)T→T,ST→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 VV T|ViTT F|T+FF )V*|((1) 给出(+(i(的规范推导。
(2) 指出句型F+Fi(的短语,句柄,素短语。
(3) G[S]是否为OPG?若是,给出(1)中句子的分析过程。
因为该文法是OP,同时任意两个终结符的优先关系唯一,所以该文法为OPG。
(+(i(的分析过程第4题文法G[S]为:S→S;G|GG→G(T)|HH→a|(S)T→T+S|S(1)构造G[S]的算符优先关系表,并判断G[S]是否为算符优先文法。
(2)给出句型a(T+S);H;(S)的短语、句柄、素短语和最左素短语。
编译原理---第6章

——
1
《编译原理》
第6章 语法制导翻译 与属性文法
语法制导翻译概述 属性文法
综合属性与继承属性 S_属性文法 L_属性文法
翻译模式
国家精品课程
——
2
《编译原理》
6.1 语法制导翻译概述
语法制导翻译的概念描述
在进行语法分析的同时,完成相应的语义处理 E→E1 + E2 E.val:=E1.val+E2.val
T → int
T → real
L → L1,id
L → id
1. 纪录标识符的类型 2. 类型信息传递
方法:用T.type记录类
型信息,并传给L.in
国家精品课程
——
15
《编译原理》
例6-2 说明语句的属性文法
D→TL
T → int T → real L → L1,id L → id
digit.lexval=4
例6-4:real id1,id2,id3 的分析树和属性计算
D T .type=real L .in=real D → T { L.in := T.type } L T → int { T.type := integer } T → real { T.type := real }
这种属性叫做继承(Inherited)属性
国家精品课程
——
21
《编译原理》
3. 属性分类——固有属性
语言中的标识符、常数(数值的、符号的) 、常量,它们的属性是用户给定的、固有不 变的
T → int T.type := „integer‟
固有(Inherent)属性(单词属性) 归类于综合属性
编译原理作业集-第六章-修订

第六章属性文法和语法制导翻译本章要点1. 属性文法,基于属性文法的处理方法;2. S-属性文法的自下而上计算;3. L-属性文法的自顶向下翻译;4. 自下而上计算继承属性;本章目标掌握和理解属性方法、基于属性文法的处理方法、S-属性文法和自下而上计算、L-属性文法和自顶向下翻译、自下而上计算继承属性等内容。
本章重点1.语法制导翻译基本思想。
2.语义规则的两种描述方法:语法制导的定义和翻译方案。
语法制导的定义没有指明语义规则的计算次序,而翻译方案显式给出语义规则(或叫语义动作)的计算次序和位置。
3.基于属性文法的处理方法,综合属性定义(S属性定义)和L属性定义。
4.设计简单问题的语法制导定义和翻译方案,这是本章的重点和难点。
这种设计可看成是一种程序设计,是一种事件驱动形式的程序设计,因此它比一般的编程要难得多。
这里的事件是句子中各种语法结构的识别。
5.语义规则的三种计算方法:分析树方法、基于规则的方法和忽略规则的方法。
6.S属性的自下而上计算(边语法分析边属性计算,忽略规则的方法)。
7.L属性的自上而下计算(边语法分析边属性计算,忽略规则的方法)。
8.递归计算(先语法分析后属性计算,基于规则的方法)。
本章难点1. 设计简单问题的语法制导定义和翻译方案;作业题一、单项选择题:1. 文法开始符号的所有________作为属性计算前的初始值。
a. 综合属性b. 继承属性c. 继承属性和综合属性d. 都不是2. 对应于产生式A→XY继承属性Y.y的属性计算,可能正确的语义规则是________。
a. A.a:=f(X.x,Y.y);b. )Y.y:=f(A.a,Y.y);c. Y.y:=f(X.x);d. A.a:=f(Y.y);3. 描述文法符号语义的属性有两种,一种称为__ __,另一种称为__ ___。
a. L-属性b. R-属性c. 综合属性d. 继承属性4. 出现在产生式________和出现在产生式________不由所给的产生式的属性计算规则进行计算,而是由其他产生式的属性规则计算或者由属性计算器的参数提供。
编译原理第六章答案

第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→aS→∧S→(T)T→T,ST→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 VV T|ViTT F|T+FF )V*|((1) 给出(+(i(的规范推导。
(2) 指出句型F+Fi(的短语,句柄,素短语。
(3) G[S]是否为OPG若是,给出(1)中句子的分析过程。
因为该文法是OP,同时任意两个终结符的优先关系唯一,所以该文法为OPG。
(+(i(的分析过程第4题文法G[S]为:S→S;G|GG→G(T)|HH→a|(S)T→T+S|S(1)构造G[S]的算符优先关系表,并判断G[S]是否为算符优先文法。
(2)给出句型a(T+S);H;(S)的短语、句柄、素短语和最左素短语。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第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(的分析过程
第4题
文法G[S]为:
S→S;G|G
G→G(T)|H
H→a|(S)
T→T+S|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]的算符优先关系矩阵:。