tktable保存单词 但要是找是否存在单词就得一个个遍历不方便
于是有了 tk_hashtable表 根据单词各个字母的ascll码值 用ELF_hash函数
找到相应表中位置,省去了遍历
tktable是用来保存单词,tk_hashtable是用来查询单词
词法分析初始化的时候
就把已定义的关键字和标点符号存于单词表
词法分析主程序
第一步就进行预处理
忽略掉空白字符,和制表符,换行符及注释
windows下文件换行符由 两个字符组成
\r\n
这个需要特别注意
解析标识符时
把标识符插入单词表tktable
用单词字符串tkstr存一下这个标识符拼写
用token 存一下 这个标识符的编码
编码就是 保存这个标识符的单词 在单词表tktable中位置
比如 int x1;
解析到x1
tkstr.data就存了 x1
token 存了x1在单词表中的位置
解析数字时
不用把数字插入单词表tktable
只是用 tkvalue存了一下这个数字的值
然后用 tkstr和sourcestr存了一下这个数字
并把 token 值设置为 TK_CINT
解析别的运算符 比如 '+' '-'
都只是把token 设置成相应的 枚举值
然后就取下一个字符了
解析字符或字符串时
当取到 ' 或 "
因为字符是 '开头
字符串是 " 开头
就进行字符和字符串解析
tkstr存这个字符或字符串的拼写
把引号省略了
sourcestr则连引号也存
token值
字符取TK_CCHAR
字符串TK_CSTR
tkvalue 字符取相应的ascll码值
字符串不进行操作
sourcestr用在 get_tkstr(int v)函数
v 一般就是取 token值,就是当前的单词在单词表中编码位置
进行错误提示用 或 词法着色
返回 单词的拼写