Справочное руководство по языку Lua 5.1 :: 8 -



8 – Полный синтаксис Lua

Полный синтаксис Lua в расширенном BNF. (Не описывает приоритет операторов.)


     chunk ::= {stat [';']} [laststat [';']]

 

      block ::= chunk

 

      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 |

             for Name '=' exp ',' exp [',' exp] do block end |

             for namelist in explist1 do block end |

             function funcname funcbody |

             local function Name funcbody |

             local namelist ['=' explist1]

 

      laststat ::= return [explist1] | break

 

      funcname ::= Name {'.' Name} [':' Name]

 

      varlist1 ::= var {',' var}

 

      var ::=  Name | prefixexp '[' exp ']' | prefixexp '.' Name

 

      namelist ::= Name {',' Name}

 

      explist1 ::= {exp ','} exp

 

      exp ::=  nil | false | true | Number | String | '...' | function |

             prefixexp | tableconstructor | exp binop exp | unop exp

 

      prefixexp ::= var | functioncall | '(' exp ')'

 

      functioncall ::=  prefixexp args | prefixexp ':' Name args

 

      args ::=  '(' [explist1] ')' | tableconstructor | String

 

      function ::= function funcbody

 

      funcbody ::= '(' [parlist1] ')' block end

 

      parlist1 ::= namelist [',' '...'] | '...'

 

      tableconstructor ::= '{' [fieldlist] '}'

 

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

 

      field ::= '[' exp ']' '=' exp | Name '=' exp | exp

 

      fieldsep ::= ',' | ';'

 

      binop ::= '+' | '-' | '*' | '/' | '^' | '%' | '..' |

             '<' | '<=' | '>' | '>=' | '==' | '~=' |

             and | or

 

      unop ::= '-' | not | '#'