📄 java1.1nola.jj
字号:
| ["0"-"3"] ["0"-"7"] ["0"-"7"] ) ) ) "'" >| < STRING_LITERAL: "\"" ( (~["\"","\\","\n","\r"]) | ("\\" ( ["n","t","b","r","f","\\","'","\""] | ["0"-"7"] ( ["0"-"7"] )? | ["0"-"3"] ["0"-"7"] ["0"-"7"] ) ) )* "\"" >}/* IDENTIFIERS */TOKEN :{ < IDENTIFIER: <LETTER> (<LETTER>|<DIGIT>)* >| < #LETTER: [ "\u0024", "\u0041"-"\u005a", "\u005f", "\u0061"-"\u007a", "\u00c0"-"\u00d6", "\u00d8"-"\u00f6", "\u00f8"-"\u00ff", "\u0100"-"\u1fff", "\u3040"-"\u318f", "\u3300"-"\u337f", "\u3400"-"\u3d2d", "\u4e00"-"\u9fff", "\uf900"-"\ufaff" ] >| < #DIGIT: [ "\u0030"-"\u0039", "\u0660"-"\u0669", "\u06f0"-"\u06f9", "\u0966"-"\u096f", "\u09e6"-"\u09ef", "\u0a66"-"\u0a6f", "\u0ae6"-"\u0aef", "\u0b66"-"\u0b6f", "\u0be7"-"\u0bef", "\u0c66"-"\u0c6f", "\u0ce6"-"\u0cef", "\u0d66"-"\u0d6f", "\u0e50"-"\u0e59", "\u0ed0"-"\u0ed9", "\u1040"-"\u1049" ] >}/* SEPARATORS */TOKEN :{ < LPAREN: "(" >| < RPAREN: ")" >| < LBRACE: "{" >| < RBRACE: "}" >| < LBRACKET: "[" >| < RBRACKET: "]" >| < SEMICOLON: ";" >| < COMMA: "," >| < DOT: "." >}/* OPERATORS */TOKEN :{ < ASSIGN: "=" >| < GT: ">" >| < LT: "<" >| < BANG: "!" >| < TILDE: "~" >| < HOOK: "?" >| < COLON: ":" >| < EQ: "==" >| < LE: "<=" >| < GE: ">=" >| < NE: "!=" >| < SC_OR: "||" >| < SC_AND: "&&" >| < INCR: "++" >| < DECR: "--" >| < PLUS: "+" >| < MINUS: "-" >| < STAR: "*" >| < SLASH: "/" >| < BIT_AND: "&" >| < BIT_OR: "|" >| < XOR: "^" >| < REM: "%" >| < LSHIFT: "<<" >| < RSIGNEDSHIFT: ">>" >| < RUNSIGNEDSHIFT: ">>>" >| < PLUSASSIGN: "+=" >| < MINUSASSIGN: "-=" >| < STARASSIGN: "*=" >| < SLASHASSIGN: "/=" >| < ANDASSIGN: "&=" >| < ORASSIGN: "|=" >| < XORASSIGN: "^=" >| < REMASSIGN: "%=" >| < LSHIFTASSIGN: "<<=" >| < RSIGNEDSHIFTASSIGN: ">>=" >| < RUNSIGNEDSHIFTASSIGN: ">>>=" >}/***************************************** * THE JAVA LANGUAGE GRAMMAR STARTS HERE * *****************************************//* * Program structuring syntax follows. */void CompilationUnit() :{}{ [ PackageDeclaration() ] ( ImportDeclaration() )* ( LOOKAHEAD(1, <ABSTRACT> | <CLASS> | <FINAL> | <INTERFACE> | <PUBLIC> | <SEMICOLON>) TypeDeclaration() )* <EOF>}void PackageDeclaration() :{}{ "package" Name() ";"}void ImportDeclaration() :{}{ "import" Name() [ "." "*" ] ";"}void TypeDeclaration() :{}{ LOOKAHEAD( { isClassDeclaration() } ) ClassDeclaration()| InterfaceDeclaration()| ";"}/* * Declaration syntax follows. */void ClassDeclaration() :{}{ ( "abstract" | "final" | "public" )* UnmodifiedClassDeclaration()}void UnmodifiedClassDeclaration() :{}{ "class" <IDENTIFIER> [ "extends" Name() ] [ "implements" NameList() ] ClassBody()}void ClassBody() :{}{ "{" ( LOOKAHEAD(1, <ABSTRACT> | <BOOLEAN> | <BYTE> | <CHAR> | <CLASS> | <DOUBLE> | <FINAL> | <FLOAT> | <INT> | <INTERFACE> | <LONG> | <NATIVE> | <PRIVATE> | <PROTECTED> | <PUBLIC> | <SHORT> | <STATIC> | <SYNCHRONIZED> | <TRANSIENT> | <VOID> | <VOLATILE> | <IDENTIFIER> | <LBRACE>) ClassBodyDeclaration() )* "}"}void NestedClassDeclaration() :{}{ ( "static" | "abstract" | "final" | "public" | "protected" | "private" )* UnmodifiedClassDeclaration()}void ClassBodyDeclaration() :{}{ LOOKAHEAD( { isInitializer() } ) Initializer()| LOOKAHEAD( { isNestedClassDeclaration() } ) NestedClassDeclaration()| LOOKAHEAD( { isNestedInterfaceDeclaration() } ) NestedInterfaceDeclaration()| LOOKAHEAD( { isConstructorDeclaration() } ) ConstructorDeclaration()| LOOKAHEAD( { isMethodDeclaration() } ) MethodDeclaration()| FieldDeclaration()}void InterfaceDeclaration() :{}{ ( "abstract" | "public" )* UnmodifiedInterfaceDeclaration()}void NestedInterfaceDeclaration() :{}{ ( "static" | "abstract" | "final" | "public" | "protected" | "private" )* UnmodifiedInterfaceDeclaration()}void UnmodifiedInterfaceDeclaration() :{}{ "interface" <IDENTIFIER> [ "extends" NameList() ] "{" ( LOOKAHEAD(1, <ABSTRACT> | <BOOLEAN> | <BYTE> | <CHAR> | <CLASS> | <DOUBLE> | <FINAL> | <FLOAT> | <INT> | <INTERFACE> | <LONG> | <NATIVE> | <PRIVATE> | <PROTECTED> | <PUBLIC> | <SHORT> | <STATIC> | <SYNCHRONIZED> | <TRANSIENT> | <VOID> | <VOLATILE> | <IDENTIFIER>) InterfaceMemberDeclaration() )* "}"}void InterfaceMemberDeclaration() :{}{ LOOKAHEAD( { isNestedClassDeclaration() } ) NestedClassDeclaration()| LOOKAHEAD( { isNestedInterfaceDeclaration() } ) NestedInterfaceDeclaration()| LOOKAHEAD( { isMethodDeclaration() } ) MethodDeclaration()| FieldDeclaration()}void FieldDeclaration() :{}{ ( "public" | "protected" | "private" | "static" | "final" | "transient" | "volatile" )* Type() VariableDeclarator() ( "," VariableDeclarator() )* ";"}void VariableDeclarator() :{}{ VariableDeclaratorId() [ "=" VariableInitializer() ]}void VariableDeclaratorId() :{}{ <IDENTIFIER> ( "[" "]" )*}void VariableInitializer() :{}{ ArrayInitializer()| LOOKAHEAD(1, <BOOLEAN> | <BYTE> | <CHAR> | <DOUBLE> | <FALSE> | <FLOAT> | <INT> | <LONG> | <NEW> | <NULL> | <SHORT> | <SUPER> | <THIS> | <TRUE> | <VOID> | <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <CHARACTER_LITERAL> | <STRING_LITERAL> | <IDENTIFIER> | <LPAREN> | <BANG> | <TILDE> | <INCR> | <DECR> | <PLUS> | <MINUS>) Expression()}void ArrayInitializer() :{}{ "{" [ LOOKAHEAD(1, <BOOLEAN> | <BYTE> | <CHAR> | <DOUBLE> | <FALSE> | <FLOAT> | <INT> | <LONG> | <NEW> | <NULL> | <SHORT> | <SUPER> | <THIS> | <TRUE> | <VOID> | <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <CHARACTER_LITERAL> | <STRING_LITERAL> | <IDENTIFIER> | <LPAREN> | <LBRACE> | <BANG> | <TILDE> | <INCR> | <DECR> | <PLUS> | <MINUS>) VariableInitializer() ( LOOKAHEAD( { getToken(1).kind == COMMA && getToken(2).kind != RBRACE } ) "," VariableInitializer() )* ] [ "," ] "}"}void MethodDeclaration() :{}{ ( "public" | "protected" | "private" | "static" | "abstract" | "final" | "native" | "synchronized" )* ResultType() MethodDeclarator() [ "throws" NameList() ] ( Block() | ";" )}void MethodDeclarator() :{}{ <IDENTIFIER> FormalParameters() ( "[" "]" )*}void FormalParameters() :{}{ "(" [ FormalParameter() ( "," FormalParameter() )* ] ")"}void FormalParameter() :{}{ [ "final" ] Type() VariableDeclaratorId()}void ConstructorDeclaration() :{}{ [ "public" | "protected" | "private" ] <IDENTIFIER> FormalParameters() [ "throws" NameList() ] "{" [ LOOKAHEAD( { isConstructorInvocation() } ) ExplicitConstructorInvocation() ] ( LOOKAHEAD(1, <BOOLEAN> | <BREAK> | <BYTE> | <CHAR> | <CLASS> | <CONTINUE> | <DO> | <DOUBLE> | <FALSE> | <FINAL> | <FLOAT> | <FOR> | <IF> | <INT> | <LONG> | <NEW> | <NULL> | <RETURN> | <SHORT> | <SUPER> | <SWITCH> | <SYNCHRONIZED> | <THIS> | <THROW> | <TRUE> | <TRY> | <VOID> | <WHILE> | <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <CHARACTER_LITERAL> | <STRING_LITERAL> | <IDENTIFIER> | <LPAREN> | <LBRACE> | <SEMICOLON> | <INCR> | <DECR>) BlockStatement() )* "}"}void ExplicitConstructorInvocation() :{}{ LOOKAHEAD( { getToken(1).kind == THIS && getToken(2).kind == LPAREN } ) "this" Arguments() ";"| LOOKAHEAD(1, <BOOLEAN> | <BYTE> | <CHAR> | <DOUBLE> | <FALSE> | <FLOAT> | <INT> | <LONG> | <NEW> | <NULL> | <SHORT> | <SUPER> | <THIS> | <TRUE> | <VOID> | <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <CHARACTER_LITERAL> | <STRING_LITERAL> | <IDENTIFIER> | <LPAREN>) [ LOOKAHEAD( { getToken(1).kind != SUPER || getToken(2).kind != LPAREN } ) PrimaryExpression() "." ] "super" Arguments() ";"}void Initializer() :{}{ [ "static" ] Block()}/* * Type, name and expression syntax follows. */void Type() :{}{ ( PrimitiveType() | Name() ) ( "[" "]" )*}void PrimitiveType() :{}{ "boolean"| "char"| "byte"| "short"| "int"| "long"| "float"| "double"}void ResultType() :{}{ "void"| Type()}void Name() :{}{ <IDENTIFIER> ( LOOKAHEAD( { getToken(1).kind == DOT && getToken(2).kind == IDENTIFIER } ) "." <IDENTIFIER> )*}void NameList() :{}{ Name() ( "," Name() )*}/* * Expression syntax follows. */void Expression() :/* * This expansion has been written this way instead of: * Assignment() | ConditionalExpression() * for performance reasons. * However, it is a weakening of the grammar for it allows the LHS of * assignments to be any conditional expression whereas it can only be * a primary expression. Consider adding a semantic predicate to work * around this. */{}{ ConditionalExpression() [ AssignmentOperator() Expression() ]}void AssignmentOperator() :{}{ "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | ">>>=" | "&=" | "^=" | "|="}void ConditionalExpression() :{}{ ConditionalOrExpression() [ "?" Expression() ":" ConditionalExpression() ]}void ConditionalOrExpression() :{}{ ConditionalAndExpression() ( "||" ConditionalAndExpression() )*}void ConditionalAndExpression() :{}{ InclusiveOrExpression() ( "&&" InclusiveOrExpression() )*}void InclusiveOrExpression() :{}{ ExclusiveOrExpression() ( "|" ExclusiveOrExpression() )*}void ExclusiveOrExpression() :{}{ AndExpression() ( "^" AndExpression() )*}void AndExpression() :{}{ EqualityExpression() ( "&" EqualityExpression() )*
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -