编译程序
作为一个语言翻译程序,
也要在翻译过程中检查源程序的语法和语义,
报告一些出错和警告信,帮助程序员更正源程序
编译程序的整个工作过程
划分
成词法分析、语法分析、语义分析、
中间代码生成,代码优化、目标代码生成
六个阶段
另外两个重要的工作:表格管理和出错处理与上述六个阶段都有联系
编译过程中源程序的各种信息被保留在种种不同的表格里,
编译各阶段的工作都涉及到构造、查找或更新有关的表格,
因此需要有表格管理的工作;
如果编译过程中发现源程序有错误,
编译程序应报告错误的性质和错误发生的
地点,并且将错误所造成的影响限制在尽可能小的范围内,
使得源程序的其余部分能继续被编译下去,
有些编译程序还能自动校正错误,这些工作称之为出错处理
=====================我是分割线====================
●〖词法分析阶段是编译过程的第一个阶段.〗
此阶段的任务:从左到右一个字符一个字符地读入源程序。
对构成源程序的字符流进行扫描和分解,从而识别出一个个单词。
PS:[这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义]
例如:一个C源程序片断:
int a;
a = a + 2;
词法分析后可能返回:
单词类型 单词值
保留字 int
标识符 a
界符 ;
标识符 a
算符(赋值) =
标识符 a
算符(加) +
整数 2
界符 ;
●〖语法分析是编译过程的第二个阶段〗
语法分析的任务
是在词法分析的基础上将单词序列分解成各类语法短语,
如"程序","语句","表达式"等等。
一般这种语法短语,也称语法单位可表示成语法树,
比如上述程序段中的单词序列:
id1∶=id2+id3*10经语法分析得知其是PASCAL语言的"赋值语句",
语言树为:
|__id1∶=id2+id3*10___|
|___:=___|
/ \
|__id1__| |__+___|
/ \
|__ id2 __| |__*___|
/ \
|__id3___| |__10___|
●〖语义分析〗
阶段的任务是审查源程序有无语义错误
比如使用了没有声明的变量;
或者给一个过程名赋值;
或者调用函数时参数类型不合适或者参加运算的两个变量类型不匹配等等
语义分析主要的任务----
完成静态语义审查和处理
上下文相关性审查
类型匹配审查
类型转换
●〖中间代码生成阶段 〗
有的编译程序将源程序变成一种内部表示形式,
这种内部表示形式叫做中间语言或中间代码。
所谓"中间代码"是一种结构简单、含义明确的记号系统,
这种记号系统可以设计为多种多样的形式,
重要的设计原则为两点:
一是容易生成;二是容易将它翻译成目标代码。
很多编译程序采用了一种近似"三地址指令"的"四元式"中间代码,
这种四元式的形式为:(运算符,运算对象1,运算对象2,结果)。
a = b * c + b * d 的四元式序列为
(1) t1 = b * c
(2) t2 = b * d
(3) t3 = t1 + t2
(4) a = t3
再有:
if ( a <= b)
a = a – c;
c = b * c;
翻译成的四元式:
t1 = a > b
if t1 goto l
t2 = a – c
a = t2
l : t3 = b * c
c = t3
●〖代码优化〗
代码优化阶段的任务是
对前阶段产生的中间代码进行变换或进行改造,
目的是使生成的目标代码更为高效,即省时间和省空间
●〖目标代码生成〗
目标代码生成阶段的任务是
把中间代码变换成特定机器上的
绝对指令代码或可重定位的指令代码或汇编指令代码
(1)MOVF id3 R2
(2)MOLF #10.0 R2
(3)MOVF id2 R1
(4)ADDF R1 R2
(5)MOV R1 id1
第一条指令将id3的内容送至寄存器R2,
第二条指令将其与实常数10.0相乘,这里用#表明10.0处理为常数,
第三条指令将id2移至寄存器R1,
第四条指令加上前面计算出的R2中的值,
第五条指令将寄存器R1的值移到id1的地址中。
●〖 高级语言解释系统〗
为了实现在一个计算机上运行高级语言的程序,主要有两个途径:
第一个途径是把该程序翻译为这个计算机的指令代码序列,
这就是我们已经描述的编译过程。
第二个途径是编写一个程序,
它解释所遇到的高级语言程序中的语句并且完成这些语句的动作,
这样的程序就叫解释程序。
分享到:
相关推荐
编译 原理 第一章 绪论 课后 答案 好东西来下载
编译原理 第一章 引论 学习笔记
编译原理第一章作业.docx
这是东北大学的计算机专业编译原理第一章课件
第一章 高级语言与编译程序概述 一、单项选择题 1.将编译程序分成若干个“遍”是为了____ 。 A. 提高程序的执行效率 B. 使程序的结构更加清晰 C. 利用有限的机器内存并提高机器的执行效率 D. 利用有限...
编译原理第一章练习和答案[借鉴].pdf
编译原理 习题指导 何炎祥 课后答案 第一章
编译原理 原版 的答案,非常好,很实用的 。
第一章 编译程序概述 第二章 PL/0编译程序的实现 第三章 文法和语言 第四章 词法分析 第五章 自顶向下语法分析方法 第六章 自底向上优先分析方法 第七章 LR分析方法 第八章 语法制导翻译和中间代码生成 第九章 符号...
有关编译原理各章的习题及答案,有需要的同学可以过来下载!
编译原理电子课件 第一章 引论.ppt 编译原理电子课件 第七章 自下而上的LR(k)分析方法.ppt 编译原理电子课件 第三章 有穷自动机.ppt 编译原理电子课件 第九章 运行时的存储组织与管理.ppt 编译原理电子课件 第二章 ...
编译原理第三版 陈火旺 第五章补充习题 部分答案没有的题这里有一部分可以借鉴下
1. 用形式化方式描述句型、句子和语言的概念。...4. 现代编译常用的语法分析方法分哪两大类?各自的基本思想是什么?各自的关键问题是什么? 5. 请构造一文法,使文法产生的语言是正偶数集合,并规定偶数非0开头。
编译原理第四章答案你可以以一种更便捷的方法比照你自己做的正确与否
编译原理基础教程,ppt格式,初学者有一定的帮助!
编译原理课后习题解答第一章 后续的章节已上传