编译程序的工作过程可以划分成五个阶段:
词法分析语法分析语义分析和中间代码生成代码优化目标代码生成 从左到右一个字符一个字符的读入源程序,堆构成源程序的字符串进行扫描和分解,识别出其中的一个一个单词(也可以是符号).
在词法分析的基础上组成各种语法短语.
在语法分析确定出语法短语后,审查有无语义错误,并为代码生成收集类型信息(类型检查,变量是否声明,类型是否一致,变量会是否有值等).
完成语法分析和予以处理工作后,编译程序将源程序变成一种内部表示形式(如Java中的字节码文件中的字节码指令).
编译原理课程中通常是四元式或者三元式:
四元式的形式为(运算符, 运算对象1, 运算对象2, 结果)
为了使生成的目标代码更高效,可以对产生的中间代码进行变换或者进行改造.
目标代码生成阶段的任务就是把中间代码变换成特定机器上的绝对指令代码(机器语言)或可重定位的指令代码或者汇编代码.
编译程序中记录的源程序的各种信息保存在符号表中,被称为符号表.
符号表主要的作用:
收集符号的属性信息作为语法的合法性检查的依据