编译程序概述
功能
经过了四周的课程设计,我们完成了一个具有词法分析、语法分析、语义分析和中间代 码生成等的编译程序。对于词法分析,其功能是读入输入,识别单词符号和值;对于语法分 析,其功能是读入输入,在词法分析的基础上分析其句子组成;而对于语义分析和中间的代 码生成,其功能是读入输入,在语法分析的基础上产生中间代码。
完成内容:包括必做和选做的全部内容。
结构
对于完整的编译器,我们实现了其中的三个部分:词法分析,语法分析,语义分析和中间代码生成。其大致结构如上图所示。
词法分析器
功能
通过对输入的源程序进行词法分析,我们能够不断读取其中的字符,并根据单词符号表 来识别单词符号,并返回单词种别和属性值,返回值可留给后续的语法分析使用。
实现
全局变量
1. char ch = ' '; //存放最新读进的源程序字符
|
2. string strToken; //存放构成单词符号的字符串
|
3. string totalStr; //完整的输入串
|
4. int tmpStr = 0; //当前输入串扫描到的位置
|
5. string tmpID; //暂存标识符,供之后常量返回
|
单词符号
1. //单词符号
|
2. struct TOKEN
|
3. {
|
4.
|
|
int kind = 0;
|
|
|
//单词种别-整数编码
|
5.
|
|
string attribute
|
=
|
"-";
|
//单词属性
|
6.
|
};
|
|
|
|
|
对于单词符号,我们用一个结构体来表示它,在结构体中拥有两个变量,一个表示单词种别,一个表示单词属性,在词法分析后,返回的也是该单词符号结构体。在后续的内容中, 我将用 TOKEN 来代表该结构体。