[(stat [';'])+] [(return [exp {',' exp}] | break ) [';']]
var
{',' var} '=' exp {',' exp} | functioncall | repeat block until exp |
if exp then block [(elseif exp then block)+] [else block] end | [(for
(Name '=' exp ',' exp [',' exp]|Name {',' Name} in exp {',' exp})|while
exp)] do block end | function funcname funcbody | local function Name
funcbody | local (Name {',' Name}) ['=' exp {',' exp}]
funcname
Name {'.' Name} [':' Name]
var
Name | prefixexp '[' exp ']' | prefixexp '.' Name
nil | false | true | Number | String | '...' | function | prefixexp | tableconstructor | exp binop exp | unop exp
prefixexp
var | functioncall | '(' exp ')'
functioncall
prefixexp [ ':' Name] '(' [exp {',' exp}] ')' | tableconstructor | String
function
'function' funcbody
funcbody
'(' [parlist] ')' block end
parlist
namelist [',' '...'] | '...'
tableconstructor
'{' [([('[' exp ']' | Name) '='] exp (',' | ';'|''))+] '}'
binop
'+' | '-' | '*' | '/' | '^' | '%' | '..' | '<' | '<=' | '' | '=' | '==' | '~=' | and | or
unop
'-' | not | '#'