| /* |
| * 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. |
| */ |
| /* 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 |
| ; |
| |