- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理实用教程(Tsu版电子教案)doc36
第1章 编译系统概述
翻译系统(编译系统)、操作系统、数据库管理系统是计算机的三大系统软件。
1.1 程序设计语言的发展
机器语言(汇编语言(程序设计语言(高级语言)
例计算表达式3*16+2的值,实现该计算的机器语言程序、汇编语言程序和高级语言(C语言)程序如下所示,该计算机的系统结构和汇编语言的使用方法详见本书第7章。
机器语言程序 汇编语言程序 高级语言程序
1.2 基本术语解释
㈠源语言和源程序
㈡文本文件
㈢目标语言和目标程序
㈣二进制文件
㈤翻译程序
将源程序译成逻辑上等价的目标程序的程序,有二种翻译方式:编译和解释。
①解释方式
以源程序作为输入,输入一句,解释执行一句,不产生完整的目标程序,相应的翻译程序称为解释程序,工作方式如下图所示:
解释、执行
源 解释程序 结
程 interpreter 果
序
输入数据
②编译方式
将源程序全部译为目标程序,该目标程序可在操作系统环境下直接执行,相应的翻译程序称为编译程序,工作方式如下图所示:
源程序 ASCII码 二进制(整体未定位) 二进制(整体定位) 结果
输入数据
1.3 编译过程概述
编译程序工作过程相当复杂,从数据加工的角度来看,可将其分成4个逻辑阶段,它们是:
词法分析
语法分析
语义分析(中间代码产生)
目标代码生成
图示如下:
源程序 词法 语法 中间代码 目标代码 目标程序
分析 分析 产生 生成
编译程序的结构基本上是按照这个流程来设计的。
下面以算术表达式3+abc*128为例,来说明编译程序工作过程。
㈠词法分析
执行词法分析任务的程序称为词法分析器。
任务:字符串形式的单词 ( 编码形式的单词内部码(二元式)
依据:语言的构词规则
①二元式
(单词种别,单词值)
单词种别:用整数码表示(为直观起见用字符表示),语法分析时用。
单词值:在本书中用字符串表示,语义分析时用。当一个单词种别中可能有多个单词时,单词的值才有意义。为了便于输入处理,无意义的单词值用NUL表示。
②二元式编码
单词 单词种别(字符形式) 单词值(字符串形式) + + NUL - - NUL * * NUL / / NUL ( ( NUL ) ) NUL … … … 标识符 i 字符串形符号名 整常数 x 字符串形式数字 实常数 y 字符串形式数字 … … … 经词分析,算术表达式3+abc*128的单词内部码(二元式)为:
(x,3) (+,NUL) (i,abc) (*, NUL) (x,128)
㈡语法分析
执行语法分析任务的程序称为语法分析器。
任务:检查源程序的语法结构是否正确
依据:语言的语法规则
在语法分析时,算术表达式3+abc*128的语法结构应表示为x+i*x,语法分析器最终应识别出这是一个算术表达式,识别过程相当于建立一棵语法树。
算术表达式
算术表达式 + 项
项 项 * 因子
因子 因子 x(整常数)
x(整常数) i(标识符)
㈢语义分析
执行语义分析任务的程序称为语义分析器或中间代码产生器。
任务:建立符号表和常数表,记录源程序中标识符属性和常数值,根据语言的语义规定生成中间代码。
依据:语言的语义内涵
语义分析(中间代码产生)主要工作为:语义正确性检查和语义翻译。
①语义正确性检查
例:
begin
real a;
integer a;
…………
end
语法正确,语义错误,除非语言允许变量性质可动态修改。
②语义翻译
1)说明语句的翻译
将标识符及其属性填入符号表。
2)执行语句的翻译
根据不同语句的语义,生成逻辑上等价的中间代码。
中间代码
结构简单、意义明确的记号系统,非常接近机器指令,但又独立于具体机器。常用的中间代码有三元式和四元式。
表达式3+abc*128可译成如下四元式:
(*,abc,128,T1)
(+,3,T1,T2)
其中,abc表示标识符abc在符号表中入口;T1和T2是在翻译过程中由编译程序引入的临时变量;而128表示常数128在常数表中的地址。
符号表
符号表用于记录源程序中出现的标识符,一个标识符往往具有一系列的语义值,它包括标识符的
原创力文档


文档评论(0)