Program | ::= | ( TypeDecl )* ImportSt ( ExportTp )? ( SwitchCase )? <EOF> |
TypeDecl | ::= | <TYPE> Identifier "=" TypeExpr ";" |
ImportSt | ::= | <IMPORT> TypeExpr ";" |
ExportTp | ::= | <EXPORT> TypeExpr ";" |
SwitchCase | ::= | <SWITCH> "(" Identifier ")" "{" ( Case )* ( ( ( <CASEDEFAULT> ) ":" StatementList ) )? "}" |
Case | ::= | <CASE> TypeExpr ":" StatementList |
StatementList | ::= | ( "{" ( Statement )* "}" | ";" | Statement ) |
Statement | ::= | <PRINT> "(" ValueExpr ")" ";" |
ValueExpr | ::= | ( ValueTerm ( "," ValueTerm )* ) |
ValueTerm | ::= | ( ( Label "[" "]" ) | ( Label "[" ValueExpr "]" ) | ( Identifier ) | "(" ValueExpr ")" | "()" | Literal ) |
TypeExpr | ::= | ( CommaSeq ( "|" CommaSeq )* ) |
CommaSeq | ::= | ( UnaryOp ( "," UnaryOp )* ) |
UnaryOp | ::= | ( ( TermExpr ( ( ( "*" ) | ( "+" ) | ( "?" ) ) )? ) ( ( <AS> Identifier ) )? ) |
TermExpr | ::= | ( ( Label "[" "]" ) | ( Label "[" TypeExpr "]" ) | ( Identifier ) | "(" TypeExpr ")" | "()" | PrimitiveType | Literal ) |
Literal | ::= | ( <STRING_LITERAL> ) |
PrimitiveType | ::= | <STRING> |
Label | ::= | ( <ANYTAG> | <IDENTIFIER> ) |
Identifier | ::= | <IDENTIFIER> |