当前位置:主页 > 技术文档 > 编译 下载

《编译原理》答案 超清版

  • 更新:2020-10-17 09:15:22
  • 大小:2.5 MB
  • 热度:885
  • 审核:利幸瑶
  • 类别:技术文章
  • 格式:PDF

  • 资源介绍
  • 相关推荐

编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构建的一般原理和基本方法。内容包括语言和语法、词法分析、语法分析、语法引导翻译、中间代码生成、存储管理、代码优化和目标代码生成。编译原理是计算机专业的一门重要专业课。编译原理课程是计算机专业学生的必修课,是高校培养计算机专业人才的基础和核心课程。它也是计算机科学中最难和最具挑战性的课程之一。《编译原理》课程内容以原理性为主,高度抽象。

编译器的工作原理与基本组成

(0)通用程序设计语言的主要成份 声明+操作=完整定义

(1)以过程为基本结构的程序设计语言的组成

声明性语句:提供操作对象的性质,如数据类型、值、作用域等;
操作性语句:确定操作的计算次序,完成实际操作。
过程定义 = 过程头+过程体

编译器各阶段工作

1> 词法分析:词法分析的输入是源程序,输出是识别出的记号流.目的是识别单词. 至少分以下几类:关键字(保留字)、标识符、字面量、特殊符号

2> 语法分析: 输入是词法分析器返回的记号流,输出是语法树.目的是得到语言结构并以树的形式表示.对于声明性语句,进行符号表的查填,对于可执行语句,检查结构合理的表达式运算是否有意义.

3> 语义分析:根据语义规则对语法树中的语法单元进行静态语义检查,如类型检查和转换等,目的在于保证语法正确的结构在语义分析上也是合法的.

4> 中间代码生成(可选):生成一种既接近目标语言,又与具体机器无关的表示,便于代码优化与代码生成.

(到目前为止,编译器与解释器可以一致)

5> 中间代码优化(可选):局部优化、循环优化、全局优化等;优化实际上是一个等价变换,变换前后的指令序列完成同样的功能,但在占用的空间上和程序执行的时间上都更省、更有效

6> 目标代码生成:不同形式的目标代码—汇编语言形式、可重定位二进制代码形式、内存形式(Load-and-Go)

7> 符号表管理:合理组织符号,便于各阶段查找\填写等.

8> 出错处理:

动态错误:源程序中的逻辑错误,发生在程序运行的时候。也称为动态语义错误
静态错误:静态错误分为语法错误和静态语义错误.  
<1> 语法错误:有关语言结构上的错误,如单词拼写错误、表达式缺少操作数、begin和end不匹配
<2> 静态语义错误:分析源程序时可以发现的语言意义上的错误,如加法的两个操作数一个是整形变量,另一个是数组名

 

资源下载

资源下载地址1:https://pan.baidu.com/s/1r1oXVOUk_yVu3MToT8Ciew

相关资源

网友留言

编译以及编译过程
钭冰珍

也许我们这辈子都不会去实现一个编译器,但是我们至少要知道编译器是什么?为什么会需要编译器?

①编译器首先也是一种电脑程序。它会将用某种编程语言写成的源代码(原始语言),转换成另一种编程语言(目标语言)。

②高级计算机语言便于人编写,阅读,维护。低阶机器语言是计算机能直接解读、运行的。编译器主要的目的是将便于人编写,阅读,维护的高级计算机语言所写作的源代码,翻译为计算机能解读、运行的低阶机器语言的程序。编译器将原始程序(Source program)作为输入,翻译产生使用目标语言(Target language)的等价程序。源代码一般为高阶语言 (High-level language), 如 Pascal、C、C++、C# 、Java 等,而目标语言则是汇编语言或目标机器的目标代码(Object code),有时也称作机器代码(Machine code)。

词法分析

编译器的第一个步骤称为词法分析或扫描。词法分析器读入组成源程序的字符流,并将其组成有意义的词素的序列。形如<token-name, attribute-value>这样的词法单元。(token-name是由语法分析使用的抽象符号,attribute-value是指向符号表中关于这个词法单元的条目,符号表条目的信息会被语义分析和代码生成步骤使用)

例如源程序包含如下赋值语句:position = initial + rate * 60

中间代码生成

在源程序翻译成目标代码的过程中,一个编译器可能构造出一个或多个中间表示。这些中间表示可以有多种形式。语法树是一种中间表示形式,它们通常在语法分析和语义分析中使用。

 在源程序的语法分析和语义分析完成之后(也会生成中间表示,区别语法树),很多编译器生成一个明确的低级的或类机器语言的中间表示。该中间表示有两个重要的性质:1.易于生成;2.能够轻松地翻译为目标机器上的语言。

代码优化

代码优化试图改进中间代码,以便生成更好的目标代码。即更快(省时),更短(省空间)或能耗更低。

代码生成

代码生成以中间表示形式作为输入,并把它映射为目标语言。如果目标语言是机器代码,则必须为每个变量选择寄存器或内存位置,中间指令则被翻译为能够完成相同任务的机器指令序列。