⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jjtree.jjt

📁 java 编译器java复杂编译器,可以编译java文件的类库
💻 JJT
📖 第 1 页 / 共 3 页
字号:
/* * Type, name and expression syntax follows. */void Type() :{}{  ( PrimitiveType() | Name() ) ( "[" "]" )*}void PrimitiveType() :{}{  "boolean"|  "char"|  "byte"|  "short"|  "int"|  "long"|  "float"|  "double"}void ResultType() :{}{  "void"|  Type()}String Name() :/* * A lookahead of 2 is required below since "Name" can be followed * by a ".*" when used in the context of an "ImportDeclaration". */{  String s, ss;}{  s=JavaIdentifier()  ( LOOKAHEAD(2) "." ss=JavaIdentifier() { s += "." + ss; } )*                {		  return s;		}}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() :{}{  "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "&=" | "^=" | "|="|  OtherAssignmentOps()}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() )*}void EqualityExpression() :{}{  InstanceOfExpression() ( ( "==" | "!=" ) InstanceOfExpression() )*}void InstanceOfExpression() :{}{  RelationalExpression() [ "instanceof" Type() ]}void RelationalExpression() :{}{  /*   * The lookahead of 2 below is due to the fact that we have split   * the shift and shift assignment operator into multiple tokens that   * now clash with these tokens.   */  ShiftExpression() ( LOOKAHEAD(2) ( "<" | ">" | "<=" | ">=" ) ShiftExpression() )*}void ShiftExpression() :{}{  /*   * The lookahead of 3 below is due to the fact that we have split   * the shift and shift assignment operator into multiple tokens that   * now clash with these tokens and the relational operators.   */  AdditiveExpression() ( LOOKAHEAD(3) ( ShiftOps() ) AdditiveExpression() )*}void AdditiveExpression() :{}{  MultiplicativeExpression() ( ( "+" | "-" ) MultiplicativeExpression() )*}void MultiplicativeExpression() :{}{  UnaryExpression() ( ( "*" | "/" | "%" ) UnaryExpression() )*}void UnaryExpression() :{}{  ( "+" | "-" ) UnaryExpression()|  PreIncrementExpression()|  PreDecrementExpression()|  UnaryExpressionNotPlusMinus()}void PreIncrementExpression() :{}{  "++" PrimaryExpression()}void PreDecrementExpression() :{}{  "--" PrimaryExpression()}void UnaryExpressionNotPlusMinus() :{}{  ( "~" | "!" ) UnaryExpression()|  LOOKAHEAD( CastLookahead() )  CastExpression()|  PostfixExpression()}// This production is to determine lookahead only.  The LOOKAHEAD specifications// below are not used, but they are there just to indicate that we know about// this.void CastLookahead() :{}{  LOOKAHEAD(2)  "(" PrimitiveType()|  LOOKAHEAD("(" Name() "[")  "(" Name() "[" "]"|  "(" Name() ")" ( "~" | "!" | "(" | JavaIdentifier() | "this" | "super" | "new" | Literal() )}void PostfixExpression() :{}{  PrimaryExpression() [ "++" | "--" ]}void CastExpression() :{}{  LOOKAHEAD("(" PrimitiveType())  "(" Type() ")" UnaryExpression()|  LOOKAHEAD("(" Name())  "(" Type() ")" UnaryExpressionNotPlusMinus()}void PrimaryExpression() #PrimaryExpression :{}{  PrimaryPrefix() ( LOOKAHEAD(2) PrimarySuffix() )*}void PrimaryPrefix() :{}{  Literal()|  "this"|  "super" "." JavaIdentifier()|  "(" Expression() ")"|  AllocationExpression()|  LOOKAHEAD( ResultType() "." "class" )  ResultType() "." "class"|  Name()}void PrimarySuffix() :{}{  LOOKAHEAD(2)  "." "this"|  LOOKAHEAD(2)  "." AllocationExpression()|  "[" Expression() "]"|  "." JavaIdentifier()|  Arguments()}void Literal() :{}{  <INTEGER_LITERAL>|  <FLOATING_POINT_LITERAL>|  <CHARACTER_LITERAL>|  <STRING_LITERAL>|  BooleanLiteral()|  NullLiteral()}Token IntegerLiteral() :{  Token t;}{  t=<INTEGER_LITERAL>                {		  return t;		}}Token BooleanLiteral() :{  Token t;}{  t="true"                {		  return t;		}|  t="false"                {		  return t;		}}Token StringLiteral() :{  Token t;}{  t=<STRING_LITERAL>                {		  return t;		}}void NullLiteral() :{}{  "null"}void Arguments() :{}{  "(" [ ArgumentList() ] ")"}void ArgumentList() :{}{  Expression() ( "," Expression() )*}void AllocationExpression() :{}{  LOOKAHEAD(2)  "new" PrimitiveType() ArrayDimsAndInits()|  "new" Name()    (      ArrayDimsAndInits()    |      Arguments() [ ClassBody() ]    )}/* * The second LOOKAHEAD specification below is to parse to PrimarySuffix * if there is an expression between the "[...]". */void ArrayDimsAndInits() :{}{  LOOKAHEAD(2)  ( LOOKAHEAD(2) "[" Expression() "]" )+ ( LOOKAHEAD(2) "[" "]" )*|  ( "[" "]" )+ ArrayInitializer()}/* * Statement syntax follows. */void Statement() :{}{  LOOKAHEAD(2)  LabeledStatement()|  Block()|  EmptyStatement()|  StatementExpression() ";"|  SwitchStatement()|  IfStatement()|  WhileStatement()|  DoStatement()|  ForStatement()|  BreakStatement()|  ContinueStatement()|  ReturnStatement()|  ThrowStatement()|  SynchronizedStatement()|  TryStatement()}void LabeledStatement() :{}{  JavaIdentifier() ":" Statement()}void Block() :{}{  "{" ( BlockStatement() )* "}"}void BlockStatement() :{}{  LOOKAHEAD([ "final" ] Type() JavaIdentifier())  LocalVariableDeclaration() ";"|  Statement()|  UnmodifiedClassDeclaration()|  UnmodifiedInterfaceDeclaration()}void LocalVariableDeclaration() :{}{  [ "final" ] Type() VariableDeclarator() ( "," VariableDeclarator() )*}void EmptyStatement() :{}{  ";"}void StatementExpression() :/* * The last expansion of this production accepts more than the legal * Java expansions for StatementExpression.  This expansion does not * use PostfixExpression for performance reasons. */{}{  PreIncrementExpression()|  PreDecrementExpression()|  PrimaryExpression()  [    "++"  |    "--"  |    AssignmentOperator() Expression()  ]}void SwitchStatement() :{}{  "switch" "(" Expression() ")" "{"    ( SwitchLabel() ( BlockStatement() )* )*  "}"}void SwitchLabel() :{}{  "case" Expression() ":"|  "default" ":"}void IfStatement() :/* * The disambiguating algorithm of JavaCC automatically binds dangling * else's to the innermost if statement.  The LOOKAHEAD specification * is to tell JavaCC that we know what we are doing. */{}{  "if" "(" Expression() ")" Statement() [ LOOKAHEAD(1) "else" Statement() ]}void WhileStatement() :{}{  "while" "(" Expression() ")" Statement()}void DoStatement() :{}{  "do" Statement() "while" "(" Expression() ")" ";"}void ForStatement() :{}{  "for" "(" [ ForInit() ] ";" [ Expression() ] ";" [ ForUpdate() ] ")" Statement()}void ForInit() :{}{  LOOKAHEAD( [ "final" ] Type() JavaIdentifier() )  LocalVariableDeclaration()|  StatementExpressionList()}void StatementExpressionList() :{}{  StatementExpression() ( "," StatementExpression() )*}void ForUpdate() :{}{  StatementExpressionList()}void BreakStatement() :{}{  "break" [ JavaIdentifier() ] ";"}void ContinueStatement() :{}{  "continue" [ JavaIdentifier() ] ";"}void ReturnStatement() :{}{  "return" [ Expression() ] ";"}void ThrowStatement() :{}{  "throw" Expression() ";"}void SynchronizedStatement() :{}{  "synchronized" "(" Expression() ")" Block()}void TryStatement() :/* * Semantic check required here to make sure that at least one * finally/catch is present. */{}{  "try" Block()  ( "catch" "(" FormalParameter() ")" Block() )*  [ "finally" Block() ]}/*end*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -