BNF for ASM for ATGT

NON-TERMINALS

ID ::= <ID>
IDT ::= <IDT>
VALUE ::= ( <IDT> | <ID> | <NUMBER> )
Input ::= ( declarations )? <EOF>
declarations ::= ( instanceTerm | varsDecls | ruleDecls | enumDecls | comment | parseExpression | consDecls )+
comment ::= ( "--" directive )
instanceTerm ::= ( <ID> <IDT> <IDT> )
directive ::= ( "@interval" "[" <NUMBER> "," <NUMBER> "]" | "@delta" <NUMBER> )
enumDecls ::= ( <DATA> IDT "=" IDT enumList )
enumList ::= ( "|" IDT )*
consDecls ::= ( ID "::" IDT ID "=" VALUE )
varsDecls ::= ( ID "::" <DYNAMIC> IDT ID "=" <INITVAL> "\"" <ID> "\"" VALUE )
ruleDecls ::= ( ID "::" <RULE> ID "=" IfStmt )
IfStmt ::= <IF> logicExpression <THEN> stmt <ELSE> stmt
stmt ::= ( ( <ASMSKIP> | ID ":=" logicExpression | IfStmt | <DO> ( stmt )+ ) )
parseExpression ::= <IF> logicExpression
logicExpression ::= andLogicExpr ( <OR> andLogicExpr )*
andLogicExpr ::= notExpr ( <AND> notExpr )*
notExpr ::= ( <NOT> logicElement | logicElement )
logicElement ::= mathExpression ( <EQ> mathExpression | <NEQ> mathExpression | <LT> mathExpression | <LE> mathExpression | <GT> mathExpression | <GE> mathExpression )?
mathExpression ::= mathTerm ( <PLUS> mathTerm | <MINUS> mathTerm )*
mathTerm ::= unary ( <MULT> unary | <DIV> unary )*
unary ::= <MINUS> mathElement
| mathElement
mathElement ::= ( <NUMBER> | ID | IDT | "(" logicExpression ")" )