C++:实现一个动态类型语言

发布时间 2023-04-04 11:03:09作者: karinto

词法分析

对于一个代码文件,词法分析的任务就是分析出每个独立的单词的类型。

编译原理中,每个单词称作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流