编译原理

本文介绍了编译程序的工作阶段,包括词法分析、语法分析、语义分析、中间代码产生、优化和目标代码生成。讨论了词法分析器的构造,上下文无关文法,属性文法,以及编译过程中的优化技术,如循环优化中的强度削弱、删除归纳变量和代码外提。同时,阐述了中间代码的不同形式及其优缺点,并概述了编译前端和后端的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

针对循环优化:强度削弱 删除归纳变量 代码外提

终结符具有综合属性


词法分析阶段不能识别四元式

 

词法分析器的输入是源程序

DFA构成:有穷字母表 终止状态集合 有限状态集合

 

编译过程包括词法分析 语法分析 语义分析和中间代码产生 中间代码优化 目标代码生成 符号表 和出错处理七个阶段

符号表和出错处理贯穿整个编译过程

词法分析:lex和flex   语法分析:yacc

采用中间代码有什么好处?

方便进行与及机器无关的代码优化

改变目标机更容易

使编译程序的逻辑结构更明确

三地址代码的形式:三元式 四元式 和间接三元式

三元式:占用空间小,调整顺序或优化困难

四元式:优化方便,占用空间大

间接三元式:占用空间相对较小,调整顺序或优化时相对容易

第一章

翻译程序:把某一种语言程序(称为源语言程序)等价地转换成另一种语言程序(称为目标语言程序)的程序

编译程序:把某一种高级语言程序等价地转换成另一种低级语言程序(如汇编语言或机器语言程序)的程序

解释程序:把源语言写的源程序作为输入,但不产生目标程序,而是边解释边执行源程序本身

编译程序的工作一般分为五个阶段:

词法分析:

o任务: 输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个单词符号。

o依循的原则:构词规则

o描述工具:正规式和有限自动机

语法分析:

o任务:在词法分析的基础上,根据语言的语法规则把单词符号串分解成各类语法单位。

o依循的原则:语法规则

o描述工具:上下文无关文法

语义分析与中间代码产生

o任务:对各类不同语法范畴按语言的语义进行初步翻译。

o依循的原则:语义规则

o中间代码:三元式,四元式,树形结构等

优化

o任务:对于前阶段产生的中间代码进行加工变换,以期在最后阶段产生更高效的目标代码。

o依循的原则:程序的等价变换规则

目标代码产生:

o任务: 把中间代码变换成特定机器上的目标代码。

o依赖于硬件系统结构和机器指令的含义

o所谓"", 就是对源程序或源程序的中间表示从头到尾扫描一次。

o阶段与遍是不同的概念。一遍可以由若干段组成,一个阶段也可以分若干遍来完成。

编译前端和后端

o编译前端:与源语言有关,如词法分析,语法分析,语义分析与中间代码产生,与机器无关的优化

o编译后端:与目标机有关,与目标机有关的优化,目标代码产生

 

第二章:

n语法:一组规则用它可以形成和产生一个合式(well-formed)的程序

n语义:一组规则用它可以定义一个程序的意义

上下文无关文法:

语法树和二义性

 

n语言的二义性:如果产生上下文无关语言的每一个文法都是二义的,则说此语言是二义的

第三章

词法分析的任务:从左至右逐个字符的对源程序进行扫描,产生一个个单词符号

功能:输入源程序,输出单词符号

单词符号种类:基本字、标识符、常数、运算符、界符

词法分析器作为一个独立子程序:

词法分析作为一个独立的阶段,是否应当将其处理为一遍呢?

作为独立阶段的优点:结构简洁、清晰和条理化、有利于集中考虑词法分析一些枝节问题

不作为一遍:将其处理为一个子程序

 

第五章 自下而上分析

项目:移进,规约,接受,报错

规约:是指根据文法的产生式规则,把产生式的右部替换成左部符号

最左规约称为规范规约

一个句型的最左直接短语称为该句型的句柄

 

第六章 属性文法和语法制导翻译

属性的分类:综合属性(自下而上)和继承属性(自上而下)

属性文法分类:S-属性文法,L-属性文法

什么是S-属性文法?什么是L-属性文法?它们之间什么关系?

S-属性文法是只含有综合属性的属性文法

L-属性文法要求对于每个产生式A->X1X2...Xn,其每个语义规则中的每个属性或者是综合属性,或是Xj的一个继承属性,且该属性仅依赖于:

(1)产生式Xj的左边符号X1,X2...Xj-1的属性;

(2)A的继承属性

S-属性文法是L-属性文法的特例

终结符只有综合属性,非终结符既可以有综合属性也可以有继承属性 

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

中间语言:后缀式(逆波兰表示法) DAG 三地址代码(四元式,三元式,间接三元式)

第十章 优化

优化原则:等价 有效 合算

根据优化对象所涉及的程序范围分为:局部优化 循环优化 全局优化

局部优化:局限于程序基本快范围内的一种优化

局部优化包括:合并已知量 删除公共子表达式 删除无用赋值

循环优化:指对循环中的代码进行优化

循环优化包括:代码外提 删除归纳变量 强度削弱

全局优化是在整个程序范围内进行的优化,需进行数据流分析,花费代价很高

第十一章 目标代码生成

目标代码有三种形式:机器语言代码 机器语言模块 汇编语言代码

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值