The Complete Syntax of Lua

  1. chunk ::= {stat [`;´]}

  2. block ::= chunk

  3. stat ::= varlist1 `=´ explist1 | functioncall | do block end | while exp do block end | repeat block until exp | if exp then block {elseif exp then block} [else block] end | return [explist1] | break | for Name `=´ exp `,´ exp [`,´ exp] do block end | for Name {`,´ Name} in explist1 do block end | function funcname funcbody | local function Name funcbody | local namelist [init]

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

  5. varlist1 ::= var {`,´ var}

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

  7. namelist ::= Name {`,´ Name}

  8. init ::= `=´ explist1

  9. explist1 ::= {exp `,´} exp

  10. exp ::= nil | false | true | Number | Literal | function | prefixexp | tableconstructor | exp binop exp | unop exp

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

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

  13. args ::= `(´ [explist1] `)´ | tableconstructor | Literal

  14. function ::= function funcbody

  15. funcbody ::= `(´ [parlist1] `)´ block end

  16. parlist1 ::= Name {`,´ Name} [`,´ `...´] | `...´

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

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

  19. field ::= `[´ exp `]´ `=´ exp | name `=´ exp | exp

  20. fieldsep ::= `,´ | `;´

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

  22. unop ::= `-´ | not


Last update: Thu Feb 12 22:01:01 BRST 2015