词法分析
对于一个代码文件,词法分析的任务就是分析出每个独立的单词的类型。
编译原理中,每个单词称作token,词法分析即将字符流转变为token流。
例如,给定以下C语言代码:
int a = 123;
我们可以快速地分辨出
int:类型 a:变量名 =:操作符 123:常量 ;:关键字/操作符
现在我们可以定义出token类型
//token单词类型
enum token_type {
KEY, //关键词
VAR, //变量
FUNC,//函数
CON, //常量
OP, //操作符
};
为了存储token,我们还要建立一个token类
//每个token的属性
struct token {
token_type type; //token类型
string value; //token值
int line; //token行, 用于报错
};
和读取文本过程一样,我们将文本保存至字符串中处理,需要定义一个指针pc作为下标指向某个字符,还可以定义cur_line来记录当前行数
string text; //text用于读入和保存代码 int pc; //用于表示text下标 int cur_line; //记录当前解析到了哪一行 vector<token> tokens; //保存tokens流