看lua直譯器源**的時候發現和lua官網上給的有點出入,自己記錄一下
官網的文件:直接在頁面搜尋bnf就行了
以下是從原始碼的注釋裡扣出來的,原始碼注釋有些地方寫的有點問題,可能是作者版本迭代的時候忘記改注釋了,幫作者改了一點
block -> statlist
statlist ->
fieldsel -> ['.' | ':'] name
index -> '[' expr ']'
constructor -> ' [sep] ] '}'
sep -> ',' | ';'
field -> listfield | recfield
recfield -> (name | '['exp1']') = exp1
listfield -> exp
body -> '(' parlist ')' block end
parlist -> [ param ]
param -> name | '...'
explist -> expr
funcargs -> '(' [ explist ] ')' | constructor | string
primaryexp -> name | '(' expr ')'
suffixedexp -> primaryexp
******exp -> flt | int | string | nil | true | false | ... | constructor | function body | suffixedexp
subexpr -> (******exp | unop subexpr)
assignment -> ',' suffixedexp assignment | '=' explist
cond -> exp
label -> '::' name '::'
whilestat -> while cond do block end
repeatstat -> repeat block until cond
forstat -> for (fornum | forlist) end
fornum -> name = exp1,exp1[,exp1] forbody
forlist -> name in explist forbody
forbody -> do block
stat -> local name ['=' explist] | return [explist]
| ';' (empty statement) | fistat | whilestat | do block end | forstat | repeatstat
| funstat | localstat | label | retstat | breakstat | 'goto' name | suffixedexp | assignment
ifstat -> if cond then block [else block] end
test_then_block -> [if | elseif] cond then block
funcname -> name [':' name]
funcstat -> function funcname body
Lua5 3遇到的坑
attempt to call a nil value global unpack 在lua 5.2和5.3的版本中,全域性的unpack函式已經被移除了,改為table.unpack,所以如果用到的第三方庫或者源 使用了unpack方法,可以在 前面加上 local unpack unpack o...
Lua5 3 虛擬機器指令分析(五)函式呼叫
op closure,a bx r a closure kproto bx ttcs mac mini opcode ttc cat top closure.lua function f1 end ttcs mac mini opcode ttc luac l l top closure.lua m...
SLua 中使用 Lua 5 3 的編譯工程
2016 03 05 更新 之前編譯的庫,在 android 下 lua number 和 lua integer 被編譯為了32位,導致從 c 到 lua 過程中有64位到32位整型轉換會出現溢位出錯,出現異常大的負整數。以下修改或是之前遺漏的部分均使用紅色表示。2016 11 21 更新 之前編...