lua词法分析原理介绍
目录
一、内部实现
(a)lua保留字
(b)LexState结构介绍
(c)Token词法但愿
(d)llex:词法分析
(e)关于注释的一些想法
二、可优化方向
(a)continue和其他关键字实现
(b)lua底层编译加密
(c)细节优化
(d)调整保留字顺序加密
一、内部实现
(a)lua保留字
在这里存储了全部的lua保留字,存储在luaX_token里,这里存储的是tokens
static const char *const luaX_tokens [] = {
"and", "break", "do", "else", "elseif",
"end", "false", "for", "function", "goto", "if",
"in", "local", "nil", "not", "or", "repeat",
"return", "then", "true", "until", "while",
"..", "...", "==", ">=", "<=", "~=", "::", "<eof>",
"<number>", "<name>", "<string>"
};
(b)LexState结构介绍
typedef struct LexState {
int current; 当前读入的字符(char/int)
int linenumber; 输入的行的计数器
int lastline; 上一个行
Token t; 当前对比token
Token lookahead; lookahead Token
struct FuncState *fs; FuncState 解析器私有值
struct lua_State *L; lua_State虚拟机全局状态机,这里不做深入介绍了
ZIO *z; 这里可以通过lzio.h看出,这里是字符流,通过这里读取输入的字符流
Mbuffer *buff; tokens的流存储器
stru