9 – Lua 的完整语法

这是一份采用扩展 BNF 描述的 Lua 完整语法。 在扩展 BNF 中, {A} 表示 0 或多个 A , [A] 表示一个可选的 A 。 (操作符优先级,参见 §3.4.8; 对于最终符号,名字,数字,字符串字面量的解释,参见 §3.1。)

  1.  
  2. chunk ::= block
  3.  
  4. block ::= {stat} [retstat]
  5.  
  6. stat ::= ; |
  7. varlist = explist |
  8. functioncall |
  9. label |
  10. break |
  11. goto Name |
  12. do block end |
  13. while exp do block end |
  14. repeat block until exp |
  15. if exp then block {elseif exp then block} [else block] end |
  16. for Name = exp , exp [‘, exp] do block end |
  17. for namelist in explist do block end |
  18. function funcname funcbody |
  19. local function Name funcbody |
  20. local namelist [‘= explist]
  21.  
  22. retstat ::= return [explist] [‘;’]
  23.  
  24. label ::= :: Name ::
  25.  
  26. funcname ::= Name {‘. Name} [‘: Name]
  27.  
  28. varlist ::= var {‘, var}
  29.  
  30. var ::= Name | prefixexp [ exp ] | prefixexp . Name
  31.  
  32. namelist ::= Name {‘, Name}
  33.  
  34. explist ::= exp {‘, exp}
  35.  
  36. exp ::= nil | false | true | Numeral | LiteralString | ... | functiondef |
  37. prefixexp | tableconstructor | exp binop exp | unop exp
  38.  
  39. prefixexp ::= var | functioncall | ( exp )
  40.  
  41. functioncall ::= prefixexp args | prefixexp : Name args
  42.  
  43. args ::= ( [explist] ) | tableconstructor | LiteralString
  44.  
  45. functiondef ::= function funcbody
  46.  
  47. funcbody ::= ( [parlist] ) block end
  48.  
  49. parlist ::= namelist [‘, ...’] | ...
  50.  
  51. tableconstructor ::= { [fieldlist] }
  52.  
  53. fieldlist ::= field {fieldsep field} [fieldsep]
  54.  
  55. field ::= [ exp ] = exp | Name = exp | exp
  56.  
  57. fieldsep ::= , | ;
  58.  
  59. binop ::= + | - | * | / | //’ | ‘^’ | ‘%’ |
  60. & | ~ | | | >> | << | .. |
  61. < | <= | > | >= | == | ~= |
  62. and | or
  63.  
  64. unop ::= - | not | # | ~
  65.  

最后更新时间: 2015年1月18日19:54