Lua源码解析之一:lexical

本文介绍了Lua源码解析的词法分析阶段,详细讲述了token的识别,包括数字、字符串、特殊字符和关键词。Lua的词法分析结合了简单的自顶向下分析法,同时进行语义分析和指令生成。文章还讨论了lua指令的结构,如6bit的指令码、8bit的操作数A、B和C,并解释了不同类型的操作数。最后,提到了Lua的寄存器概念和函数级别的解析执行方式。
摘要由CSDN通过智能技术生成

我们知道,任何高级一点的编译器,在解析源代码时,都需要进行词法分析。而词法分析的过程就是先识别token的一个过程,总体来说,lua里面的token大致分为:

1. 数字和字符串

2. 特殊字符:包括运算符和括号

3. 关键词

对于每一类token lua都有唯一的id与之对应,此id用int来表示,对于第2种类型,直接用该字符的ASCII码来表示,对于1,3两类,则定义一组枚举,为了与第2种区别开,枚举从257开始。比如关键字break 对应 TK_BREAK,do 对应 TK_DO。


先来看看luaX_next,它用来识别下一个token,会调用 llex 函数,返回token type和seminfo。有了token,接下来就会分析一条条的语句。

一个statementlist 的 production为: statlist -> { stat [`;'] } ,下面先将一个statement的grammer production列出:

stat = { ifstat | dostat | whilestat | functionstat | localstat | retstat | forstat | repeatestat | goto | breakstat  | exprstat }


以ifstat为例:

ifstat -> IF exprstat THEN statlist END

exprstat -> subexpr

subexpr ->(simpleexp | unop subexpr) { binop subexpr }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值