1 问题的提出
编译器设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语
法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序
列、变量名表、状态栈分析过程显示及四元式序列程序。整个编译程序分为三
部分:词法分析部分、语法分析处理及四元式生成部分、输出显示部分。
编译程序需要在单词级别上来分析和翻译源程序,所以首先要识别出单词,
而词法分析部分的任务是:从左至右扫描源程序的字符串,按照词法规则(正
则文法规则)识别出一个个正确的单词,并转换成该单词相应的二元式(种别
码、属性值)交给语法分析使用。因此,词法分析是编译的基础。执行词法分
析的程序称为词法分析器。
语法分析是编译程序的核心部分,其主要任务是确定语法结构,检查语法错误,
报告错误的性质和位置,并进行适当的纠错工作。
语法分析中主要以二元式作为输入部分,所以输出显示部分的任务是将二
元式通过 分析表对语法分析处理过程进行控制,使四元式翻译的工作有条
不紊的进行,同时识别语法分析中的语法错误。
1.1 词法分析器设计
词法分析是编制一个读单词的过程,从输入的源程序中,识别出各个具有
独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并
依次输出各个单词的内部编码及单词符号自身值。程序语言的单词符号一般分
为五种:关键字(保留字基本字)、、;标识符:常量名、变
量名…;常数:、、、‘、…;运算符:、、、、〈 、
、、…、;界限符:, ; ( ) ! 。
词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号
常常表示成以下的二元式"单词种别码,单词符号的属性值#。例如源程序为 $
语言。输入如下一段:
%"#
1