歪理更新
收集到每个记号的同时应该区分一下,尽可能的多积累一点信息,比如”while”跟”add”肯定是有区别的,在定义链表节点的时候最好能反映出这种区别:
struct _TOKEN
{
int iTType; // 记号具体类型
int iTTypex; // 记号模糊类型
int iLine; // 记号所在行
char *pStr; // 记号字符串
_TOKEN *pNext; // 下一个记号
};
数字总是比字符串容易处理,iTType就是要把”for”与数字200对应起来,把”+”与数字43对应起来,我们把他们定义成宏,选几个典型的列出来:
#define TT_ADD 43 // +
#define TT_FOR 200 // for
#define TT_INT 250 // int
#define TT_NAME 300 // 变量名或函数名,因为现在还无法区别
#define TT_CONST 301 // 常数
“for”与”+”是有区别的,iTTypex就是要反映这种区别,也选典型的列出来:
#define TTEX_OP 1 // 运算符(+,-,>>,...)
#define TTEX_OPP 2 // 运算参数(变量,函数,常数)
#define TTEX_KW 3 // 保留字(if,while,...)
#define TTEX_DT 4 // 数据类型(int,void,...)
收集到一个记号的时候,就顺便把记号的iTType和iTTypex求出来,做到这点应该是很容易的.也许你还想支持”typedef”,”define”,”include”.建议第一次写不要去支持,编译器写完后可以再考虑这些问题.
注:读者自己应该知道记号链表怎么定义,我还是把我的思路写出来了,我想:能让读者用眼睛就能看明白最好,何必让他用脑子去想呢?
写程序的人应该都很注重代码的效率,如今cpu运行速度已经够快了,代码效率问题已经淡化了,为什么大家还这么重视效率呢?程序员在这点上都很明理,都知道cpu是为用户工作的,而不是给程序员去浪费的.那么写书的作者呢?作者该做的事情是把书尽量写好,尽量多为读者做一点,反正写都写了.
写教程的人不同,可以随意发挥.这里说明一下,以免误会.
