universal.ATG
No OneTemporary

File Metadata

Created
Wed, Jul 8, 7:59 AM

universal.ATG

#include "aux/universal.h"
COMPILER Universal
bool checkTokenAfterIdent(int key){
if (la->kind != _ident) return false;
return scanner->Peek()->kind == key;
}
bool checkAssignment()
{
return checkTokenAfterIdent(_assign);
}
CHARACTERS
letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".
digit = "0123456789".
any = ANY - '"'.
cr = '\r'.
lf = '\n'.
tab = '\t'.
TOKENS
string = '"' { any } '"'.
ident = (letter | '_') {letter | digit | '_'}.
assign = '='.
lp = '('.
rp = ')'.
tagcolon = "::".
COMMENTS FROM "/*" TO "*/" NESTED
COMMENTS FROM "//" TO lf
IGNORE cr + lf + tab
PRODUCTIONS
ArgList = lp { Expr [','] } rp.
Block = '{' '}'.
MetaExpr = ident [MetaArgList].
MetaArgList = lp { MetaExpr [','] } rp.
MetaExprList = {MetaExpr ';'}.
Expr =
ident (. send(std::wstring(L"Expr: ") + t->val); .)
[ArgList]
[tagcolon MetaExprList]
{ident Block} [Block]
.
Decl =
(IF(checkAssignment()) ident (. send(std::wstring(L"Decl: ") + t->val); .)
assign | )
Expr
.
Universal = {Decl ['.']} .
END Universal.

Event Timeline