牧童

Lua Wiki

Based on Section 8 of the Lua 5.1 Reference Manual, including literal extensions for the FFI and selectively incorporated features from Lua 5.2.

chunk ::= {stat [`;´]} [laststat [`;´]]

block ::= chunk

stat ::=  varlist `=´ explist |
	 functioncall |
	 lua52_label |
	 `do´ block `end´ |
	 `while´ exp `do´ block `end´ |
	 `repeat´ block `until´ exp |
	 `if´ exp `then´ block {`elseif´ exp `then´ block} [`else´ block] `end´ |
	 `for´ Name `=´ exp `,´ exp [`,´ exp] `do´ block `end´ |
	 `for´ namelist `in´ explist `do´ block `end´ |
	 `function´ funcname funcbody |
	 `local´ `function´ Name funcbody |
	 `local´ namelist [`=´ explist]

laststat ::= `return´ [explist] | `break´ | lua52_goto

lua52_goto ::= `goto´ Name

lua52_label ::= ‘::’ Name ‘::’

funcname ::= Name {`.´ Name} [`:´ Name]

varlist ::= var {`,´ var}

var ::=  Name | prefixexp `[´ exp `]´ | prefixexp `.´ Name

namelist ::= Name {`,´ Name}

explist ::= {exp `,´} exp

exp ::=  `nil´ | `false´ | `true´ | numeric | String | `...´ | function |
	 prefixexp | tableconstructor | exp binop exp | unop exp

numeric ::= FFI_Int64 | FFI_Uint64 | FFI_Imaginary | Number

prefixexp ::= var | functioncall | `(´ exp `)´

functioncall ::=  prefixexp args | prefixexp `:´ Name args

args ::=  `(´ [explist] `)´ | tableconstructor | String

function ::= `function´ funcbody

funcbody ::= `(´ [parlist] `)´ block `end´

parlist ::= namelist [`,´ `...´] | `...´

tableconstructor ::= `{´ [fieldlist] `}´

fieldlist ::= field {fieldsep field} [fieldsep]

field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp

fieldsep ::= `,´ | `;´

binop ::= `+´ | `-´ | `*´ | `/´ | `^´ | `%´ | `..´ |
	 `<´ | `<=´ | `>´ | `>=´ | `==´ | `~=´ |
	 `and´ | `or´

unop ::= `-´ | `not´ | `#´