• 9 – Lua 的完整语法

    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