01第01章 编译概述
- 格式:ppt
- 大小:410.50 KB
- 文档页数:30
本文由419380142贡献 ppt1。
李红军 E-mail: fengqu77@126.com Tel: 88150636 2011-2-26 1/38 课程简介 课程内容 介绍编译器构造的一般原理和基本实现方法 介绍的理论知识:形式语言和自动机理论、语 法制导的定义和属性文法、类型论等 强调形式描述技术和自动生成技术 强调对编译原理和技术的宏观理解,不把注意 力分散到枝节算法,不偏向于某种源语言或目 标机器 2011-2-26 2/38 为什么要学习编译原理 是计算机学科中一个非常成功的分支 蕴涵着计算机学科中解决问题的思路、抽象问题 和解决问题的方法 有利于加深对程序语言的理解 是一个很好的软件工程实例,所介绍的概念和技 术能应用到一般的软件设计之中 在软件逆向工程、程序理解和软件安全等方面有 着广泛的应用。
2011-2-26 3/38 教材和参考书 教材 《程序设计语言编译原理》. 陈火旺著,国防科技 大学出版社。
参考书 COMPILER CONSTRUCTION-Principles and Practice. Kenneth C. Louden著(San Jose State University) 《编译原理》. (美)阿霍(Aho, A. V.)等著. 李建中等译. 北京:机械工业出版社, 2003.8 《编译原理考研辅导教程》. 电子科技大学出版社 2011-2-26 4/38 课程要求 目标:相互交流,共同进步 课时:64 课程学分:4 先修课程:《离散数学》《数据结构与算法》 《程序设计语言》 考核:考试(50%)+作业(30%)+出勤(20%) 作业:每章至少1题 2011-2-26 5/38 第一章 编译程序概论 编译原理这门课程主要介绍设计 和构造编译程序的基本原理以及常用 的技术和方法。
本章重点介绍编译程序的基本概念。
什么是编译程序 编译的过程 编译程序的结构 2011-2-26 6/38 程序设计语言 计算机可以直接接收的语言是机器语言 机器语言,由二进 机器语言 制(0、1序列)组成,唯一可以在机器上直接执行 的语言。
第一章概述1.1什麽是编译程序什么是编译程序(compiler)编译程序是现代计算机系统的基本组成部分.从功能上看,一个编译程序就是一个语言翻译程序,它把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序. (1)软件分类软件:计算机系统中的程序及其文档系统软件:居于计算机系统中最靠近硬件的一层,其他软件一般都通过系统软件发挥作用。
他和具体的应用领域无关,如编译系统和操作系统等。
语言处理系统:把软件语言书写的各种程序处理成可在计算机上执行的程序。
软件语言:用于书写软件的语言。
它主要包括需求定义语言,功能性语言,设计性语言,程序设计语言以及文档语言。
(2)什么是编译程序语言转(变)换系统(3)术语编译程序(compiler)编译程序的源语言(源程序) (source language)(source program)编译程序的目标语言(目标程序) (object or target language)(object or target program) 编译程序的实现语言(implementation language)语言处理程序(language processor)语言转(变)换(language transformation)1.2 编译过程和编译程序的结构1.编译程序的结构(1)词法分析从左至右读字符流的源程序、识别(拼)单词有关术语词法分析(lexical analysis or scanning) --The stream of characters making up a source program is read from left to right and grouped into tokens,which are sequences of characters that have a collective meaning.单词---token保留字---reserved word标识符 ---identifier(user-defined name)(2)语法分析功能:层次分析.依据源程序的语法规则把源程序的单词序列组成语法短语(表示成语法树).术语语法分析(syntax analysis or parsing)The purpose of syntax analysis is to determine the source program’s phrase structure.This process is also called parsing.The source program is parsed to check whether it conforms to the source language’s syntax,and to construct a suitable representation of its phrase structure.语法树(推导树)(parse tree or derivation tree)(3)语义分析语义分析术语语义分析(semantic analysis)The parsed program is further analyzed to determine whether it conforms to the source language’s contextual constraints:scope rules, type rulese.g. To relate each applied occurrence of an identifier in the source program to thecorresponding declaration.(4)中间代码生成中间代码生成(intermediate code generation)This is where the intermediate representation of the source program is created.We want this representation to be easy to generate,and easy to translate into the target program.The representation can have a variety of forms,but a common one is called three-address code or 4- tuple code.(5)代码优化代码优化(code optimization)Intermediate code optimizationThe optimizer accepts input in the intermediate representation and output a version still in the intermediate representation .In this phase,the compiler attempts to produce the smallest,fastest and most efficient running result by applying various techniques.Object code optimization(6)目标代码生成(7)符号表管理记录源程序中使用的名字收集每个名字的各种属性信息类型、作用域、分配存储信息符号表(symbol table)Symbol table is a data structure which is employed to associate identifiers with their attributes .An identifier’s attribute consists of information relevant to contextual analysis,and is obtained from the identifier’s declaration.(8)出错处理检查错误、报告出错信息、排错、恢复编译工作出错处理(error handling)(error reporting and error recovery)The compiler should report the location of each error,together with some explanation. The major categories of compile-time error: syntax error, scope error, type error. After detecting and reporting an error,the compiler should attempt error recovery,means that the compiler should try to get itself into a state where analysis of the source program can continue as normally as possible.2。
第1章编译程序概论编译程序是一种将高级语言转化为机器语言的工具。
它是理解和操作计算机的重要组成部分,对于程序员来说至关重要。
本章将介绍编译程序的基本概念和功能,以及编译过程的各个阶段。
编译程序是将高级语言代码转化为低级机器语言代码的工具。
高级语言是以人类易于理解和编写的方式编写的,而机器语言则是计算机理解和执行的方式。
编译程序的作用是将高级语言代码转化为机器语言代码,以便计算机能够理解和执行。
编译程序的主要功能可以分为三个阶段:词法分析、语法分析和代码生成。
词法分析的目标是将源代码分解为一个个的词法单元,如关键字、标识符、常量和运算符等。
语法分析的目标是根据词法单元构建出语法树,以检查源代码的语法正确性。
代码生成的目标是将语法树转化为机器指令或者字节码,以便计算机执行。
编译过程可以进一步细分为以下几个阶段:预处理、编译、汇编和链接。
预处理的目标是对源代码进行处理,如展开宏定义、处理条件指令等。
编译的目标是将预处理后的代码转化为汇编语言代码。
汇编的目标是将汇编语言代码转化为机器语言代码。
链接的目标是将各个编译单元之间的引用解析,并生成可执行文件。
在编译过程中,还会遇到一些常见的错误和警告。
错误是指源代码中的语法错误或语义错误,如拼写错误、语法结构错误等。
警告是指在编译过程中出现的一些潜在的问题,如未使用的变量、未定义的函数等。
程序员需要根据编译器的输出信息对源代码进行修正,以保证代码的正确性和可靠性。
除了编译程序外,还有一种常见的方式将高级语言转化为机器语言,即解释执行。
解释执行是一种逐行解析和执行源代码的方式。
与编译程序不同,解释执行不需要将源代码转化为机器语言,而是在运行时逐行解析和执行。
解释执行的优点是方便调试和修改,但其执行效率相对较低。
总结起来,编译程序是将高级语言转化为机器语言的工具。
它包括词法分析、语法分析和代码生成等功能,并经过预处理、编译、汇编和链接等阶段。
编译过程中会出现一些错误和警告,程序员需要根据输出信息对源代码进行修正。
【第1章编译概述】1.2编译程序的发展1.3 编译程序的发展1.编译程序历史编译程序是系统软件中资格最⽼的成员之⼀。
译理论和技术近30年来发展⼗分迅速、成熟现已形成⼀套较为系统化的编译理论和技术2.编译理论与其他课程关系3.编译理论的应⽤编译理论的许多想法和技术可⽤于⼀般软件的设计。
4.翻译程序翻译程序(Translator) 是⼀种程序,其输⼊是某种语⾔的⼀系列语句,⽽其输出则是另⼀语⾔的语句序列。
5.编译程序编译程序(Compiler)是⼀种程序。
它把⽤⾼级语⾔写的源程序作为数据输⼊,经过翻译转换,产⽣⾯向机器的代码作为输出。
这当中代码还可能要由汇编程序或装配程序作进⼀步加⼯,得出⽬标程序,交给计算机执⾏。
6.翻译与编译这种变换程序称为翻译程序编译程序有⼀些限制(针对输⼊、输出)编译过程概述1.编译过程的组成编译过程概述2.词法分析3.语法分析此时可以看出,上述结果符合F 0 R循环语句的语法定义,故语法分析成功完成4.中间代码⽣成5.代码优化6.⽬标代码⽣成三.编译程序的结构1.编译程序总框2.表格与表格管理编译各阶段均须维持表格并进⾏表格管理建表的技术⽀持是数据结构表格的分类、结构、处理⽅法决定于语⾔及机器,还有优化措施编译程序涉及的表格有:符号名表循环表常数表等价名表标号表公⽤链表⼊⼝名表格式表过程引⽤表中间代码表3.出错处理⼀个好的编译程序应该:全⼤限度发现错误准确指出错误的性质和发⽣地点局部化错误的影响限制在尽可能⼩的范围内若能⾃动校正错误则更好,但其代价⾮常⾼源程序中的错误通常分为:语法错误 不符合语法( 或词法)规则的错误【单词拼写错误、括号不匹配】语义错误 不符合语义规则的错误【说明错误、作⽤域错误、类型不匹配】遍 是对源程序或源程序的中间结果从头到尾扫描⼀次,并作有关的加⼯处理,⽣成新的中间结果或⽬标程序。
5.编译前端与后端 编译前端要由与源语⾔有关但与⽬标机⽆关的那些部分组成 编译后端括编译程序中与⽬标机有关的那些部分四、编译程序⽣成1.编译程序的构造⼯具 以往编译程序的构造⼤多采⽤机器语⾔或汇编语⾔ 现在编译程序的构造越来越多采⽤⾼级语⾔有时为了充分发挥效率或满⾜不同需求,仍然采⽤机器语⾔或汇编语⾔构造编译程序(或其核⼼部分)2.构造⼯具 构造编译程序的⼯具称为编译程序产⽣器或翻译程序书写系统⾃动产⽣扫描器 LEX FLEX⾃动产⽣语法分析器 YACC BISON。