Lua

The LuaJIT Wiki

not logged in | [Login]

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´ | `#´