/* * Tokens to ignore in the BNF follow. */ |
<DEFAULT> SKIP : {
" "
| "\t"
| "\r"
| "\n"
| "\f"
| <SINGLE1: "//" (~["\r","\n"])* ["\r","\n"]>
| <SINGLE2: "#" (~["\r","\n"])* ["\r","\n"]>
}
|
<DEFAULT> SPECIAL : {
<FORMAL: "/**" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/">
| <BLOCK: "/*" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/">
}
|
<DEFAULT> TOKEN : {
<BOOLEAN: "boolean">
| <BYTE: "byte">
| <CONST: "const">
| <DOUBLE: "double">
| <ENUM: "enum">
| <EXCEPTION: "exception">
| <EXTENDS: "extends">
| <EXTERN: "extern">
| <FALSE: "false">
| <FLOAT: "float">
| <INCLUDE: "include">
| <INT: "int">
| <LONG: "long">
| <MIXIN: "mixin">
| <MODULE: "module">
| <NULL: "null">
| <OBJECT: "object">
| <SERVICE: "service">
| <SHORT: "short">
| <STRING: "string">
| <STRUCT: "struct">
| <THROWS: "throws">
| <TRUE: "true">
| <VOID: "void">
| <ID: ["a"-"z","A"-"Z"] (["a"-"z","A"-"Z","0"-"9","_"])*>
| <QID: <ID> ("." <ID>)+>
| <#INT_LIT: ["1"-"9"] (["0"-"9"])*>
| <#SGN: (["-"])?>
| <INTEGER: <SGN> ("0" | <INT_LIT>)>
| <OCTAL: "0" (["0"-"7"])+>
| <HEX: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+>
| <BINARY: "0" ["b","B"] (["0"-"1"])+>
| <#EXP: ["e","E"] <INTEGER>>
| <#FRACTION: <SGN> "." (["0"-"9"])+>
| <DECIMAL: <INTEGER> ("." (["0"-"9"])*)? <EXP> | <INTEGER> "." (["0"-"9"])* (<EXP>)? | <FRACTION> (<EXP>)?>
| <STR: "\"" (~["\"","\\","\r","\n"] | "\\" ["\"","\\","r","n","t"] | "\\u" (["0"-"9","a"-"f","A"-"F"]){4,-1})* "\"">
| <AT: "@">
| <COMMA: ",">
| <EQ: "=">
| <SEMI: ";">
| <LPAREN: "(">
| <RPAREN: ")">
| <LBRACE: "{">
| <RBRACE: "}">
| <LBRACKET: "[">
| <RBRACKET: "]">
}
|
| module | ::= | module_stmt service |
| module_stmt | ::= | <MODULE> xid ( <SEMI> )? |
| service | ::= | opts <SERVICE> def <LBRACE> stmts <RBRACE> |
| opts | ::= | ( opt )* |
| opt | ::= | <AT> id ( <LPAREN> args <RPAREN> )? |
| args | ::= | arg ( <COMMA> arg )* |
| arg | ::= | ( cvalue | xid | <NULL> ) |
| cvalue | ::= | ( <TRUE> | <FALSE> | <INTEGER> | <OCTAL> | <HEX> | <BINARY> | <DECIMAL> | <STR> ) |
| stmts | ::= | ( opts ( mixin_stmt | include_stmt | const_stmt | enum_stmt | struct_stmt | extern_stmt | exception_stmt | message_stmt ) )* |
| mixin_stmt | ::= | <MIXIN> ref ( <SEMI> )? |
| include_stmt | ::= | <INCLUDE> <STR> ( <SEMI> )? |
| const_stmt | ::= | <CONST> ctype def <EQ> cvalue ( <SEMI> )? |
| enum_stmt | ::= | <ENUM> def <LPAREN> item_list <RPAREN> ( <SEMI> )? |
| item_list | ::= | def ( <COMMA> def )* |
| struct_stmt | ::= | <STRUCT> def params ( <EXTENDS> ref )? ( <SEMI> )? |
| extern_stmt | ::= | <EXTERN> def ( <SEMI> )? |
| exception_stmt | ::= | <EXCEPTION> def params ( <EXTENDS> ref )? ( <SEMI> )? |
| message_stmt | ::= | rtype def params ( <THROWS> throws_list )? ( <SEMI> )? |
| throws_list | ::= | ref ( <COMMA> ref )* |
| id | ::= | <ID> |
| qid | ::= | <QID> |
| xid | ::= | ( qid | id ) |
| def | ::= | id |
| ref | ::= | xid |
| ctype | ::= | ( <BOOLEAN> | <BYTE> | <SHORT> | <INT> | <LONG> | <FLOAT> | <DOUBLE> | <STRING> ) |
| ptype | ::= | ( ctype | <OBJECT> | ref ) |
| rtype | ::= | ( ( ptype dim ) | <VOID> ) |
| dim | ::= | ( <LBRACKET> <RBRACKET> )* |
| params | ::= | <LPAREN> ( param ( <COMMA> param )* )? <RPAREN> |
| param | ::= | ptype dim def |