- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《编译原理教程(第四版)胡元义》第⼀章绪论
⼀、程序设计语⾔和编译程序
1.计算机的指令系统
计算机所能执⾏的每⼀种操作称为⼀条指令,计算机能够执⾏的全部指令集合就是该计算机的指令系统。
指令格式:操作码 操作地址码
2.低级语⾔
(1)机器语⾔
⼆进制形式的指令序列称为某计算机的机器语⾔,也是计算机唯⼀能够直接识别并执⾏的语⾔。
优点:直接执⾏,速度快,资源占⽤少
缺点:可读性、可移植性差,编程繁杂
(2)汇编语⾔
⽤助记符代替机器语⾔的⼆进制指令
例如⽤“LOAD”代替“0000”,⽤“STORE”代替“0001”,……
显然,汇编语⾔⽐机器语⾔有了长⾜的进步。但仍存在以下缺点:
严重依赖⽬标机器;
不易开发、调试;
和⾃然语⾔表达习惯相去甚远,可读性差。
3.⾼级语⾔
⾼级语⾔已经从具体机器中抽象出来,摆脱了依赖具体机器的问题。
⾼级语⾔虽然更符合⼈类的思维习惯,但⾼级语⾔程序也必须**翻译(编译)**成最终能够直接执⾏的机器语⾔程序。⽽且,这个难度⽐汇编过
程⼤很多。
4.程序设计语⾔的转换
(1)翻译
是指将某种语⾔的源程序,在不改变语义(逻辑上等价)的条件下,转换成另⼀种语⾔程序——⽬标语⾔程序
(2)编译
专指由⾼级语⾔程序⼀次性转换成低级语⾔程序,类似于全⽂翻译
(3)解释
接受某⾼级语⾔的⼀个语句输⼊,进⾏解释并控制计算机执⾏,得到这个语句的执⾏结果后,等待下⼀个语句的解释执⾏,执⾏过程中并不
产⽣⽬标程序。类似于⼝译
5.不同⾼级语⾔程序的执⾏类型
(1)编译型
C、C++、Pascal、Delphi等:⽣成⽬标程序。
执⾏效率⾼ 依赖编译器 跨平台性差
(2)解释型
BASIC、Unix的she11、⽹络浏览器(将HTML及Javascript等脚本程序解释执⾏)等;
执⾏效率较低 跨平台性好
(3)特殊型
Java:先编译成较低级的字节码程序,然后编译为机器语⾔程序。
6.编译型⾼级语⾔程序的阶段:
⾼级语⾔程序的执⾏通常分为两个阶段:编译阶段和运⾏阶段。
编译程序就是指这样⼀种程序,通过它能够将⽤⾼级语⾔编写的源程序转换成与之在逻辑上等价的低级语⾔形式的⽬标程序(如C语⾔下的
exe)
⾼级语⾔程序的执⾏分为三个阶段的情况:编译阶段、汇编阶段和运⾏阶段。
⼆、编译程序的历史及发展(⾃学)
三、编译过程和编译程序结构
1.⾼级语⾔程序的编译过程
输⼊:源程序,输出:⽬标程序
(1)词法分析
任务:将源程序中的字符串变换成单词符号流
词法分析所遵循的是语⾔的构词规则
(2)语法分析
任务:根据语法规则,从单词符号串中识别出各种语法单位(如表达式、说明、程序段等),并检查语法结构的正确性。
语法分析遵循语⾔的语法规则,通常使⽤上下⽂⽆关⽂法
(3)语义分析和中间代码⽣成
任务:
1、对每种语法单位(范畴)进⾏静态语义审查(验证语法结构合法的程序是否真正有意义)
2、在语义检查正确的情况下进⾏中间代码的翻译
中间代码是介于⾼级语⾔语句和低级语⾔的指令之间的⼀种独⽴于具体硬件的记号系统,既有⼀定抽象,⼜与低级语⾔指令⼗分接近,因此
转换成⽬标代码⽐较容易
中间代码的常⽤表⽰形式:四元式、三元式、间接三元式和逆波兰记号等(将在第四章介绍)
把语法单位翻译成中间代码,遵循语⾔的语义规则
(4)中间代码优化
任务:是对前阶段产⽣的中间代码进⾏等价变换或改造,以期获得更为⾼效(节省时间和空间)的⽬标代码
优化遵循等价变换规则
⼿段:删除冗余运算、删除⽆⽤赋值、合并已知量、循环优化等
(5)⽬标代码⽣成
任务:是把中间代码(或经优化处理之后)变换成特定机器上的机器语⾔代码或汇编语⾔代码,实现最终的翻译⼯作
该阶段的⼯作依赖硬件及其指令系统
(6)表格管理
编译程序过程中要记录变量名(存储分配、类型、作⽤域等)
如果是函数名(参数数量、类型,参数的传递⽅式、返回值类型等)
常量表、分程序⼊⼝表以及中间代码表等
编译程序的各个阶段需要构造、查找、更新变量和函数的信息,表格管理耗费了编译过程的绝⼤部分时间
因此,编译程序中必须有⼀个管理各种表格的程序
(7)出错处理
完整的编译程序应该能够定位和跟踪错误
能够捕获到各种词法、语法、语义错误,并定位错误的类型及出错位置
此外,为了尽可能多地发现错误,应在发现错误后还能继续编译下去,以便发现更多的错误
2.编译程序结构⽰意图(重点内容)
⼀个编译过程源程序可分为⼀遍、两遍或多遍完成,每⼀遍完成所规定的任务。
例如,第⼀遍只完成词法分析的任务,第⼆遍完成语法分析和
您可能关注的文档
最近下载
- 无机非金属材料工艺学课件.pptx VIP
- 6SR550 NXGPRO+ 中压变频器通讯手册A5E50226719J_NXGpro+ Communication Manual_Chinese.pdf VIP
- 无机非金属材料工艺学课件.pptx VIP
- 2024年高中数学同步高分突破讲义(人教A版2019)1.1空间向量及其运算-(选择性必修第一册)(学生版+解析).docx VIP
- 上海证券交易所上市公司业务操作手册.pdf
- 2025年高考语文备考古诗鉴赏之韩琦《次韵答致政杜公以迁职惠诗》.docx VIP
- 军队文职思维导图:公共科目基础知识-非法.pdf VIP
- 冬季施工混凝土施工方案编制依据.docx VIP
- 儿童财商启蒙课课件.pptx
- 最新民宿劳务合同模板.docx VIP
文档评论(0)