lua虚拟机的整体结构

lua虚拟机的实现(虚拟机的整体结构)

1.文本加载器

文本加载器包含加载脚本及脚本语义解析的功能,lua的文本加载器由lua lexstate进行处理。
lua语法支持语义关键字为:and, break, do, else, elseif, end, false, for, function,
goto, if, in, local, nil, not, or, repeat, return, then, true, until, while。
lua特殊语义子符为://, …, …, ==, >=, <=, ~=,<<, >>, ::, , , , , 。
语义信息的抽象结构为

	typedef union {
   
		lua_Number r;  //浮点值
		lua_Integer i; //整型值
		TString *ts;  //字符型(对象和字符串等)
	}
语义与含义绑定结构(Token)
	typedef struct Token {
   
		int token;
		SemInfo seminfo;
	} Token
lua语义解析状态机- LexState
	typedef struct LexState {
   
		int current;
		int linenumber;
		int lastline;
		Token t;
		Token lookahead;
		struct FuncState *fs;
		struct lua_State *L;
		ZIO *z;
		Mbuffer *buff;
		Table *h;
		struct Dyndata *dyd;
		TString *source;
		TString *envn;
	} LexState

2.文本解析器

虚拟机的脚本解析器有lparser进行处理,lparser负责加载和读取解析脚本, 对脚本中的语法错误进行处理。对于正确的脚本,lparser会生成相应的字节码用于脚本功能的执行。
lparser将脚本抽象为表达式,局部变量,跳转,动态结构和lua函数作为脚本功能的组合。
这几种组合包含了所有可能的脚本处理内容。下面是这几种结构和功能的解释。

表达式
表达式类型约定  
	typedef enum {
   
		VVOID,  //空
		VNIL,    //nil
		VTRUE,  //常量true
		VFALSE,  //常量false
		VK,        //
		VKFLT,   //浮点数
		VKINT,   //整型
		VNONRELOC,  //确定的值
		VLOCAL,  //局部变量
		VUPVAL,   //upvalue变量
		VINDEXED,  //可索引的变量
		VJMP,     //用于指令跳转
		VRELOCABLE,  //可保存至任意的register中的变量
		VCALL,      //用于函数调用
		VVARARG		
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值