- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.4.2 多遍编译程序 编译程序把编译程序的五项任务分几遍来进行,每遍只完成部分任务,多遍编译程序的工作过程如下: 调用词法分析程序将字符串程序转换成单词符号串源程序。 调用语法分析程序对单词符号串源程序进行语法归类检查。 调语义分析程序进行语义检查,并生成中间的代码程序。 调用代码优化程序对中间代码程序进行优化。 调用目标生成程序将优化后的中间代码程序转换成目标代码程序。 词法分析 语法分析 语义分析 代码优化 目标代码生成 错误处理 符号表 目标程序 源程序 * 1.4.3编译程序分遍的优缺点 优点: 少占内存。 各遍编译程序相互独立,结构清晰; 能够进行充分的优化,产生高质量的目标程序; 可将编译程序分为“前端”和“后端”,有利于编译程序的移植。 缺点:多耗时间。 * 1.4.4“端”的概念 根据编译程序的各部分涉及的内容,可将编译的组成部分划分成“前端”和“后端”。 前端与源语言有关,包括词法分析、语法分析、语义分析和中间代码生成、符号表的建立以及相应的错误处理和符号表操作。 后端主要与目标机器有关,包括代码优化、目标代码生成以及相应的错误处理和符号表操作。 把编译程序分为前端和后端的优点是便于移植、编译程序的构造。 * 1.5 编译程序的前后处理器 源程序将多个模块保存在不同的文件中。 有些语言为了提高编程效率还提供了一些“预处理命令” 。 编译预处理器将各种源文件连接起来,将宏扩展成源语言语句。图1-9显示一个语言从框架源程序到可运行程序,处理系统的各个部分。 预处理器 编译程序 汇编程序 连接、加载程序 框架源程序 源程序 目标汇编程序 可重定位的机器代码 绝对机器代码 库、可重定位目标文件 图1-9 * 1.5.1预处理器 预处理器对源程序进行处理,产生标准源程序。 不同语言的预处理功能有所不同,C语言编译系统的预处理器主要完成以下几个功能: 宏处理:如#define PI 3.1415926,在编译之前,预处理器要将源程序中的所有符号PI换成3.1415926。 文件包含:如C源程序中含有#include “stdio.h”,预处理器用stdio.h的实际内容替换该语句。 条件编译:并非源程序的每一行都要进行编译,有时情况不同要编译不同的语句。C语言预处理器处理条件编译,将真正要编译的语句组成标准源程序。 * 1.5.2 汇编程序 有些编译程序直接产生可重定位的机器语言目标代码,而有些编译程序只产生汇编语言目标代码,这样就需要汇编程序做进一步翻译,生成可重定位的机器代码。 可重定位的机器代码可装载到内存的任何地方,这种代码采用相对地址,起始地址为0,各条指令及所访问的地址都是相对应于0的逻辑地址。 汇编语言采用助记符表示操作码,用标识符表示存储地址,如完成a = b + 5的80x86汇编语言程序如下: MOV R1,b ADD R1,#5 MOV a,R1 * 1.5.3 连接装入程序 连接装入程序完成两个主要任务: 连接:把几个可重定位的机器代码文件连接成一个可执行的程序,这些文件可能是分别编译得到的,也可能是由系统提供的库文件。 装入:读入可重定位的机器代码,根据装入地址修改将重定位地址转换成物理地址,并存储到内存中。 * 1.6 TEST语言与编译器 TEST语言的程序结构简单,语法上相当于C的函数体:是由一对花括号括起来的语句序列。 既无过程也无函数。 表达式语句以及控制语句的写法与C语言类似。 一条声明语句只能声明一个整型简单变量变量、没有数组。 控制语句只有三个: if、while和for语句,这三个控制语句本身可包含语句序列 表达式也局限于布尔表达式和整型算术表达式。布尔表达式由对两个算术表达式的比较组成,比较使用、=、、=、= =和!=比较算符。 算术表达式包括整型常数、变量、参数以及4个算符+、-、*、/,。 有复合语句。 为了能实现输入输出,添加了read语句和write语句。 在花括号中可以有注释,注释用“/*”和“*/”括起来,但注释不能嵌套。 * 1.6.2 TEST编译器 TEST编译器包括以下的C文件, TESTmain.c: 主程序,先后调用词法分析、语法分析及语义分析和代码生成。 TESTscan.c: 词法分析,接收用TEST语言编写的程序,输出的单词符号程序将作为语法分析的输入。 TESTparse.c:语法、语义分析及TEST机的汇编代码生成,如果有错误,报告错误。 * 本章小结 1、翻译程序的作用; 2、编译程序和解释程序之间的区别; 3、编译程序的组成及其各部分的功能; 4、单遍编译与多遍编译的区别。 * 第一章 编译概述 内容提要 程序设计语言 翻译程序 编译程序的组成
您可能关注的文档
最近下载
- 雷赛智能L6RS系列交流伺服系统使用手册.pptx VIP
- 弘历软件大战略功能讲解.ppt VIP
- 北京化工大学实验二二氧化碳的PVT测定报告.pdf VIP
- 农产品食品检验员职业技能竞赛理论考试题库资料(含答案).pdf
- 黑布林格列佛游记中文翻译.docx VIP
- 绿色建筑、节能建筑专项施工方案.docx
- 冀教版九年级上册数学精品授课课件 第二十七章 反比例函数 27.1 反比例函数.ppt VIP
- 23年秋七年级劳动技术 第一单元 传统工艺制作编制收纳筐 教案.docx VIP
- 2025年恒丰银行校园招聘笔试参考题库附答案解析.docx VIP
- 2014水利工程施工监理规范SL288-2014【参考】.doc VIP
文档评论(0)