以下是 llex.h
的代码,这个文件定义了一些词法分析用到的结构。其中重点是 LexState
这个结构,
在 llex.c
开头,定义了 next
, save
和 save_and_next
这些读取字符的方法跟宏。luaX_tokens
是记录关键字的数组,在报错的时候会用到。
luaX_init
这个方法应该是最简单的方法了,初始化词法分析的东西,就是生成 LUA_ENV
跟关键字的 TString
,将关键字的 extra 设置上。
luaX_setinput
这个方法设置词法分析的输入,其实主要就是用之前的看的 lzio.c
的库,另外还是设置了 LexState *ls
的属性,这个方法会在 parser 里面调用到。这里的 firstchar
是一开始读进的,parser 需要判断是否是机器码。
luaX_newstring
生成一个字符串 TString
,为了避免被回收,把它加到 LexState *ls
的 h
里面。
luaX_next
读取一个 token,记录到 LexState *ls
的 t
里面。
inclinenumber
增加 LexState *ls
的 linenumber
。
luaX_lookahead
方法向前读多一个 token。