源程序,简单的看成多行的字符串。
词法分析程序输出的“单词”常以二元组的方式输出,即单词种别和单词自身的值。
词法分析过程依据的是语言的词法规则,即描述“单词”结构的规则。
语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类语法单位,如“表达式”“语句”和“程序”等。
语法规则就是各类语法单位的构成规则。通过语法分析确定整个输入串是否构成语法上正确的程序。如果源程序中没有语法错误,语法分析后就能正确地构造出其语法树;否则指出语法错误,并给出相应地诊断信息。
词法分析和语法分析在本质上都是对源程序的结构进行分析。
语义分析阶段分析语法结构的含义,检查源程序是否包含静态语义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能翻译成正确的目标代码。
语义分析的一个主要工作是进行类型分析和检查。
中间代码生成阶段的工作是根据语义分析的输出生成中间代码。中间代码是一种简单且含义明确的记号系统,可以有若干种形式,它们的共同特征是与具体的机器无关。
代码优化,优化过程可以在中间代码生成阶段进行,也可以在目标代码生成阶段进行。
目标代码生成是编译器工作的最后一个阶段。这一阶段的任务是把中间代码变换成待定机器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密切相关。
符号表管理,符号表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。 出错处理
以中间代码为分水岭,把编译器分成了与机器有关地部分和与机器无关的部分。 对于编译过程的各个阶段,在逻辑上可以把它们划分为前端和后端两部分。前端包括从词法分析到中间代码生成各阶段的工作,后端包括中间代码优化和目标代码生成、优化等阶段。