Lako
EBNF
Not logged in

Differences from Lua are underlined.


chunk ::= block

block ::= {stat} [retstat]

stat ::=  ‘;’ | 
	 varlist ‘=’ explist | 
         var compassignop exp |
	 functioncall | 
	 label | 
	 break | 
	 goto Name | 
	 do block end | 
	 while exp [do] block end | 
	 repeat block until exp | 
	 if exp [then] block {elif exp [then] block} [else block] end | 
	 for Name ‘=’ exp ‘,’ exp [‘,’ exp] [do] block end | 
	 for namelist in explist [do] block end | 
	 fun funcname funcbody | 
	 let fun Name funcbody | 
	 let namelist [‘=’ explist] 

retstat ::= return [explist] [‘;’]

label ::= ‘::’ Name ‘::’

funcname ::= Name {‘.’ Name} [‘:’ Name]

varlist ::= var {‘,’ var}

var ::=  Name | prefixexp ‘[’ exp ‘]’ | prefixexp ‘.’ Name 

namelist ::= Name {‘,’ Name}

explist ::= exp {‘,’ exp}

exp ::=  nil | false | true | Number | String | ‘...’ | functiondef | 
	 prefixexp | tableconstructor | exp binop exp | unop exp 

prefixexp ::= var | functioncall | ‘(’ exp ‘)’

functioncall ::=  prefixexp args | prefixexp ‘:’ Name args 

args ::=  ‘(’ [explist] ‘)’ | tableconstructor | String 

functiondef ::= fun funcbody

funcbody ::= ‘(’ [parlist] ‘)(block end | ‘=>’ (exp | ‘(’ explist ‘)’))

parlist ::= namelist [‘,’ ‘...’] | ‘...’

tableconstructor ::= ‘{’ [fieldlist] ‘}’

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

field ::= ‘[’ exp ‘]’ ‘=’ exp | Name ‘=’ exp | String ‘=’ exp | exp

fieldsep ::= ‘,’ | ‘;’

binop ::= ‘+’ | ‘-’ | ‘*’ | ‘/’ | ‘^’ | ‘%’ | ‘..’ | 
	 ‘<’ | ‘<=’ | ‘>’ | ‘>=’ | ‘==’ | ‘~=’ | !=
	 and | or

compassignop ::= ‘+=’ | ‘-=’ | ‘*=’ | ‘/=’ | ‘%=

unop ::= ‘-’ | not | ‘#