| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> |
| <!-- |
| * Licensed to the Apache Software Foundation (ASF) under one * |
| * or more contributor license agreements. See the NOTICE file * |
| * distributed with this work for additional information * |
| * regarding copyright ownership. The ASF licenses this file * |
| * to you under the Apache License, Version 2.0 (the * |
| * "License"); you may not use this file except in compliance * |
| * with the License. You may obtain a copy of the License at * |
| * * |
| * http://www.apache.org/licenses/LICENSE-2.0 * |
| * * |
| * Unless required by applicable law or agreed to in writing, * |
| * software distributed under the License is distributed on an * |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * |
| * KIND, either express or implied. See the License for the * |
| * specific language governing permissions and limitations * |
| * under the License. * |
| --> |
| <HTML> |
| <HEAD> |
| <TITLE>BNF for EtchGrammar.jj</TITLE> |
| </HEAD> |
| <BODY> |
| <H1 ALIGN=CENTER>BNF for EtchGrammar.jj</H1> |
| <H2 ALIGN=CENTER>TOKENS</H2> |
| <TABLE> |
| <!-- Special token --> |
| <TR> |
| <TD> |
| <PRE> |
| /* |
| * Tokens to ignore in the BNF follow. |
| */</PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> SKIP : { |
| " " |
| | "\t" |
| | "\r" |
| | "\n" |
| | "\f" |
| | <SINGLE1: "//" (~["\r","\n"])* ["\r","\n"]> |
| | <SINGLE2: "#" (~["\r","\n"])* ["\r","\n"]> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <DEFAULT> SPECIAL : { |
| <FORMAL: "/**" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/"> |
| | <BLOCK: "/*" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/"> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| <!-- Token --> |
| <TR> |
| <TD> |
| <PRE> |
| <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: "]"> |
| } |
| |
| </PRE> |
| </TD> |
| </TR> |
| </TABLE> |
| <H2 ALIGN=CENTER>NON-TERMINALS</H2> |
| <TABLE> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod1">module</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod2">module_stmt</A> <A HREF="#prod3">service</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod2">module_stmt</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><MODULE> <A HREF="#prod4">xid</A> ( <SEMI> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod3">service</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod5">opts</A> <SERVICE> <A HREF="#prod6">def</A> <LBRACE> <A HREF="#prod7">stmts</A> <RBRACE></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod5">opts</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod8">opt</A> )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod8">opt</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><AT> <A HREF="#prod9">id</A> ( <LPAREN> <A HREF="#prod10">args</A> <RPAREN> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod10">args</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod11">arg</A> ( <COMMA> <A HREF="#prod11">arg</A> )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod11">arg</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod12">cvalue</A> | <A HREF="#prod4">xid</A> | <NULL> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod12">cvalue</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <TRUE> | <FALSE> | <INTEGER> | <OCTAL> | <HEX> | <BINARY> | <DECIMAL> | <STR> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod7">stmts</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod5">opts</A> ( <A HREF="#prod13">mixin_stmt</A> | <A HREF="#prod14">include_stmt</A> | <A HREF="#prod15">const_stmt</A> | <A HREF="#prod16">enum_stmt</A> | <A HREF="#prod17">struct_stmt</A> | <A HREF="#prod18">extern_stmt</A> | <A HREF="#prod19">exception_stmt</A> | <A HREF="#prod20">message_stmt</A> ) )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod13">mixin_stmt</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><MIXIN> <A HREF="#prod21">ref</A> ( <SEMI> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod14">include_stmt</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><INCLUDE> <STR> ( <SEMI> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod15">const_stmt</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><CONST> <A HREF="#prod22">ctype</A> <A HREF="#prod6">def</A> <EQ> <A HREF="#prod12">cvalue</A> ( <SEMI> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod16">enum_stmt</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><ENUM> <A HREF="#prod6">def</A> <LPAREN> <A HREF="#prod23">item_list</A> <RPAREN> ( <SEMI> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod23">item_list</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod6">def</A> ( <COMMA> <A HREF="#prod6">def</A> )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod17">struct_stmt</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><STRUCT> <A HREF="#prod6">def</A> <A HREF="#prod24">params</A> ( <EXTENDS> <A HREF="#prod21">ref</A> )? ( <SEMI> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod18">extern_stmt</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><EXTERN> <A HREF="#prod6">def</A> ( <SEMI> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod19">exception_stmt</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><EXCEPTION> <A HREF="#prod6">def</A> <A HREF="#prod24">params</A> ( <EXTENDS> <A HREF="#prod21">ref</A> )? ( <SEMI> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod20">message_stmt</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod25">rtype</A> <A HREF="#prod6">def</A> <A HREF="#prod24">params</A> ( <THROWS> <A HREF="#prod26">throws_list</A> )? ( <SEMI> )?</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod26">throws_list</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod21">ref</A> ( <COMMA> <A HREF="#prod21">ref</A> )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod9">id</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><ID></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod27">qid</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><QID></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod4">xid</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod27">qid</A> | <A HREF="#prod9">id</A> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod6">def</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod9">id</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod21">ref</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod4">xid</A></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod22">ctype</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <BOOLEAN> | <BYTE> | <SHORT> | <INT> | <LONG> | <FLOAT> | <DOUBLE> | <STRING> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod28">ptype</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod22">ctype</A> | <OBJECT> | <A HREF="#prod21">ref</A> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod25">rtype</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( ( <A HREF="#prod28">ptype</A> <A HREF="#prod29">dim</A> ) | <VOID> )</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod29">dim</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> <RBRACKET> )*</TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod24">params</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><LPAREN> ( <A HREF="#prod30">param</A> ( <COMMA> <A HREF="#prod30">param</A> )* )? <RPAREN></TD> |
| </TR> |
| <TR> |
| <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod30">param</A></TD> |
| <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD> |
| <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod28">ptype</A> <A HREF="#prod29">dim</A> <A HREF="#prod6">def</A></TD> |
| </TR> |
| </TABLE> |
| </BODY> |
| </HTML> |