| Start | ::= | Imports ( Exp )* <EOF> |
| Imports | ::= | ( Import )* |
| Import | ::= | <IMPORT> IdExpr ( ".*" )? |
| Exp | ::= | OrExpr |
| | | NegExpr | |
| | | <LPAREN> Exp <RPAREN> | |
| NegExpr | ::= | <BANG> Exp |
| OrExpr | ::= | ( AndExpr ( <OR> AndExpr )* ) |
| AndExpr | ::= | ( LitExpr ( <AND> LitExpr )* ) |
| LitExpr | ::= | ReturnsExpr |
| | | ArgExpr | |
| | | ThrowsExpr | |
| | | NameExpr | |
| | | TrueExpr | |
| | | FalseExpr | |
| TrueExpr | ::= | <TRUE> |
| FalseExpr | ::= | <FALSE> |
| ReturnsExpr | ::= | <RETURNS> TypeExpr |
| ArgExpr | ::= | <ARG> TypeExpr |
| ThrowsExpr | ::= | <THROWS> TypeExpr |
| NameExpr | ::= | <NAME> IdExpr |
| TypeExpr | ::= | "(" SimpleTypeExpr ")" |
| | | SimpleTypeExpr | |
| SimpleTypeExpr | ::= | IdExpr |
| | | RegExpExpr | |
| IdExpr | ::= | "(" SimpleIdExpr ")" |
| | | SimpleIdExpr | |
| SimpleIdExpr | ::= | <ID> |
| RegExpExpr | ::= | "/" <REGEXP> "/" |