home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright 1999-2004 The Apache Software Foundation
- *
- * Licensed 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.
- */
- /* Java Grammar */
-
- %ab HexDigit : [0-9a-fA-F];
- %ab Digit : [0-9];
- %ab OctalDigit : [0-7];
- %ab TetraDigit : [0-3];
- %ab NonZeroDigit : [1-9];
- %ab Letter : [a-zA-Z_];
- %ab AnyButSlash : [^/];
- %ab AnyButAstr : [^*];
- %ab UniEsc : [\u0001];
-
- %ab OctEscape1 : "\\" OctalDigit;
- %ab OctEscape2 : "\\" OctalDigit OctalDigit;
- %ab OctEscape3 : "\\" TetraDigit OctalDigit OctalDigit;
- %ab OctEscape : OctEscape1 | OctEscape2 | OctEscape3;
-
- %ab Escape : [\\] [rnbft\\'"];
- %ab ULetter : Letter | UniEsc;
- Identifier : ULetter ( ULetter Digit )*;
-
- %ab IntSuffix : "l" | "L";
- %ab DecimalNum : NonZeroDigit Digit* IntSuffix? ;
- %ab OctalNum : "0" OctalDigit* IntSuffix? ;
- %ab HexNum : "0" ("x"|"X") HexDigit HexDigit* IntSuffix? ;
- %ab IntegerLiteral : DecimalNum | OctalNum | HexNum;
-
- %ab Sign : "+" | "-";
- %ab FlSuffix : "f" | "F" | "d" | "D";
- %ab SignedInt : Sign? Digit+ ;
- %ab Expo : "e" | "E" ;
- %ab ExponentPart : Expo SignedInt? ;
- %ab Float1 : Digit+ "." (Digit+)? ExponentPart? FlSuffix?;
- %ab Float2 : "." Digit+ ExponentPart? FlSuffix? ;
- %ab Float3 : Digit+ ExponentPart FlSuffix? ;
- %ab Float4 : Digit+ FlSuffix ;
- %ab FloatingPoint : Float1 | Float2 | Float3 | Float4 ;
-
- %ab AnyChrChr : [^\\'] ;
- %ab AnyStrChr : [^\\"] ;
- %ab Character : "'" (Escape | OctEscape | AnyChrChr) "'" ;
- %ab String : "\"" (Escape | OctEscape | AnyStrChr)* "\"";
- %ab Numeric : IntegerLiteral | FloatingPoint ;
-
- LITERAL : Numeric | Character | String ;
-
- IDENTIFIER : ([a-zA-Z_] | [\u0001]) (([a-zA-Z_] | [\u0001]) | [0-9])*;
-
- OP_DIM : "[" ([\r\n\t\ ] | ( "/" "\*" ([^\*] | "\*" [^/])* "\*" "/" |
- "//" (.*)))* "]";
-
- %ab SPACES : " "+;
- %ab TAB : "\t";
- %ab EOL : "\r" "\n"? | "\n" ;
- // JAVADOC : "/**" ([^*] | [*] [^/])* "*/";
-
- JAVADOC : "/**" Description Property+ "*/";
-
- Description : ([\*\n\r\ \t]+ | DescriptionText)* ;
- DescriptionText : [A-Za-z<>%]+ ([\ \t]+ [A-Za-z<>%]+)* ;
- Property : "@" PropertyIdentifier [\ \t]+ Description ;
- PropertyIdentifier : [A-Za-z]+ ;
-
- %ab MULTILINECOMMENT : "/*" [^*] ([^*] | "*" [^/])* "*/";
- %ab SINGLELINECOMMENT : "//" (.*);
-
- WS : (SPACES|TAB|EOL|JAVADOC|MULTILINECOMMENT|SINGLELINECOMMENT)*
- ;
-
- %start CompilationUnit;
-
- TypeSpecifier
- : TypeName Dims?
- ;
-
- TypeName
- : PrimitiveType
- | QualifiedName
- ;
-
- ClassNameList
- : QualifiedName (WS "," WS QualifiedName)*
- ;
-
- PrimitiveType
- : "boolean"
- | "char"
- | "byte"
- | "short"
- | "int"
- | "long"
- | "float"
- | "double"
- | "void"
- ;
-
- SemiColons
- : ";"
- | SemiColons ";"
- ;
-
- CompilationUnit
- : ProgramFile
- ;
-
- ProgramFile
- : WS PackageStatement (WS ImportStatements)? (WS TypeDeclarations)? WS
- | (WS PackageStatement)? WS ImportStatements (WS TypeDeclarations)? WS
- | (WS PackageStatement)? (WS ImportStatements)? WS TypeDeclarations WS
- ;
-
- PackageStatement
- : "package" WS QualifiedName WS SemiColons
- ;
-
- TypeDeclarations
- : TypeDeclarationOptSemi+
- ;
-
- TypeDeclarationOptSemi
- : TypeDeclaration SemiColons?
- ;
-
- ImportStatements
- : ImportStatement (WS ImportStatement)*
- ;
-
- ImportStatement
- : "import" WS QualifiedName ("." "*")? WS SemiColons
- ;
-
- QualifiedName
- : IDENTIFIER ("." IDENTIFIER)*
- ;
-
- TypeDeclaration
- : ClassHeader WS "{" (WS FieldDeclarations)? WS "}"
- ;
-
- ClassHeader
- : (Modifiers WS)? ClassWord WS IDENTIFIER (WS Extends)? (WS Interfaces)?
- ;
-
- Modifiers
- : Modifier ( WS Modifier )*
- ;
-
- Modifier
- : "abstract"
- | "final"
- | "public"
- | "protected"
- | "private"
- | "static"
- | "transient"
- | "volatile"
- | "native"
- | "synchronized"
- ;
-
- ClassWord
- : "class"
- | "interface"
- ;
-
- Interfaces
- : "implements" WS ClassNameList
- ;
-
- FieldDeclarations
- : FieldDeclaration ((WS SemiColons)? WS FieldDeclaration)*
- ;
-
- FieldDeclaration
- : FieldVariableDeclaration WS ";"
- | MethodDeclaration
- | ConstructorDeclaration
- | StaticInitializer
- | NonStaticInitializer
- | TypeDeclaration
- ;
-
- FieldVariableDeclaration
- : (Modifiers WS)? TypeSpecifier WS VariableDeclarators
- ;
-
- VariableDeclarators
- : VariableDeclarator (WS "," WS VariableDeclarator)*
- ;
-
- VariableDeclarator
- : DeclaratorName (WS "=" WS VariableInitializer)?
- ;
-
- VariableInitializer
- : Expression
- | "{" (WS ArrayInitializers)? WS "}"
- ;
-
- ArrayInitializers
- : VariableInitializer (WS "," WS VariableInitializer)*
- ;
-
- MethodDeclaration
- : (Modifiers WS)? TypeSpecifier WS MethodDeclarator (WS Throws)? WS MethodBody
- ;
-
- MethodDeclarator
- : DeclaratorName WS "(" (WS ParameterList)? WS ")"
- | MethodDeclarator OP_DIM
- ;
-
- ParameterList
- : Parameter (WS "," WS Parameter)*
- ;
-
- Parameter
- : "final"? TypeSpecifier WS DeclaratorName
- ;
-
- DeclaratorName
- : IDENTIFIER
- | DeclaratorName OP_DIM
- ;
-
- Throws
- : "throws" WS ClassNameList
- ;
-
- MethodBody
- : Block
- | ";"
- ;
-
- ConstructorDeclaration
- : Modifiers? ConstructorDeclarator Throws? Block
- ;
-
- ConstructorDeclarator
- : IDENTIFIER "(" ParameterList? ")"
- ;
-
- StaticInitializer
- : "static" Block
- ;
-
- NonStaticInitializer
- : Block
- ;
-
- Extends
- : "extends" TypeName ("," TypeName)*
- ;
-
- Block
- : "{" (WS LocalVariableDeclarationsAndStatements)? WS "}"
- ;
-
- LocalVariableDeclarationsAndStatements
- : LocalVariableDeclarationOrStatement (WS LocalVariableDeclarationOrStatement)*
- ;
-
- LocalVariableDeclarationOrStatement
- : LocalVariableDeclarationStatement
- | Statement
- ;
-
- LocalVariableDeclarationStatement
- : ("final" WS)? TypeSpecifier WS VariableDeclarators ";"
- ;
-
- Statement
- : EmptyStatement
- | LabelStatement
- | ExpressionStatement ";"
- | SelectionStatement
- | IterationStatement
- | JumpStatement
- | GuardingStatement
- | Block
- ;
-
- EmptyStatement
- : ";"
- ;
-
- LabelStatement
- : IDENTIFIER ":"
- | "case" ConstantExpression ":"
- | "default" ":"
- ;
-
- ExpressionStatement
- : Expression
- ;
-
- SelectionStatement
- : "if" WS "(" WS Expression WS ")" WS Statement
- | "if" WS "(" WS Expression WS ")" WS Statement WS "else" WS Statement
- | "switch" WS "(" WS Expression WS ")" WS Block
- ;
-
- IterationStatement
- : "while" WS "(" WS Expression WS ")" WS Statement
- | "do" WS Statement WS "while" WS "(" WS Expression WS ")" WS ";"
- | "for" WS "(" WS ForInit WS ForExpr WS ForIncr WS ")" WS Statement
- | "for" WS "(" WS ForInit WS ForExpr WS ")" WS Statement
- ;
-
- ForInit
- : ExpressionStatements WS ";"
- | LocalVariableDeclarationStatement
- | ";"
- ;
-
- ForExpr
- : Expression WS ";"
- | ";"
- ;
-
- ForIncr
- : ExpressionStatements
- ;
-
- ExpressionStatements
- : ExpressionStatement (WS "," WS ExpressionStatement)*
- ;
-
- JumpStatement
- : "break" (WS IDENTIFIER)? WS ";"
- | "continue" (WS IDENTIFIER)? WS ";"
- | "return" (WS Expression)? WS ";"
- | "throw" WS Expression WS ";"
- ;
-
- GuardingStatement
- : "synchronized" WS "(" WS Expression WS ")" WS Statement
- | "try" WS Block WS Finally
- | "try" WS Block WS Catches (WS Finally)?
- ;
-
- Catches
- : Catch (WS Catch)*
- ;
-
- Catch
- : CatchHeader WS Block
- ;
-
- CatchHeader
- : "catch" WS "(" WS TypeSpecifier (WS IDENTIFIER)? WS ")"
- ;
-
- Finally
- : "finally" WS Block
- ;
-
- PrimaryExpression
- : QualifiedName
- | NotJustName
- ;
-
- NotJustName
- : SpecialName
- | NewAllocationExpression
- | ComplexPrimary
- ;
-
- ComplexPrimary
- : "(" WS Expression WS ")"
- | ComplexPrimaryNoParenthesis
- ;
-
- ComplexPrimaryNoParenthesis
- : LITERAL
- | "true" | "false"
- | ArrayAccess
- | FieldAccess
- | MethodCall
- ;
-
- ArrayAccess
- : QualifiedName WS "[" WS Expression WS "]"
- | ComplexPrimary WS "[" WS Expression WS "]"
- ;
-
- FieldAccess
- : NotJustName "." IDENTIFIER
- | RealPostfixExpression "." IDENTIFIER
- | QualifiedName "." "this"
- | QualifiedName "." "class"
- | PrimitiveType "." "class"
- ;
-
- MethodCall
- : MethodAccess WS "(" (WS ArgumentList)? WS ")"
- ;
-
- MethodAccess
- : ComplexPrimaryNoParenthesis
- | SpecialName
- | QualifiedName
- ;
-
- SpecialName
- : "this"
- | "super"
- | "null"
- ;
-
- ArgumentList
- : Expression (WS "," WS Expression)*
- ;
-
- NewAllocationExpression
- : (QualifiedName ".")? PlainNewAllocationExpression
- ;
-
- PlainNewAllocationExpression
- : ArrayAllocationExpression (WS "{" (WS ArrayInitializers)? WS "}")?
- | ClassAllocationExpression (WS "{" (WS FieldDeclarations)? WS "}")?
- ;
-
- ClassAllocationExpression
- : "new" WS TypeName WS "(" (WS ArgumentList)? WS ")"
- ;
-
- ArrayAllocationExpression
- : "new" WS TypeName WS DimExprs (WS Dims)?
- | "new" WS TypeName WS Dims
- ;
-
- DimExprs
- : DimExpr+
- ;
-
- DimExpr
- : "[" WS Expression WS "]"
- ;
-
- Dims
- : OP_DIM+
- ;
-
- PostfixExpression
- : PrimaryExpression
- | RealPostfixExpression
- ;
-
- RealPostfixExpression
- : PostfixExpression WS ("++"|"--")
- ;
-
- UnaryExpression
- : ("++"|"--") UnaryExpression
- | ("+"|"-") CastExpression
- | LogicalUnaryExpression
- ;
-
- LogicalUnaryExpression
- : PostfixExpression
- | ("~"|"!") UnaryExpression
- ;
-
- CastExpression
- : UnaryExpression
- | "(" WS PrimitiveTypeExpression WS ")" WS CastExpression
- | "(" WS ClassTypeExpression WS ")" WS CastExpression
- | "(" WS Expression WS ")" WS LogicalUnaryExpression
- ;
-
- PrimitiveTypeExpression
- : PrimitiveType Dims?
- ;
-
- ClassTypeExpression
- : QualifiedName Dims
- ;
-
- MultiplicativeExpression
- : CastExpression (WS ("*"|"/"|"%") WS CastExpression)*
- ;
-
- AdditiveExpression
- : MultiplicativeExpression (WS ("+"|"-") WS MultiplicativeExpression)*
- ;
-
- ShiftExpression
- : AdditiveExpression (WS ("<<"|">>"|">>>") WS AdditiveExpression)*
- ;
-
- RelationalExpression
- : ShiftExpression (WS ("<"|">"|"<="|">=") WS ShiftExpression)*
- | RelationalExpression WS "instanceof" WS TypeSpecifier
- ;
-
- EqualityExpression
- : RelationalExpression (WS ("==" | "!=") WS RelationalExpression)*
- ;
-
- AndExpression
- : EqualityExpression (WS "&" WS EqualityExpression)*
- ;
-
- ExclusiveOrExpression
- : AndExpression (WS "^" WS AndExpression)*
- ;
-
- InclusiveOrExpression
- : ExclusiveOrExpression (WS "|" WS ExclusiveOrExpression)*
- ;
-
- ConditionalAndExpression
- : InclusiveOrExpression (WS "&&" WS InclusiveOrExpression)*
- ;
-
- ConditionalOrExpression
- : ConditionalAndExpression (WS "||" WS ConditionalAndExpression)*
- ;
-
- ConditionalExpression
- : ConditionalOrExpression
- | ConditionalOrExpression "?" Expression ":" ConditionalExpression
- ;
-
- AssignmentExpression
- : ConditionalExpression
- | UnaryExpression WS AssignmentOperator WS AssignmentExpression
- ;
-
- AssignmentOperator
- : "="
- | "+=" | "-=" | "*=" | "/=" | "&=" | "|=" | "^=" | "%=" | "<<=" | ">>=" | ">>>="
- ;
-
- Expression
- : AssignmentExpression
- ;
-
- ConstantExpression
- : ConditionalExpression
- ;
-
-