lua源码分析(局部变量的定义)

Lua 源码分析

----我要卖书赚钱

0节 一切从这里开始

         Lua是边进行语法分析,边词法分析。其中,词法分析的模块是:llex。其对外暴露的接口是:llex_next()。并且,在整个语法分析、词法分析的过程中,只有一个唯一的全局实例:llex_state

         在词法分析的过程中,lua会处理以下几种情况:

<1> ‘/r’, ‘/n’ 这两个东西的任意组合,是换行,lua直接跳过,其中是用inclinenumber(ls)这个函数跳过的。

<2> -- 或 –--[ ] 注释,lua也会跳过,不过,lua是通过把注释当作字符串读取后跳过的。

<3>[==[  ]==],中间是等量=的字符串,lua会读取字符串,通过read_long_string()。并返回:TK_STRING

<4> “ ”,‘ ’ 用引号引起来的字符串,lua会通过read_string()读取字符串。并返回:TK_STRING

<5> ==,等于号,这是lua的保留符号,返回:TK_EQ

<6> <,小于号,返回:TK_LT

<7> >,大于号,返回:TK_GT

<8> ~,返回~,如果下一个字符是=,如下:

<9> ~=,不等于号,返回:TK_NE

<10> . , 返回:’.’。

<11> .. , 返回:TK_DOTS

<12> … , 返回:TK_CONCAT

<13> .(0~9), 返回:TK_NUMBER,小数点+数字的形式

<14> EOZ , 返回:TK_EOS

<15> 如果是数字开头,则lua会读取数字,用函数read_numberal(),返回:TK_NUMBER

<16> 如果是字母开头或_开头,则为变量、函数名或保留字,lua会区别开来,分别返回保留字的标志或TK_NAME

<17> 如果是:+-*/等,lua会返回其ASCII码。

 

注:

1、如果遇到[=lua会假设这是一个长字符串,并检查其后面的=的数目,并且如果=后面没有紧跟着[,则报错。

2、有时候数字是小数,直接以.开始,如:.31415926lua会把这个当作一个数字,也就是TK_NUMBER类型。

3、 因为在不同国家,小数点可能不同,lua会检查到这种情况,并作处理。

4、 以下划线_开头的文字,lua会当作保留字处理。

5、 当lua读取一个字符串的时候,会新建一个TString类型的数据,并存在G(L)中,以便进行垃圾回收。

6、 保留字是lua预先建好的TString类型的字符串,在lua初始化的时候存在了G(L)中。

7、 在lua中,字符串是常量,所以,当在程序中用到相同的字符串的时候,lua会让他们指向同一个G(L)中的字符串,以便节省内存。

(2008-10-30)

 

 

第1章    lua是如何生成中间码的

lua会解释lua程序,然后生成

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值