12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485moduletypeS=sigmoduleValue:Luavalue.Stypevalue=Value.valuetypename=stringtypevarargs=booltypefuncargs=namelist*varargstypelocation=int(* character position *)typestmt=|Stmt'oflocation*stmt|Assignoflvallist*explist|WhileDoofexp*block|RepeatUntilofblock*exp|Ifofexp*block*(exp*block)list*blockoption|Returnofexplist|Callstmtofcall|Localofnamelist*explistandblock=stmtlistandlval=|Lvarofname|Lindexofexp*expandexp=|Varofname|Litofvalue|Binopofexp*op*exp|Unopofop*exp|Indexofexp*exp|Tableofexplist*(name*exp)list|Callofcallandcall=|Funcallofexp*explist|Methcallofexp*name*explistandop=And|Or|Lt|Le|Gt|Ge|Eq|Ne|Concat|Plus|Minus|Times|Div|Mod|Not|Powtypechunk=|Debugofbool(* turn debugging on/off *)|Statementofstmt|Fundefoflocation*lval*funcargs*block|Methdefoflocation*exp*name*funcargs*blockendmoduleMake(V:Luavalue.S):SwithmoduleValue=V=structmoduleValue=Vtypevalue=Value.valuetypename=stringtypevarargs=booltypefuncargs=namelist*varargstypelocation=int(* character position *)typestmt=|Stmt'oflocation*stmt|Assignoflvallist*explist|WhileDoofexp*block|RepeatUntilofblock*exp|Ifofexp*block*(exp*block)list*blockoption|Returnofexplist|Callstmtofcall|Localofnamelist*explistandblock=stmtlistandlval=|Lvarofname|Lindexofexp*expandexp=|Varofname|Litofvalue|Binopofexp*op*exp|Unopofop*exp|Indexofexp*exp|Tableofexplist*(name*exp)list|Callofcallandcall=|Funcallofexp*explist|Methcallofexp*name*explistandop=And|Or|Lt|Le|Gt|Ge|Eq|Ne|Concat|Plus|Minus|Times|Div|Mod|Not|Powtypechunk=|Debugofbool(* turn debugging on/off *)|Statementofstmt|Fundefoflocation*lval*funcargs*block|Methdefoflocation*exp*name*funcargs*blockend