编译原理last集c语言,编译原理作业集-第七章.doc

编译原理作业集-第七章

第七章 语义分析和中间代码产生

本章要点

1. 中间语言,各种常见中间语言形式;

2. 说明语句赋值语句布尔表达式控制语句的翻译;

3. 过程调用的处理;

4. 类型检查;

本章目标

掌握和理解中间语言,各种常见中间语言形式类型检查等内容。

本章重点

1.中间代码的几种形式,它们之间的相互转换:四元式、三元式、逆波兰表示3.赋值语句算术表达式、布尔表达式的翻译及其中间代码格式4.各种控制流语句的翻译及其中间代码格式5.过程调用的中间代码格式6.类型检查本章难点

2. 类型系统和类型检查;

作业题

一、单项选择题:

1. 布尔表达式计算时可以采用某种优化措施,比如A and B用if-then-else可解释为。

a. if A then true else Bb. if A then B else false;

c. if A then false else true; d. if A then true else false;

2. 为了便于优化处理,三地址代码可以表示成a. 三元式 b. 四元式 c. 后缀式 d. 间接三元式

3. 使用三元式是为了:

便于代码优化处理 b. 避免把临时变量填入符号表

节省存储代码的空间 提高访问代码的速度

4. if x relop y then L表示成四元式为 。

a. (relop,x,y,L);b. (relop,L,x,y);c. (relop,x,L,y);d. (L,x,y,relop);

8. 在编译程序中, 不是常见的中间语言形式。

a.波兰式;b. 三元式;c. 四元式; d. 抽象语法树;

9. 在编译程序中安排中间代码生成的目的是________。

a. 便于提高编译效率; b. 便于提高分析的正确性;

c. 便于代码优化和目标程序的移植;d.便于提高编译速度;

10. 按照教材中的约定,下面 不是类型表达式:

a. boolean;b. type-error;c. real;d. DAG;

11. 一个Pascal函数

function f ( a, b:char ) :↑integer;

……

其作用域类型是 :

a. char×integer;b. char×char;c. char×pointer(integer);d. integer×integer;

12. 因为标识符可用于多种情况,比如常量标识符、变量标识符、过程标识符等等。因此,在符号表中为了给出各个符号的标志,常给标识符引入一个属性kind,然后在相应产生式的语义动作中添加给kind属性赋值的语句。比如,在在产生式D(id:T的语义动作中添加赋值语句id.kind= 。

a. VAR; b. CONSTANT;c. PROC;d. FUNC;

13. 下面 情况下,编译器需要创建一张新的符号表。

a. 过程调用语句;b. 标号说明语句;c. 数组说明语句;d.记录说明语句;

14. 函数function f(a,b:char):↑integer;…

所以f函数的类型表达式为:

a. char×char→pointer(integer); b. char×char→pointer;

c. char×char→integer; d. char×char→integer (pointer)

15. 如果一个语言的编译器能保证编译通过的程序,在运行时不会出现类型错误,则称该语言是 。

a. 静态的;b. 强类型的;c. 动态的;d. 良类型的;

一.答案:1. b;2. d;3. b;4. d;5. c;6. c.;7. a;8. a;9. c;10. d;11. b;12. a;13. d;14. a;15. b;

二、填空题:

1. 语法分析是依据语言的语法规则进行的,中间代码产生是依据语言的规则进行的。

2. 多目运算x:=y[i]的三元式表示为两部分:和。

3. 生成三地址代码时,临时变量的名字对应抽象语法树的。

4. 一个类型表达式或者是基本类型,或者由施加于其它类型表达式组成。

5.。tblptr和offset分别保存尚未处理完的过程的 和它们的offset,这两个栈顶的元素分别是正在处理的过程的的符号表指针和 。

7. 在一些pascal的实现中,如果说明中出现了没有名字的类型表达式,编译器这样处理:建立一个 来和每个声明的变量标识符相联系。

8. 赋值语句a:=b*-c+b*-c的后缀式为 。

9. 多目运算

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 现代编译原理C语言描述修订版的课后作业是让学生进一步理解和应用编译原理中的知识和技术。这份作业涉及的内容包括词法分析、语法分析、语义分析中间代码生成、优化和代码生成等方面。 在词法分析方面,学生可能需要根据给定的语法规则和词法规则,设计并实现一个词法分析器。该分析器会将输入的源代码分解成一系列单词,并识别出每个单词对应的词法单元。 在语法分析方面,作业可能要求学生使用自顶向下的递归下降分析方法,根据给定的语法规则和词法单元序列,构建一个语法树或抽象语法树。 在语义分析方面,学生可能需要为语法树或抽象语法树添加类型检查和作用域判断等语义信息,并检查源代码中的语义错误。 在中间代码生成方面,作业可能要求学生将语法树或抽象语法树转换为中间代码中间代码可以是三地址代码、四地址代码等形式。 在优化方面,学生可能需要分析中间代码,并对其进行优化,以提高程序的执行效率或减小生成的目标代码的大小。 最后,在代码生成方面,学生可能需要将中间代码转换为目标代码,具体的目标代码形式取决于所使用的目标机器和编译器。 为了完成这些作业,学生可能需要参考相关的教材、编译器相关工具和库的文档,以及阅读编译原理相关的论文和文献。同时,动手实践和编写代码是至关重要的,通过实际操作和调试,可以更好地理解和掌握编译原理中的概念和技术。 ### 回答2: 现代编译原理c语言描述修订版课后作业主要是对课堂所学知识的巩固和实践。通过完成这些作业,我们可以深入理解编译原理的核心概念和原理,并且通过实际操作来锻炼我们在C语言编程方面的能力。 作业内容包括但不限于以下几个方面: 1. 词法分析器的实现:根据给定的文法和词法规则,实现一个C语言的词法分析器,能够对C程序进行词法分析,将源代码分解成一系列的标记(tokens)。 2. 语法分析器的实现:根据给定的文法和语法规则,实现一个C语言的语法分析器,能够对C程序进行语法分析,构建语法树,并检查语法错误。 3. 语义分析器的实现:根据给定的语义规则,实现一个C语言语义分析器,能够对C程序进行语义分析,检查和处理类型错误,生成中间代码。 4. 中间代码生成:根据给定的中间代码规范,实现一个C语言中间代码生成器,能够将语法树转化为等价的中间代码表示。 5. 优化和目标代码生成:实现一系列优化算法和技术,对生成的中间代码进行优化,并将优化后的中间代码转化为目标代码。 通过完成这些作业,我们可以逐步掌握编译原理的重要组成部分,并且了解它们之间的关系和作用。这不仅可以提升我们的编译技术,还可以帮助我们更好地理解和应用C语言。 总之,现代编译原理C语言描述修订版课后作业对于我们深入学习和掌握编译原理,提升编译技术和C语言编程能力具有重要意义。通过不断实践和巩固,我们可以在编译原理领域取得更好的成绩,为今后的编程生涯打下坚实的基础。 ### 回答3: 现代编译原理C语言描述修订版的课后作业是对课堂所学知识的巩固和运用。通过这些作业,学生可以进一步理解和掌握编译原理中的各种概念和技术。 首先,作业可能包括一些理论题目,要求学生对编译原理的相关概念进行阐述和解释。例如,关于词法分析器的作用和实现原理的问题,学生需要详细解释词法分析器的作用和工作原理,并举例说明。 其次,作业还可能要求学生完成一些编程题目,例如设计一个简单的语法分析器。学生需要使用C语言描述相关的语法规则,并实现相应的语法分析算法。通过这样的编程练习,学生可以更好地理解语法分析器的原理和实现方法。 此外,作业还可能包括一些应用题目,例如优化编译器的设计。学生需要思考如何通过优化编译器的设计和算法来提高代码的执行效率。他们可以考虑使用更高级的优化技术,如循环展开、向量化等。 通过完成这些作业,学生能够加深对编译原理的理解,并提高自己解决实际问题的能力。这些作业可以帮助学生巩固和运用在课堂上学到的知识,同时也能够培养学生的编程能力和解决问题的思维能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值