编译程序工作的几个阶段包括:
- 词法分析(Lexical Analysis):也称为扫描(Scanning)或词法扫描(Lexical Scanning)。这个阶段的任务是从左到右一个字符一个字符地读入源程序,将其划分成一系列的记号(token)。每个记号由两部分组成,一个是记号本身,一个是记号的属性值(比如关键字、变量名、常量值、运算符等)。词法分析器输出的记号流中,除了包括程序中的各类记号外,还可能包括由源程序中的错误所产生的“错误”记号。
- 语法分析(Syntax Analysis):语法分析的任务是在词法分析的基础上将程序划分成一系列由语法单位组成的高级语法结构——语法树(Parse Tree)。语法分析器以记号流作为输入,输出是语法树。语法分析器不仅需要考虑语法规则,而且还要处理语法分析过程中出现的错误,并给出错误提示。
- 语义分析(Semantic Analysis):语义分析是对结构上正确的源程序进行上下文有关性质的审查,进行语义相关性检查,审查源程序是否真正有意义。语义分析器要对各类语义错误给出提示。
- 中间代码生成(Intermediate Code Generation):这个阶段的任务是根据语义分析的结果,生成中间代码。所谓中间代码是一种简单、含义明确的低级语言,这种语言接近于机器语言,并且与具体的机器语言无关。生成中间代码的目的是为了使后面的代码优化和代码生成阶段能够独立于具体的机器硬件平台。
- 代码优化(Code Optimization):代码优化是对中间代码进行变换,从而生成更有效的目标代码。代码优化不仅依赖于语言的语义,而且也与具体的机器硬件有关。
- 目标代码生成(Target Code Generation):这个阶段的任务是把中间代码变换成特定机器上的绝对指令代码,或可重定位的目标代码,或汇编指令代码。目标代码生成是编译过程的最后阶段。
请注意,虽然通常说编译过程有五个阶段,但在某些描述中可能不包括代码优化,或者将代码优化和目标代码生成合并为一个阶段。此外,以上描述的各个阶段也可能因为具体的编译器设计或目标平台而略有不同。
标签:代码生成,语法分析,记号,语义,编译,代码优化,阶段,原理,论述 From: https://www.cnblogs.com/yubo-guan/p/18011120