| Specification | ::= | ( Require )* ( Import )* ( Package )* <EOF> |
| Require | ::= | <T_REQUIRE> ScopedIdentifier <T_VERSION> ( <T_INTEGER> | <T_VERSION_STRING> ) <T_SEMICOLON> |
| Import | ::= | <T_IMPORT> ScopedIdentifier ( <T_VERSION> ( <T_INTEGER> | <T_VERSION_STRING> ) )? <T_SEMICOLON> |
| Package | ::= | ( <T_FINAL> )? <T_PACKAGE> ScopedIdentifier ( <T_VERSION> ( <T_INTEGER> | <T_VERSION_STRING> ) )? <T_OPEN_CURLY> ( Definition )* <T_CLOSE_CURLY> ( <T_SEMICOLON> )? |
| Definition | ::= | ( Class | Enum | Interface | Package ) |
| Class | ::= | ( <T_ABSTRACT> )? <T_CLASS> Identifier ( <T_EXTENDS> ScopedIdentifier )? ( <T_IMPLEMENTS_ALL> AddInterface ( <T_COMMA> AddInterface )* )? ( <T_IMPLEMENTS> AddInterface ( <T_COMMA> AddInterface )* )? <T_OPEN_CURLY> ( ClassMethod )* <T_CLOSE_CURLY> ( <T_SEMICOLON> )? |
| Enum | ::= | <T_ENUM> Identifier <T_OPEN_CURLY> Enumerator ( <T_COMMA> Enumerator )* ( <T_COMMA> )? <T_CLOSE_CURLY> ( <T_SEMICOLON> )? |
| Enumerator | ::= | Identifier ( <T_EQUALS> <T_INTEGER> )? |
| Interface | ::= | <T_INTERFACE> Identifier ( <T_EXTENDS> AddInterface ( <T_COMMA> AddInterface )* )? <T_OPEN_CURLY> ( InterfaceMethod )* <T_CLOSE_CURLY> ( <T_SEMICOLON> )? |
| AddInterface | ::= | ScopedIdentifier |
| ClassMethod | ::= | ( ( <T_ABSTRACT> | <T_FINAL> | <T_STATIC> ) )? Method |
| InterfaceMethod | ::= | Method |
| Method | ::= | ( <T_VOID> | ( <T_COPY> )? Type ) Identifier ( <T_IDENTIFIER> )? <T_OPEN_PAREN> ( Argument ( <T_COMMA> Argument )* )? <T_CLOSE_PAREN> ( <T_LOCAL> | <T_ONEWAY> )? ( <T_THROWS> ScopedIdentifier ( <T_COMMA> ScopedIdentifier )* )? <T_SEMICOLON> |
| Argument | ::= | ( <T_COPY> )? ( <T_IN> | <T_OUT> | <T_INOUT> ) Type Identifier |
| Type | ::= | ( <T_BOOLEAN> | <T_CHAR> | <T_DCOMPLEX> | <T_DOUBLE> | <T_FCOMPLEX> | <T_FLOAT> | <T_INT> | <T_LONG> | <T_OPAQUE> | <T_STRING> | Array | SymbolType ) |
| Array | ::= | <T_ARRAY> <T_OPEN_ANGLE> Type ( <T_COMMA> ( <T_INTEGER> ( <T_COMMA> ( <T_COLUMN_MAJOR> | <T_ROW_MAJOR> ) )? | ( <T_COLUMN_MAJOR> | <T_ROW_MAJOR> ) ) )? <T_CLOSE_ANGLE> |
| SymbolType | ::= | ScopedIdentifier |
| ScopedIdentifier | ::= | Identifier ( <T_SCOPE> Identifier )* |
| Identifier | ::= | <T_IDENTIFIER> |