编译原理第一章

合集下载

编译原理第一章

编译原理第一章

常见的中间代码形式
探讨了常见的中间代码形式,包括三地址代码和抽 象语法树等,并讨论了它们的优缺点。
优化和目标代码生成
1 代码优化
讨论了编译器中的代码优化技术,以提高目 标代码的效率和执行速度。
2 目标代码生成
介绍了编译器如何生成目标代码,以便计算 机能够执行程序。
总结
编译原理是一门重要而有趣的课程,它为计算机科学学习者提供了深入了解计算机程序执行过程的机会。
编译原理第一章
编译原理是计算机科学中非常重要的一门课程,它涉及到如何将高级程序设 计语言转换为计算机能够执行的机器语言。
课程介绍
定义和重要性
介绍了编译原理的定义,并 阐述了编译器在计算机科学 中的作用和重要性。
概述
解释了编译过程的基本步骤, 并介绍了前端和后端之间的 区别。
词法分析
讨论了词法分析的概念,包 括词法单元的定义、正则表 达式和有限自动机的应用。
语法分析

语法制导翻译
2
了自顶向下和自底向上的语法分析方法。
解释了语法制导翻译的概念和使用,并
讨论了与语义动作相关的内容。
3
语义错误的处理
讨论了如何检测和处理语义错误,并介 绍了常见的错误处理机制。
中间代码生成
中间代码和中间表示
详细介绍了编译器生成的中间代码及其表示形式, 以及其在编译过程中的重要性。

编译原理--第一章.讲义

编译原理--第一章.讲义

2018/11/14
2
编译原理
第一章 引论
2.编译理论与其他课程关系
操作系统
控制对象
数据结构
编译理论
基础
素材
离散数学
自动机和形式语言
2018/11/14 3
编译原理
第一章 引论
3.编译理论的应用
编译理论 的许多想法和技术可用于一般软件的设计:
文本编辑程序 有穷状态技术 上下文无关文法 语法制导翻译 代码优化技术
2018/11/14
目标程序代码
6
编译原理
第一章 引论
6.翻这种变换程序称为翻译程序
高级语言源程序
编译为
面向机器代码
这种变换程序称为编译程序 编译程序 有一些限制 (针对输入、输出)
2018/11/14 7
编译原理
第一章 引论
1.编译过程的组成 源程序
编译原理
第一章 引论
5.代码优化
任务
对于代码(主要是中间代码)进行加工变换, 以期能够产生更为高效(省时间和空间)的 目标代码 。
所做转换
中间代码
中间代码(优化后)
依据
程序等价变换规则
2018/11/14
主要理论基础
数据流方程
15
编译原理
第一章 引论
5.代码优化
示例
(1) M := I (2) N := J (3) K := 1 (4) if 100<K goto (9) (5) (6) (7) (8) (9)
源程序
词法分析 语法分析
单词符号 语法单位 中间代码
编译过程
中间代码生成 代码优化
中间代码(优化后)
目标代码

编译原理(第四版)第1章 绪论

编译原理(第四版)第1章 绪论

2.语法分析
语法分析的任务是在词法分析的基础上,根据语言的语法 规则(文法规则)把单词符号流分解成各类语法单位(语法范畴), 如“短语”、“子句”、“句子(语句)”、“程序段”和“程 序”。通过语法分析可以确定整个输入串是否构成一个语法上 正确的“程序”。语法分析所遵循的是语言的语法规则,语法 规则通常用上下文无关文法描述。
5.目标代码生成
这一阶段的任务是把中间代码(或经优化处理之后)变换成特 定机器上的机器语言程序或汇编语言程序,实现最终的翻译工作。 最后阶段的工作因为目标语言的关系而十分依赖硬件系统,即如 何充分利用机器现有的寄存器,合理地选择指令,生成尽可能短 且有效的目标代码,这些都与目标机器的硬件结构有关。
(6)现代编译技术已转向并行编译的研究。
1.3 编译程序的工作过程与结构
1.词法分析
词法分析的任务是输入源程序,对构成源程序的字符串 进行扫描和分解,识别出一个个单词符号,如基本字(if、for、 begin等)、标识符、常数、运算符和界符(如“(”、“)”、“=”、 “;”)等,将所识别出的单词用统一长度的标准形式(也称内 部码)来表示,以便于后继语法工作的进行。因此,词法分析 工作是将源程序中的字符串变换成单词符号流的过程,词法 分析所遵循的是语言的构词规则。
出错处理与编译的各个阶段都有联系,与前三个阶段的联 系尤为密切。出错处理程序应在发现错误后,将错误的有关信 息如错误类型、出错地点等向用户报告。此外,为了尽可能多 地发现错误,应在发现错误后还能继续编译下去,以便发现更 多的错误。
1.4 编译程序的开发
编译程序的开发常常采用自编译、交叉编译、自展和移植等 技术实现。
第1章 绪论
1.1 程序设计语言和编译程序 1.2 编译程序的历史及发展 1.3 编译程序的工作过程与结构 1.4 编译程序的开发 1.5 构造编译程序所应掌握的内容 习题一

编译原理 第1章课件

编译原理 第1章课件

第一章编译程序概述目录1.1 什么是编译程序1.2 编译过程概述1.3 编译程序的结构1.4 编译阶段的组合1.5 编译技术和软件工具1.1 什么是编译程序编译程序:是一个语言翻译程序,是将用高级语言书写的源程序翻译成等价的低级语言的翻译程序。

(C ,Pascal,Foxbase 等) (机器语言,汇编语言) 翻译程序:是把一种语言书写的程序(源程序)翻译成另一种语言(目标语言)的等价的程序。

编译程序的重要性:使得计算机用户不必考虑与机器有关的繁琐细节,使程序员和程序设计专家独立于机器。

编译程序的发展■第一个编译程序的出现:20世纪50年代早期,主要将算术公式翻译成机器代码■20世纪50年代中期,一批编译系统程序开发成功■20世纪50年代末,开始研究编译程序的自动生成工具(LEX 、Y ACC )■20世纪60年代,研究使用自展技术,1971年PASCAL 自展技术成功后,影响越来越大。

1.2 编译过程概述一个编译程序的整个工作过程是划分成阶段进行的,每个阶段将源程序从一种表示形式转换成另一种表示形式。

典型的划分方法:(下图)词法分析阶段:编译过程的第一个阶段从而识别出一个个单词。

(逻辑上紧密相连的一组字符,这些字符具有集体含义。

)单词:标识符,保留字,常数、算符,界符等语法分析:编译过程的第二个阶段依据语言的语法规则从单词符号串中识别出各种语法单位(如“程”,“语句”,“表达式”等)。

目的:检查各种语法单位在语法结构上的正确性。

例子中:符合赋值语句的语法规则,即:<变量>=<表达式>例:s=2*3.1416*r*(h+r)规则<赋值语句>::=<标识符>“=”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=“(”<表达式>“)”<表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数> ■词法分析和语法分析本质上都是对源程序的结构进行分析。

编译原理-第一章-习题解答

编译原理-第一章-习题解答

第一章习题解答2.编译程序有哪些主要构成成分?各自的主要功能是什么?编译程序的主要构成成分有:词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、表格管理程序及出错处理程序。

(1)词法分析程序:从左到右扫描源程序,识别单词及其有关属性;(2)语法分析程序:分析源程序的结构, 判别它是否为相应程序设计语言中的一个合法程序;(3)语义分析程序:审查源程序有无语义错误,为代码生成阶段收集类型信息;(4)中间代码生成程序:将源程序变成一种内部表示形式;(5)代码优化程序:对前阶段产生的中间代码进行变换或进行改造,使生成的目标代码更为高效;(6)目标代码生成程序:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码;(7)表格管理程序:保存编译过程中的各种信息;(8)出错处理程序:若编译过程中发现源程序存在错误,则报告错误的性质和错误发生的地点,有些还可以自动校正错误。

3.什么是解释程序?它与编译程序的主要不同是什么?解释程序接受某个语言的程序并立即运行这个源程序。

它的工作模式是一个个的获取、分析并执行源程序语句,一旦第一个语句分析结束,源程序便开始运行并且生成结果,它特别适合程序员交互方式的工作情况。

而编译程序是一个语言处理程序,它把一个高级语言程序翻译成某个机器的汇编或二进制代码程序,这个二进制代码程序再机器上运行以生成结果。

它们的主要不同在于:解释程序是边解释边执行,解释程序运行结束即可得到该程序的运行结果,而编译程序只是把源程序翻译成汇编或者二进制程序,这个程序再执行才能得到程序的运行结果。

(当然还有其他不同,比如存储组织方式不同)THANKS !!!致力为企业和个人提供合同协议,策划案计划书,学习课件等等打造全网一站式需求欢迎您的下载,资料仅供参考。

编译原理王生原(第一章)

编译原理王生原(第一章)

目标代码生成
目标代码表示形式
编译器需要将中间代码转换 为目标机器代码,以便在计 算机上运行。
目标代码优化
编译器可以使用各种技术进 行目标代码的优化,如指令 选择、寄存器分配等。
指令生成方法
编译器可以使用模板匹配等 技术生成目标机器指令。
总结
1
词法分析
将程序代码分解成一系列令牌或词法单元
2
语法分析
编译过程概述
编译过程由三个阶段组成:词法分析、语法分析和语义分析。在生成中间代码和目标代码之 前,还需要进行一些优化。
词法分析
目的和原理
将程序代码分解成一系列令牌或词法单元,以便进 行进一步的分析和转换。
识别标识符和关键字
编译器需要识别代码中的标识符和关键字,以便进 行进一步的语法分析。
识别常量
编译器需要将数字和字符串等常量识别并转换为内 部表示形式。
类型检查
编译器需要检查代码中的类型 错误,并将其转换为中间代码 表示形式。
处理语义错误
编译器需要对语义错误进行处 理,如输出错误消息或修复错 误。
中间代码生成
中间代码表示形式
编译器需要将语法树转换为中间代码表示形式,以 便进行后续优化可以使用各种技术进行中间代码的生成和优 化,如常量折叠、复写传播等。
语法分析
1 目的和原理
将词法单元组成的序列转换为语法分析树或语法树,以便进一步分析和转换代码。
2 生成语法规则
编译器需要根据语法规则生成语法分析树,以便进一步处理和转换代码。
3 生成语法树
编译器需要将语法树转换为中间代码表示形式,以便进一步优化和转换代码。
语义分析
目的和原理
检查代码中的语义错误,如类 型不匹配、未定义的变量等, 并生成符号表以便后续处理。

编译原理(1)50页PPT

编译原理(1)50页PPT

编译程序
将一种语言书写的程序翻译成另一种语 言的等价的程序。 编译程序的输入对象称为源程序。 编译程序的输出对象称为目标程序。
高级语言程序的处理过程
常用的翻译工具有3种
根据被翻译语言与执行方式的不同 1.汇编程序
用于特定计算机上的汇编语言的翻译程序。
2.编译程序 3.解释程序
对源程序进行翻译的程序
sum = first+count*10
id1∶=id2+id3*10 四元式(运算符,运算对象1,运算对象2,结果)
5.中间代码优化
任务:通过调整和改变中间代码中某些 操作的次序,最终产生更加高效率的目 标代码 优化所依循的原则是程序的等价变换规 则 其方法有:公共子表达式的提取、循环 优化、删除无用代码等。
任务:扫描源程序,根据语言的词 法规则,分解和识别出每个单词, 并把单词翻译成相应的机内表示。 单词是语言中最小的语义单位 在词法分析阶段工作所依循的是语 言的词法规则。描述词法规则的有 效工具是正规式和有限自动机。
Pascal源程序片断
position := initial + rate * 60
二.编译程序概述
源程序 词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成
目标程序
英译与编译的比较
1.识别出句子中的一个个单 1.词法分析 字
2.分析句子的语法结构
2.语法分析
3.初步翻译句子的含意
3.语义分析中间代码 生成
4.译文修饰
4.优化
5.写出最后译文
5.目标代码生成
1.词法分析
表格与表格管理
编译过程中源程序的各种信息被保留在 种种不同的表格里,编译各阶段的工作 都涉及到构造、查找或更新有关的表格, 因此需要有表格管理的工作

编译原理第1章

编译原理第1章

编译原理第1章第一章编译概述2.典型的编译程序可划分为几部分?各部分的主要功能是什么?每部分都是必不可少的吗?答:编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

各部分的主要功能如下:词法分析程序又称扫描器。

进行词法分析时,依次读入源程序中的每个字符,依据语言的构词规则,识别出一个个具有独立意义的最小语法单元,即“单词”,并用某个单词符号来表示每个单词的词性是标识符、分界符还是数;语法分析程序的功能是:对词法分析的结果,根据语言规则,将一个个单词符号组成语言的各种语法类;语义分析的功能是确定源程序的语义是否正确;中间代码生成程序的功能是将源程序生成一种更易于产生、易于翻译成目标程序的中间代码;代码优化程序的功能是将中间代码中重复和冗余部分进行优化,提高目标程序的执行效率;目标代码生成程序的功能是将中间代码生成特定机器上的机器语言代码;符号表管理程序的功能是记录源程序中出现的标识符,并收集每个标识符的各种属性信息;错误处理程序的功能是应对在编译各个阶段中出现的错误做适当的处理,从而使编译能够继续进行。

编译程序的每部分都是必不可少的。

3.解释方式和编译方式的区别是什么?答:解释方式最终并不生成目标程序,这是编译方式与解释方式的根本区别。

解释方式很适合于程序调试,易于查错,在程序执行中可以修改程序,但与编译方式相比,执行效率太低。

4.论述多遍扫描编译程序的优缺点?答:优点:(1)可以减少内存容量的需求,分遍后,以遍为单位分别调用编译的各个子程序,各遍程序可以相互覆盖;(2)可使各遍的编译程序相互独立,结构清晰;(3)能够进行充分的优化,产生高质量的目标程序;(4)可将编译程序分为“前端”和“后端”,有利于编译程序的移植。

缺点是每遍都要读符号、送符号,增加了许多重复性工作,降低了编译效率。

编译原理-第一章

编译原理-第一章
第一章 引论
本章主要介绍为什么需要编译程序以及编译程序的功 能、体系结构、工作过程、组织方式,编译程序与高级程 序设计语言的关系,以及编译自动化和并行编译程序等方 面的基本知识。
1.1 翻译程序
1.1.1 程序设计语言 介绍了程序设计语言的发展
1.1.2 翻译语言 翻译程序将高级语言编写的程序翻译成机器语言
1. 自动产生编译程序的“编译程序的编译程序” (Compiler-Compiler)。只要给出某一高级程序语 言的语法规则和语义描述,这类程序就能自动地生成 相应语言的编译程序。
2. 面向语法的符号加工程序。这类程序比较通用。 3. 由可扩充语言组成的集合。这类TWS允许程序员利用
已有的数据类型和语句去定义新的数据类型和语句。
编译总控
Comp1



Comp1
覆盖
Comp2


Compn
扫描对象
部分处理结束
加工 结果
输入 对象
编译程序组织方式
1.6 编译程序的其他有关技术
❖ 编译程序的自展技术 ❖ 编译程序的移植 ❖ 编译程序的自动化 ❖ 程序的可再入性
编译程序的自展技术
按照自展技术,需要把源语言L分解成一个核心部分L0 与扩充部分L1,L2,…,Ln。
编译程序的自动化
❖ 在编译程序自动化进程中,开发早且应用广泛的 是词法分析程序生成器和语法分析程序生成器。
❖ 词法分析程序生成器:LEX(详见第13章)。它输入的是
正规表达式,输出的是词法分析程序。LEX的基本思想是由正规表 达式构造有穷自动机。
❖ 语法分析程序生成器:基于LALR(1)文法的YACC(Yet
1.5 编译程序的组织方式

编译原理(第一章)

编译原理(第一章)

语法分析器通常采用自顶向下的分析 方法,从源代码的起始位置开始,逐 步向下解析,直到找到完整的语法结 构或遇到语法错误。
语法分析是编译器的基础,它决定了 源代码的结构和含义,并为编译器提 供了理解和处理源代码的框架。
语法分析的任务
确定词法单元
语法分析器需要将源代码分解 成一个个的词法单元或符号, 如关键字、标识符、运算符等
对优化后的代码进行评估,包括性能测试、空间占用测试 等,以确定优化的效果是否达到预期目标。
THANKS FOR WATCHING
感谢您的观看
优化的分类
根据优化涉及的方面不同,优 化可以分为局部优化和全局优 化。
局部优化是指在单个函数或代 码块范围内进行的优化,通常 关注单个语句或表达式的优化。
全局优化是指在程序的全局范 围内进行的优化,通常关注函 数或模块之间的优化,以提高 整个程序的性能。
优化技术
在此添加您的文本17字
常见的优化技术包括常量折叠、死代码消除、循环展开、 循环优化、函数内联等。
在此添加您的文本16字
常量折叠是指在编译过程中将常量表达式的结果进行计算 并替换掉原来的表达式,以减少程序运行时的计算量。
在此添加您的文本16字
死代码消除是指删除程序中永远不会被执行到的代码,以 减少程序的空间占用和提高程序的运行效率。
在此添加您的文本16字
循环展开是指将循环体中的代码复制到循环外部,以减少 循环次数和减少循环开销。

识别语法结构
语法分析器需要识别出源代码 中的各种语法结构,如表达式 、语句、程序等。
建立语法树
语法分析器需要将识别的语法 结构按照一定的规则组织起来 ,形成一棵语法树。
语义检查
语法分析器在识别语法结构的 同时,还需要进行一些语义检 查,如类型检查、变量声明等

编译原理课件(刘铭)第1章

编译原理课件(刘铭)第1章

语法分析程序
语义分析和中间代码生成程序


1.3 编译程序的生成方法
编译程序是一个复杂的系统程序,要 生成一个编译程序一般要考虑以下几方面: 对源语言和目标语言认真分析 设计编译算法 选择语言编制程序 调试编译程序 提交相关文档资料
编译程序的自动生成
随着编译技术和自动机理论的发展, 近 年来已研制出了一些编译程序的自动生成 系统。 如目前已广为使用词法分析程序的自 动生成系统LEX和语法分析程序自动生成 系统YACC等,此外, 还有可用来自动产 生整个编译程序的软件工具:编译程序产 生器, 它的功能是将任一语言的词法规则、 语法规则和语义解释的描述作为输入,自 动生成该语言的编译程序。
表格管理和错误处理
一个好的编译程序在编译过程中, 应具有广泛的程序查错能力,并能准确 地报告错误的种类及出错位置,以便用 户查找和纠正,因此,在编译程序中还 必须有一个出错处理程序。
编译程序的结构
源程序 ( 字符串) 表 格 管 词法分析程序 出 错 处 理 代码优化程序 程 目标代码生成程序 程 序 目标程序
翻译程序是指这样一个程序,它把 一种语言(称作源语言)所写的程序(源 程序)翻译成等价的另一种语言(称作 目标语言)的程序(目标程序)。
1.1 翻译程序与编译程序
源程序 高级语言程序 编译程序 目标程序 汇编语言或者 机器语言程序
编译程序是一种翻译程序,它将 高级语言所写的源程序翻译成等价的 机器语言或汇编语言的目标程序。
编译程序的自动生成
生成编译程序的方法还常采用自编译 方式和移植方式。
随着并行技术和并行语言的发展,处 理并行语言的并行编译技术和将串行程序 转换成并行程序的自动并行编译技术正在 深入研究之中。

编译原理第1章

编译原理第1章

功能:依据源语言的语法规则把源程序的单词序列组成语法短语
(表示成分析树/语法树)。
17
What is a Grammar?

语法分析所依据的是语言的语法规则,文法是规则的集合,它们 支配了tokens 中的相互依赖和结构。

语言的语法规则通常是由递归规则来定义,如上述例子中表达式 和语句可由下述递归规则来定义:
t1 = inttofloat(60) t2 = id3 * t1 t3 = id2 + t2 id1= t3
25
Phase 5. Code Optimizer (代码优化)

代码优化的任务是:对产生的中间代码进行等 价变换,使生成的目标代码更为高效(时间和 空间)。优化的目的主要是提高运行效率,节 省存储空间。优化主要有两类,一是与机器有 关的优化,主要设计如何分配寄存器,如何选 择指令,这类优化是在生成目标代码时进行的; 另一类优化与机器无关,主要是对中间代码的 优化。主要有局部优化、循环优化等。
语义审查---上下文相关性、类型匹配、类型转换
例:
void p(); float: rate; void initial(); … position = initial + rate * 60 /* error */ /* error */ /* warning */; …
21
= position initial rate + * 60 position
19
(initial) <id,3> (rate) 树的结点是利用该语言的文法来建造的
语法树是分析树的一种压缩表示
=
position
+
* rate 60

编译原理_第1章(清华大学)

编译原理_第1章(清华大学)

语义分析
语义审查(静态语义)
上下文相关性 类型匹配 类型转换
例: Program p(); Var rate:real; procedure initial; … position := initial + /* error */ /* error */ …
rate * 60 /* warning */;
编译程序结构(components) 词法分析程序 语法分析程序 语义分析程序 中间代码生成程序 代码优化程序 目标代码生成程序 符号表管理程序 出错处理程序
词法分析程序
语法分析程序
表 格 管 语义分析程序 中间代码生成程序 出 错 处

代码优化程序
功能:层次分析.依据源程序的语法规则把源程序 的单词序列组成语法短语(表示成语法树).
position := initial + rate * 60 ; 规则 <赋值语句>::=<标识符>“:=”<表达式> <表达式>::=<表达式>“+”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” <表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数>
又如: int arr [2],abc; abc = arr * 10;
… Program p(); Var rate:real; Var initial :real; Var position :real ; … position := initial +

编译原理第一章

编译原理第一章

第一章概述1.1 编译程序的概念计算机硬件的最核心部件是CPU(Computer Processor Unit)即中央处理器,CPU能够执行的指令是二进制形式的指令即机器指令,机器指令的集合称机器语言。

用机器指令书写的程序可以说无法阅读,程序设计的效率极低甚至可以说无法进行程序设计。

机器指令的助记符形式称汇编指令,比如MOV是数据传送指令,助记符形式的汇编指令的集合称汇编语言。

汇编语言的出现使得程序设计的效率有所提高,即使现在,汇编语言仍是编制设备驱动程序的重要工具。

但是,汇编语言书写的程序不能直接在CPU中运行,需要汇编程序(Assembler)把汇编语言书写的源程序(Source Program)汇编成机器语言程序才能在CPU中运行。

汇编的过程可以用下图表示:(源程序)(目标程序)汇编语言与机器语言类似,仍然依赖于计算机,使用起来繁琐、易出错、可读必差、缺乏通用性,因此面向过程的高级语言、面向对象的高级语言相继出现了。

例如面向过程的高级语言:Basic、Pascal、Fortran、C语言等等;面向对象的高级语言Visual Basic、Visual C++、Delphi、PowerBuilder等等。

把高级语言翻译(Translator)成汇编语言程序或机器语言程序的程序称为编译程序(Compiler)。

汇编语言与机器语言亦称低级语言。

对高级语言书写的源程序进行编译的过程可以用下图表示:编译程序翻译目标程序(Object Program)一般指低级语言程序。

综上所述,可以看出编译程序在计算机系统中的重要地位。

不同的高级程序设计语言需要不同的编译程序,同一种高级程序设计语言在不同的计算机上需要不同的编译程序。

有了编译程序,程序设计人员就不需要考虑与计算机硬件有关的绝大部分甚至全部细节,使程序设计独立与计算机,即同一个高级语言源程序可以在不同的计算机上运行。

在计算机上运行一个高级语言源程序一般分为两步:第一步是通过编译程序把源程序翻译成目标程序;第二步是运行或称执行目标程序。

编译原理(第1章)

编译原理(第1章)
int a,b,c; a=1234h; b=5678h; c=a+b; return 0;
翻译程序
机器只能理解和执行机器语言.高级语言需转换成机器 语言才能执行.如何转换?
▪ 翻译 ▪ 解释
翻译程序:是指能够把某种语言的程序(源语言程序) 转换成另一种语言的程序(目标语言程序),而后者 与前者在逻辑上是等价的。
为什么要学习编译原理
编译程序构造是计算机学科中一个非常成功 的分支,也是最早获得成功的分支;
编译原理蕴涵着计算机学科中解决问题的思 路、抽象问题和解决问题的方法;
编译原理课程的学习有利于加深对程序语言 的理解,可以帮助你更加快速的掌握新的语 言工具;
课程中包含了很多软件技术,程序设计语言 编译程序构造的基本原理和实现方法是软 件的核心技术之一,这对于以后从事软件设 计是很有帮助的.
第一种情况:
初始数据

源程序
译 程
高级语言 序
程序
机器语言 目标程序
运行系统
结果
编译阶段
运行阶段
编译原理
18
第二种情况:
初始数据

源程序
译 程
高级语言 序
程序
编译阶段
汇编 汇 语言 编 目标 程 程序 序
机器 语言 目标 程序
结果
运行系统
汇编阶段
运行阶段
编译原理
19
1.2 编译程序的基本结构
例:将英文句子 “I wish you success ” 翻译成中文句子的大致过程是:
例如 float r,h,s;
s = 2*3.1416*r*(h+r);
编译原理
28
单词符号串 s=2*3.1416 * r *(h+r) 中,“s” 是<变量>,单词符号串

第1章 编译原理

第1章 编译原理

7
编译技术的应用

编译并不限于程序设计语言的应用
– Text Formatters正文格式化程序

LATEX & TROFF Are Languages Whose Format Text
Commands
– Silicon Compilers硅片编译程序

Textual / Graphical: Take Input and Generate Circuit Design
8
编译程序的环境

为了建立一个可执行的程序,除了编译 程序本身之外还需要其他一些程序,它 们构成编译程序正常工作的环境,如下 图所示。
9
Source Program
1
Pre-Processor
2
Compiler
3
Assembler
4
Relocatable Machine Code Loader Link/Editor
initial
树的结点是利用该语言的文法来建造的
14

文法是规则的集合,它们支配了Tokens 中的相 互依赖和结构
statement 是 assignment statement, or while statement, or if statement, or ... identifier := expression ;

程序设计语言:用来编写计算机程序的语言。
高级语言
程序设 计语言
过程式语言 Fortran,Pascal,C 函数式语言 Lisp 逻辑式语言 Prolog 对象式语言 C++ 汇编语言
低级语言:面向机器的语言
机器语言
4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

词法分析
double f = sqrt(-1);
TDOUBLE TIDENT TOP TIDENT
(“double”) (“f”) (“=“) (“sqrt”)
TLPAREN (“(“)
TOP
(“-”)
TINTCONSTANT (“1”)
TRPAREN (“)”)
TSEP
(“;”)
词法分析
词法分析(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.
* 60 ;
语法分析 Syntax Analysis 功能:层次分析.依据源程序的语法规则把源 程序的单词序列组成语法短语(表示成语法 树).
也称为 “parsing” 使用 context-free grammars 结构上的合法性Structural validation (可生成语法树或推导Creates parse tree
单词---token 保留字---reserved word 标识符 ---identifier(user-defined name)

程序文本If x = y then z := 1 else z := 2; 经词法分析,变成一个个单词 if, x, =, y, then, z, :=, 1, else, z, :=, 2, ; 语言的单词符号是由词法规则所确定的。
4 词法分析程序的自动构造
词法分析程序是编译程序的一个构成部分,它的主要 任务是扫描源程序,按构词规则识别单词,并报告发 现的词法错误。正则表达式和有穷状态自动机分别作 为单词的描述工具和识别机制,成为词法分析程序的 自动构造原理,学习Lex(Flex)工具的使用方法。
教学内容
5 语法分析程序的构造
参考书:《Compilers: Principles, Technigues, and Tools》 Alfred V.Aho, Ravi Sethi, Jeffrey D.Ullman, AddisonWesley,1986. 影印版:人民邮电出版社, 2001
参考书:《程序设计语言 编译原理》(第3 版),陈火旺、刘春林等,国防工业出版社 2000
9 代码优化和目标代码生成
代码优化是对代码作一些等价变换,以使得 最后生成的目标代码更为高效。介绍优化技 术,优化分类以及优化工作的基础-控制流 和数据流分析问题。
编译的最后一个逻辑阶段是目标代码生成。 目标代码生成程序的设计细节要考虑目标语 言和操作系统的特点。讨论目标代码生成程 序设计的一般问题,包括指令选择,寄存器 分配和计算顺序选择。
教学内容
6 语义分析和中间代码生成 在词法分析和语法分析之后,编译程序下一 个逻辑阶段的任务是语义分析和生成中间代 码。引入属性文法和语法制导的翻译的概念, 介绍中间代码的形式,针对一些语法成分讨 论相应语义处理工作的描述。
7 符号表 介绍符号表的一般组织和使用方法,讨论分 程序结构语言的名字作用域分析及符号表设 计方案。
教学内容
1 编译程序概述 编译程序是现代计算机系统的基本组成部分之 一.编译程序一般由词法分析程序,语法分析程 序,语义分析程序,中间代码生成程序,目标 代码生成程序,代码优化程序,符号表管理程 序和错误处理程序等成分构成。本章概要介绍 编译成分的主要功能以及编译阶段的逻辑关系。
2 PL/0 编译程序剖析 给出一个简单的类Pascal语言,其编译程序用 高级语言(C和Pascal)实现。通过剖析该高 级语言程序以理解各编译成分的功能及手工实 现方法。
language) 语言处理程序(language processor) 语言转(变)换(language transformation)
编译逻辑过程
词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成
词法分析—第一步识别单词
英文句子由单词构成 This line is a longer sentence. (字母组成的有集体含义的最小成分) 句子开头的单词第一个字母要大写 空格是单词分隔符 句点是句子结尾
4 各部分权重
– 书面练习抽查 – 课堂小测(两次) 10% – 实践20%或35% (必做: Project1占10%; 选做: Project2占
25%, Project3占10% ;任选:Project4待定) – 期末考试 70%或55%
教材及主要参考书
教材:《编译原理》(第2版),张素琴、 吕映芝、蒋维杜、戴桂兰,清华大学出版社 2004
predicate then-stmt If-then-else
adjective else-stmt
double f = sqrt(-1);
“sqrt(-1)”的推导
规则 Expression -> UnaryExpression Expression -> FuncCall Expression -> TINTCONSTANT UnaryExpression -> TOP Expression FuncCall -> TIDENT TLPAREN Expression TRPAREN
教师联系信息
张素琴 电话62785601 办公室 东主楼10-207 zsq-dcs@
董渊 电话62794240 办公室 东主楼10-209 dongyuan@
王生原 电话62794240 办公室 东主楼10-209 wwssyy@
什么是编译程序
语言转(变)换系统
C++
C++编译器
Java
Java编译器
C Bytecode
术语
编译程序(compiler) 编译程序的源语言(源程序) (source
language)(source program) 编译程序的目标语言(目标程序) (object or
target language)(object or target program) 编译程序的实现语言(implementation
件语言书写的各种程
系统软件:居于计算 机系统中最靠近硬件
序处理成可在计算机 上执行的程序。
的一层,其他软件一 软件语言:用于书写
般都通过系统软件发 软件的语言。它主要
挥作用。他和具体的 包括需求定义语言,
应用领域无关,如编 功能性语言,设计性
译系统和操作系统等。 语言,程序设计语言
以及文档语言。
or derivation)
This line is a longer sentence
This line
is
a
longer sentence
pronoun noun verb article adjective noun
subject
sentence
object
分析程序成分
x=y
Z
1
Z2
G
assign
什么是编译程序
功能
高级语言 书写的程序
编译程序
术语
编译程序的源语言(源 程序)
编译程序的目标语言 (目标程序)
编译程序的实现语言
SO I
低级语言程序
ST I
什么是编译程序
分类
– 软件 – 系统软件 – 语言处理系统
编译系 统 操作系统
裸机
分类
软件:计算机系统中 语言处理系统:把软
的程序及其文档
自顶向下的语法分析。可以看作是为一个输入串寻找 一个最左推导的过程,也等价于从根开始,按前序生成 结点,为输入串构造分析树的过程。讨论一种有效的 无回溯的自顶向下分析程序,这种分析程序称为预测 分析程序。介绍对于一个文法类:LL(1)文法, 如 何自动的构造预测分析程序。
自底向上(自下而上)语法分析方法,也称移进-归 约分析法。它的实现思想是对输入符号串自左向右进 行扫描,并将输入符逐个移入一个后进先出栈中,边 移进边分析,一旦栈顶符号串形成可归约串,就用相 应非终结符代替可归约串,这称为一步归约,重复这 一过程,直到归约到栈中只剩文法的开始符号时,则 为分析成功,并确认输入串是文法的句子。本章介绍 LR分析法,分析过程中归约的是当前句型的句柄, 称为规范归约。重点讲解LR类(LR(0)、SLR (1)、LALR(1)、LR(1))文法的分析表的构 造原理。
ist his linealo gerse nte nce.
词法分析
从左至右扫描字符流的源程序、分解构成 源程序的字符串,识别出(拼)一个个的 单词(符号)
单词符号是语言中具有独立意义的最基 本结构。多数程序语言中,单词符号一 般包括 —各类型的常数、保留字、标识 符、运算符、界符等等。
例如
double f = sqrt(-1);
课程架构:
1 理论和实践并重的课程 2 理论部分的题目出现于书面练习,课堂小测和期末考试 3 实践题目(Project)
– Project1: 用高级语言(C或Pascal)实现扩充的PL/0编译程序
– Project2: 使用编译构造工具实现面向对象语言Tool的编译程序 – Project3: 使用编译构造工具实现扩充的PL0编译程序 – Project4: 用GCC裁制一个编译器(任选)
《编译原理》课程信息
教学目的与要求:
编译程序是现代计算机系统的基本组成部 分之一。本课程重点讲述编译程序的设计 原理和常用实现技术。通过课程的学习和 实验的完成,应该清楚的理解一个编译程 序是如何工作的;如果在以后遇到了任何 一个程序设计语言,应该知道如何实现这 个语言的多数机制;应具有一定的使用编 译构造工具开发编译程序的经验;会将所 学的常用技术和算法应用于类似的软件的 设计和实现中。
相关文档
最新文档