错误管理
词法错误:如5x,256
语法错误:如x=(A*(B+C)+1
语义错误:i、静态语义错误:上下文有关的语法错误
Ii、动态语义错误:下标超界、对负值开方等。
表格管理:收集、记录和查询编译中需要的各种信息。如:常量表,标识符表,数组信息表等。
编译程序的分辨问题
遍:对源程序或对其内部表示从头到尾扫视一遍
编译程序与应用程序的区别:
编译程序操作的对象:程序
应用程序操作的对象:数据
元级操作:把程序作为操作对象的操作。LISP完全支持元级操作
元程序:含有元级操作的程序
元级程序设计:元程序的编写
编译程序的复杂性:
工作量大:编译程序是元级程序,每种元级程序必须做词法分析,语法分析,语义分析和内部表示构造。
高级语言向低级语言转化的难度大。
编译程序的设计实现
设计编译程序应考虑:可移植性,可维护性,可扩展性
编译程序的性能:编译的可靠性,编译速度,目标代码的运行速度,空间节省等
设计编译程序的过程:确定编译程序的组织结构和各部分的功能,方案
编译器中的主要数据结果:记号(token),语法树(
编译工具的选择:汇编(缺点明显,对机器的依赖性强);已有编译程序的高级语言;自动化系统(词法分析的工具,语法分析工具)
开发编译程序的几种可能的途径:预处理法(C语言中的#include、宏);移植法(假设在A机上已有L语言的编译程序,想在B机上开发的一个L语言的编译程序。I、直接转换:将L语言编译程序的A机代码直接转化成B机代码;ii、交叉编译:在A机产生B机目标代码;iii、自展法:;工具发:专门为编译程序开发服务的软件工具,自动生成器。(词法分析程序的自动生成器(LEX)语法分析程序的自动生成器(YACC));理论法)。
编译程序的测试与维护
测试:
理想的测试:机械地验证编译程序是否正确地实现了给定高级语言到给定目标机代码的转化
实际的测试:采用回归测试法,以保证可靠性的单调性。
LINIX下的make(自动测试命令)当编译程序有改动是,将分别用新老编译程序版本重新编译测试程序,所产生的目标程序的任何不同,都表示有问题,将其报告编者
穷举测试集:使编译器中的每个语句至少执行一次。
维护: