|
关于Basic程序解释器及编译原理的简单化(1)---Basic器的语法分析及主要代码(1)
这就是Basic解释器的主代码,其中用到上节讲的词法提取get_token()和代数式求值get_eXP(int *result)函数. 这一节的代码更简单,就是随心所欲地将得到的token组装. 譬如在get_token后如果token装PRINT,你就调用一次get_token将下一个token答应出来就是了,很简单的,或许你自己也能搞定的. 在下一节你,我会给你完整的C++封装好了的源代码. /* A tiny BASIC interpreter */ #include <stdio.h> #include <setjmp.h> #include <math.h> #include <ctype.h> #include <stdlib.h> #define NUM_LAB 100 #define LAB_LEN 10 #define FOR_NEST 25 #define SUB_NEST 25 #define PROG_SIZE 10000 #define DELIMITER 1 #define VARIABLE 2 #define NUMBER 3 #define COMMAND 4 #define STRING 5 #define QUOTE 6 #define PRINT 1 #define INPUT 2 #define IF 3 #define THEN 4 #define FOR 5 #define NEXT 6 #define TO 7 #define GOTO 8 #define EOL 9 #define FINISHED 10 #define GOSUB 11 #define RETURN 12 #define END 13 char *prog; /* holds expression to be analyzed */ jmp_buf e_buf; /* hold environment for longjmp() */ int variables[26]= { /* 26 user variables,A-Z */ 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0 }; strUCt commands { /* keyWord lookup table */ char command[20]; char tok; } table[] = { /* command must be entered lowercase */ "print",PRINT, /* in this table */ "input",INPUT, "if",IF, "then",THEN,
|