lua2.2与lua2.1的对比
来源:互联网 发布:新闻投稿知乎 编辑:程序博客网 时间:2024/04/30 23:40
文法解析方面:
1、在分析函数的时候我们需要将已经分析的指令保存起来,lua2.2提供了函数savemain和change2main来
保存和恢复(其实我觉得change2main如果取名为recovermain会更合适)。
2、添加非终结符globalstat:
globalstat -> stat sc | setdebug
3、取消非终结符method,添加funcname:
funcname -> var | varexp : name
4、表达式(expr)分析时$$的含义:
在lua2.1,分析非functioncall子产生式的时候,$$=1表示不需要在生成指令尾部添加字节(值为1),
$$=0表示需要添加,用来完成CALLFUNC np nr中的nr。但是在lua2.2中恰恰相反,当$$=0表示不需要添加,
当$$=off的时候,表示在当前指令字节串的第off个字节的位置1来实现nr。(因为在functioncall分析结束之后$$=pc)。
5、表的域:
表相关的产生式就添加了一个非总结符semicolonpart
产生式:
fieldlist -> lfieldlist semicolonpart
| ffieldlist1 lastcomma
semicolonpart -> null | ; ffiledlist
lastcomma -> null | ;
ffieldlist -> null | ffieldlist1 , lastcomma
ffieldlist1 -> ffield | ffieldlist1, ffield
ffield -> name = expr1
lfieldlist -> lfieldlist1 lastcomma
lfieldlist1 -> expr1 | lfieldlist , expr1
对比下来我们发现这部分代码变得更加友善,可读性相对2.1好了一点。
垃圾回收功能的修改:
1)在文法分析我们其实还忽略了一点那就是lua2.2中添加了“函数链表”,每个函数声明之后还后伴随一条PUSHFUNCTION的
指令产生,这个指令可在执行脚本的时候将这个函数注册到函数链表中。lua2.2花了这么多力气来做这些工作干嘛呢,主要是
为了在垃圾回收的过程中能对不再使用的函数进行回收。
2)lua2.2中使用的垃圾回收策略依然是“标记-清理”。
- lua2.2与lua2.1的对比
- lua2.4和lua2.2的对比
- lua2.5和lua2.4的对比
- lua2.1的文法
- lua2.1的指令笔记
- lua2.1 语法解析过程(2)
- lua2.1垃圾回收机制
- lua2.1的错误处理机制笔记(编辑中)
- lua2.1 C操作lua的须知细节
- lua2.1 语法解析过程(1)
- lua2.1 语法解析过程(3)
- lua2.1 语法解析过程(4)
- lua2.1的基本数据结构(有不确定的地方,请勿被误导)
- lua2.1函数调用过程分析(完善中)
- lua2.1 全局变量和局部变量(完善中)
- Lua2.4 保存字节码 dump.c
- Struts 2与Struts 1的对比
- Struts 2与Struts 1的对比
- Java类的初始化顺序
- 给大家推荐几本书~
- Windows apache下基于名字的虚拟主机配置
- C# Socket编程
- 诗一首
- lua2.2与lua2.1的对比
- 寂寞的味道 凯
- 系统调用
- Java中对象的生命周期
- 堆和栈的区别
- linux redhat4+oracle10g
- 联想电源管理
- 解决删除U盘时提示无法停止‘通用卷’设备的方法
- tomcat的端口占用问题解决