8 - The Complete Syntax of lua
Here is the complete syntax of lua in extended BNF. (It does not describe operator precedences.)
chunk ::= {stat [`<b>;</b>´]} [laststat [`<b>;</b>´]] block ::= chunk stat ::= varlist1 `<b>=</b>´ 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<b>=</b>´ exp
,´ exp [<b>,</b>´ exp] <b>do</b> block <b>end</b> | <b>for</b> namelist <b>in</b> explist1 <b>do</b> block <b>end</b> | <b>function</b> funcname funcbody | <b>local</b> <b>function</b> Name funcbody | <b>local</b> namelist [
=´ explist1]laststat ::= return [explist1] | breakfuncname ::= Name {`<b>.</b>´ Name} [`<b>:</b>´ Name] varlist1 ::= var {`<b>,</b>´ var} var ::= Name | prefixexp `<b>[</b>´ exp `<b>]</b>´ | prefixexp `<b>.</b>´ Namenamelist ::= Name {`<b>,</b>´ Name} explist1 ::= {exp `<b>,</b>´} exp exp ::= <b>nil</b> | <b>false</b> | <b>true</b> | Number | String | `<b>...</b>´ | function |
prefixexp | tableconstructor | exp binop exp | unop expprefixexp ::= var | functioncall |
<b>(</b>´ exp
)´functioncall ::= prefixexp args | prefixexp `<b>:</b>´ Name argsargs ::= `<b>(</b>´ [explist1] `<b>)</b>´ | tableconstructor | Stringfunction ::= <b>function</b> funcbody funcbody ::= `<b>(</b>´ [parlist1] `<b>)</b>´ block <b>end</b> parlist1 ::= namelist [`<b>,</b>´ `<b>...</b>´] | `<b>...</b>´ tableconstructor ::= `<b>{</b>´ [fieldlist] `<b>}</b>´ fieldlist ::= field {fieldsep field} [fieldsep] field ::= `<b>[</b>´ exp `<b>]</b>´ `<b>=</b>´ exp | Name `<b>=</b>´ exp | exp fieldsep ::= `<b>,</b>´ | `<b>;</b>´ binop ::= `<b>+</b>´ | `<b>-</b>´ | `<b>*</b>´ | `<b>/</b>´ | `<b>^</b>´ | `<b>%</b>´ | `<b>..</b>´ |
<b><</b>´ |
<=´ |<b>></b>´ |
>=´ |<b>==</b>´ |
~=´ |
and | orunop ::= `<b>-</b>´ | <b>not</b> | `<b>#</b>´
Last update: Mon Jun 5 17:05:27 BRT 2006