| 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 | ::= | IdExpr |
| | | RegExpExpr | |
| IdExpr | ::= | <ID> |
| RegExpExpr | ::= | "/" <REGEXP> "/" |