自己动手写basic解释器
刺猬@http://blog.csdn.net/littlehedgehog
注: 文章basic解释源码摘自梁肇新先生的《编程高手箴言》(据他所说这个代码也是网上摘录的),源码解读参考《java编程艺术》。《java编程艺术》里面自然是java版了(可能旭哥更加适合点儿),我这里还是解读的C版basic解释器代码。
上次我们把程序装载入内存,这里我们开始做词法分析了。hoho~ 开始
一开始我们先再来回顾下:当我们的解释器在执行时,每次读入一条语句,并且根据这条语句执行特定的操作;然后再读入下一条语句,依此执行下去。也就是说解释器执行时,每次从程序的源代码中读入一个标识符。如果读入的是关键字,解释器就按照该关键字的要求执行规定的操作。举例来说,当解释器读入一个 PRINT后,它将打印PRINT之后的字符;当读入一个GOSUB时,它就执行指定的子程序。在到达程序的结尾之前,这个过程将反复进行。
按照上面的分析,我们所做的第一步就是要读取标识符,要一个单词一个数字的区分,比如print要作为一个关键字读入,2345要作为一个数字读入,而a=3这里要作为三个标识符读入,分别是变量a、赋值符号=以及数值3。看来我们在读取标识符时,我们还需要给标识符分类。
- #define DELIMITER 1 //分界符 比如逗号 分号 等号 都属于这之列
- #define VARIABLE 2 //变量
- #define NUMBER 3 //数字
- #define COMMAND 4 //关键字(命令)
- #define STRING 5 //字符串(这个比较特殊 既包括关键字 又包括常量字符串)
- #define QUOTE 6 //常量字符串 比如"hello world"
- /* get a token
- * 从basic源码中读取一个符号(token) 并且区分出符号类型
- * 我们把获取的符号放在token字符数组里面 在token_type中设置符号类型 在tok中设置