BNF for SIDL 0.8.2

NON-TERMINALS

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>