1.3 编译程序的结构
在1.2中写到的5个阶段是编译程序工作时的动态特征。
编译程序的结构可以按照5个阶段的任务分模块进行设计。
<自考学习记录> 课程代码06370《编译技术》<3>_第1张图片
图片来源:https://blog.csdn.net/MapleSky2017/article/details/78157596
该图为比较典型的编译程序的结构设计图,该图清楚的表现了数据的转换过程。
图中的词法分析程序、语法分析程序(语义分析程序)、中间代码生成程序、代码优化程序、目标代码生成程序将分别完成1.2中写到的5个阶段的编译任务,每个阶段的输出为下一个阶段的输入。第一阶段的输入为源程序,最后阶段的输出为目标程序。
注:每个阶段的工作都与表格管理程序和出错处理程序这两个模块相关。
词法分析程序又称扫描器语法分析程序(语义分析程序)又称分析器
有的编译程序在识别出各类语法单位后,构造并输出一棵表示语法结构的语法树,然后根据语法树进行语义分析和中间代码产生。
还有许多编译程序在识别出语法单位后并不能真正构造语法树,而是调用相应的语义子程序,这种编译程序中扫描器分析器中间代码生成程序三者并非是截然分开的,而是互相穿插的,这样可以大大提高编译程序自身的工作效率。
编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及到构造、查找或更新有关表格,因此在编译程序中需要有一组管理各种表格的程序。
如果源程序有错误,编译程序应设法发现错误,把有关出错信息报告给用户,这部分工作是由专门的一组程序(命名:出错处理程序)来完成。
一个好的编译程序应能最大限度的发现源程序中的各种错误,准确指出错误性质和发生错误的地点,并且能将错误所造成的影响限制在尽可能小的范围内,使得源程序可以继续编译其余部分,以便进一步发现其他可能的错误,出错处理程序与编译的各个阶段都有联系,前三段尤为密切。

PS:要在某台机器上为某种语言构造一个编译程序,必须掌握以下三方面内容。
1.源语言,对被编译的语言要深刻的理解其结构和含义。
2.目标语言,假定目标语言是机器指令,那么就必须搞清楚硬件的系统结构和操作系统功能。
3.编译方法,把一种语言程序翻译成另一种语言的程序。

我作为一个抄书党,希望的是我个人能够把书中的每一个角落都看到并能产生自己的理解。
请大家多实践,多练习,效果会更好,一起努力,一起进步(๑•̀ㅂ•́)و✧