lua2.1 语法解析过程(1)
来源:互联网 发布:淘宝介入买家怎么举证 编辑:程序博客网 时间:2024/05/18 02:48
lua2.1的语法解析过程跟我们在课本上学到的“语法分析->抽象语法->中间代码”的前端过程不一样,可能作者考虑到lua自身本不复杂,或者并不需要支持多种后端分析器,所以省略了“抽象语法”和“中间代码”这个过程,直接可执行的字节码。
lua2.1是在lua.stx中描述语法解析过程,这个文件最终会被yacc使用并生成真正的的语法分析文件。由于yacc使用了自底向上的的解析方式,我们在分析lua2.1的语法解析的时候也就相应地使用以小见大的方式:优先先分析语法树的距离根节点远的节点。在开始之前我们先看一个结构:
这个结构的主要用途是在词法分析向语法分析器传值的时候使用,比如一个数字“1”,词法分析器发现它是一个数字,就会有这么一个过程:yylval.vFloat = (float)1;然后语法分析器会通过$n.vFloat取到值。
另外这个结构也会在语法分析过程中使用,它主要用于语法树的子结点向父节点传值的时候使用(父节点向子结点传值这种情况在
lua2.1中暂时没见着)。
YYSTYPE本质上是一个联合:
在使用vInt时,这个值一般表示是/否,也就是布尔值;在使用vFloat时一般表示数字的值;
在使用pChar的时候自不用解释,它是字符串,lua2.1的词法和语法分析过程中都没有用上(多余的?);
而使用vWord的时候就有点复杂了,lua2.1在碰到字符串比如“abc”的时候,会把这个字符串放到全局符号表中,并得到一个“常量”索引I,然后yylval.vWord = I,另外如果碰到一个关键字的话,vWord=(关键字在表上的关键字表上的索引);
vLong在词法分析过程中并没有用到,在语法解析过程中一般用于保存偏移值(字节码串上的偏移),在解析具有跳转过程的语句的
时候会用到,比如while语句;
pByte再词法分析的时候也没有用到,在语法分析的过程中表示一段可执行字节码,这个字段使用往往以为着有函数的定义(每个lua2.1函数都对应一段独立的字节码);
pNode在碰到一个非关键字的时候使用,在碰到一个非关键字的时候,lua2.1首先在全局符号表中查找(如果查找不到则分配)一个TreeNode节点并将其指针赋给pNode。
- lua2.1 语法解析过程(1)
- lua2.1 语法解析过程(2)
- lua2.1 语法解析过程(3)
- lua2.1 语法解析过程(4)
- lua2.1函数调用过程分析(完善中)
- lua2.2与lua2.1的对比
- lua2.1的文法
- lua2.1的指令笔记
- lua2.1垃圾回收机制
- lua2.1的错误处理机制笔记(编辑中)
- lua2.1 全局变量和局部变量(完善中)
- lua2.1的基本数据结构(有不确定的地方,请勿被误导)
- lua2.1 C操作lua的须知细节
- (1)jsp执行过程、语法
- DB2存储过程语法解析
- oracle 存储过程的基本语法(1)
- oracle学习之存储过程(1)语法
- 1、React Native 中ES6语法解析
- FireFox+Firebug+Yslow开发环境搭建
- window.print()打印指定区域
- 今天遇到的各个浏览器兼容问题
- javascript 中的typeof
- SQLServer和Oracle常用函数对比
- lua2.1 语法解析过程(1)
- CXF在jdk1.6中运行异常解决
- 一次数据访问层的改进之路(续一之分页篇)
- Ubuntu9.10版中QQ自动关闭解决方法
- http和https
- 细节备忘——时间戳和夏令时
- asp分页系统
- 禁止jQuery Load使用缓存的方法
- iPhone开发入门(6)— Action与Objective-C