📄 prettyprint.jadd
字号:
// Binary Expr public void Binary.toString(StringBuffer s) { getLeftOperand().toString(s); s.append(printOp()); getRightOperand().toString(s); } syn String Binary.printOp(); eq MulExpr.printOp() = " * "; eq DivExpr.printOp() = " / "; eq ModExpr.printOp() = " % "; eq AddExpr.printOp() = " + "; eq SubExpr.printOp() = " - "; eq LShiftExpr.printOp() = " << "; eq RShiftExpr.printOp() = " >> "; eq URShiftExpr.printOp() = " >>> "; eq AndBitwiseExpr.printOp() = " & "; eq OrBitwiseExpr.printOp() = " | "; eq XorBitwiseExpr.printOp() = " ^ "; eq AndLogicalExpr.printOp() = " && "; eq OrLogicalExpr.printOp() = " || "; eq LTExpr.printOp() = " < "; eq GTExpr.printOp() = " > "; eq LEExpr.printOp() = " <= "; eq GEExpr.printOp() = " >= "; eq EQExpr.printOp() = " == "; eq NEExpr.printOp() = " != "; public void InstanceOfExpr.toString(StringBuffer s) { getExpr().toString(s); s.append(" instanceof "); getTypeAccess().toString(s); } public void ConditionalExpr.toString(StringBuffer s) { getCondition().toString(s); s.append(" ? "); getTrueExpr().toString(s); s.append(" : "); getFalseExpr().toString(s); } public void Modifiers.toString(StringBuffer s) { for(int i = 0; i < getNumModifier(); i++) { getModifier(i).toString(s); s.append(" "); } } public void Modifier.toString(StringBuffer s) { s.append(getID()); } public void AbstractDot.toString(StringBuffer s) { getLeft().toString(s); if(!nextAccess().isArrayAccess()) s.append("."); getRight().toString(s); } public void VarAccess.toString(StringBuffer s) { s.append(name()); } public void MethodAccess.toString(StringBuffer s) { s.append(name()); s.append("("); if(getNumArg() > 0) { getArg(0).toString(s); for(int i = 1; i < getNumArg(); i++) { s.append(", "); getArg(i).toString(s); } } s.append(")"); } public void ConstructorAccess.toString(StringBuffer s) { s.append(name()); s.append("("); if(getNumArg() > 0) { getArg(0).toString(s); for(int i = 1; i < getNumArg(); i++) { s.append(", "); getArg(i).toString(s); } } s.append(")"); } public void TypeAccess.toString(StringBuffer s) { if(decl().isReferenceType()) s.append(nameWithPackage()); else s.append(decl().name()); } public void ArrayTypeAccess.toString(StringBuffer s) { getAccess().toString(s); s.append("[]"); } public void ArrayTypeWithSizeAccess.toString(StringBuffer s) { getAccess().toString(s); s.append("["); getExpr().toString(s); s.append("]"); } public void ThisAccess.toString(StringBuffer s) { s.append("this"); } public void SuperAccess.toString(StringBuffer s) { s.append("super"); } public void PackageAccess.toString(StringBuffer s) { s.append(getPackage()); } public void ArrayAccess.toString(StringBuffer s) { s.append("["); getExpr().toString(s); s.append("]"); } public void ClassAccess.toString(StringBuffer s) { s.append("class"); } // Stmts public void Block.toString(StringBuffer s) { s.append("{\n"); indent++; for(int i = 0; i < getNumStmt(); i++) { s.append(indent()); getStmt(i).toString(s); } indent--; s.append(indent()); s.append("}\n"); } public void EmptyStmt.toString(StringBuffer s) { s.append(";\n"); } public void LabeledStmt.toString(StringBuffer s) { s.append(getLabel() + ":\n"); s.append(indent()); getStmt().toString(s); } public void ExprStmt.toString(StringBuffer s) { getExpr().toString(s); s.append(";\n"); } public void SwitchStmt.toString(StringBuffer s) { s.append("switch ("); getExpr().toString(s); s.append(")"); getBlock().toString(s); } public void ConstCase.toString(StringBuffer s) { s.append(indent()); s.append("case "); getValue().toString(s); s.append(":\n"); } public void DefaultCase.toString(StringBuffer s) { s.append(indent()); s.append("default:\n"); } public void IfStmt.toString(StringBuffer s) { s.append("if("); getCondition().toString(s); s.append(") "); getThen().toString(s); if(hasElse()) { s.append(indent()); s.append("else "); getElse().toString(s); } } public void WhileStmt.toString(StringBuffer s) { s.append("while("); getCondition().toString(s); s.append(") "); getStmt().toString(s); } public void DoStmt.toString(StringBuffer s) { s.append("do "); getStmt().toString(s); s.append("while("); getCondition().toString(s); s.append(");\n"); } public void ForStmt.toString(StringBuffer s) { s.append("for("); if(getNumInitStmt() > 0) { if(getInitStmt(0) instanceof VariableDeclaration) { int minDimension = Integer.MAX_VALUE; for(int i = 0; i < getNumInitStmt(); i++) { VariableDeclaration v = (VariableDeclaration)getInitStmt(i); minDimension = Math.min(minDimension, v.type().dimension()); } VariableDeclaration v = (VariableDeclaration)getInitStmt(0); v.getModifiers().toString(s); s.append(v.type().elementType().typeName()); for(int i = minDimension; i > 0; i--) s.append("[]"); for(int i = 0; i < getNumInitStmt(); i++) { if(i != 0) s.append(","); v = (VariableDeclaration)getInitStmt(i); s.append(" " + v.name()); for(int j = v.type().dimension() - minDimension; j > 0; j--) s.append("[]"); if(v.hasInit()) { s.append(" = "); v.getInit().toString(s); } } } else if(getInitStmt(0) instanceof ExprStmt) { ExprStmt stmt = (ExprStmt)getInitStmt(0); stmt.getExpr().toString(s); for(int i = 1; i < getNumInitStmt(); i++) { s.append(", "); stmt = (ExprStmt)getInitStmt(i); stmt.getExpr().toString(s); } } else { throw new Error("Unexpected initializer in for loop: " + getInitStmt(0)); } } s.append("; "); if(hasCondition()) { getCondition().toString(s); } s.append("; "); if(getNumUpdateStmt() > 0) { ExprStmt stmt = (ExprStmt)getUpdateStmt(0); stmt.getExpr().toString(s); for(int i = 1; i < getNumUpdateStmt(); i++) { s.append(", "); stmt = (ExprStmt)getUpdateStmt(i); stmt.getExpr().toString(s); } } s.append(") "); getStmt().toString(s); } public void BreakStmt.toString(StringBuffer s) { s.append("break "); if(hasLabel()) s.append(getLabel()); s.append(";\n"); } public void ContinueStmt.toString(StringBuffer s) { s.append("continue "); if(hasLabel()) s.append(getLabel()); s.append(";\n"); } public void ReturnStmt.toString(StringBuffer s) { s.append("return "); if(hasResult()) { getResult().toString(s); } s.append(";\n"); } public void ThrowStmt.toString(StringBuffer s) { s.append("throw "); getExpr().toString(s); s.append(";\n"); } public void SynchronizedStmt.toString(StringBuffer s) { s.append("synchronized("); getExpr().toString(s); s.append(") "); getBlock().toString(s); } public void TryStmt.toString(StringBuffer s) { s.append("try "); getBlock().toString(s); for(int i = 0; i < getNumCatchClause(); i++) { s.append(indent()); getCatchClause(i).toString(s); } if(hasFinally()) { s.append(indent()); s.append("finally "); getFinally().toString(s); } } public void CatchClause.toString(StringBuffer s) { s.append("catch ("); getParameter().toString(s); s.append(") "); getBlock().toString(s); } public void AssertStmt.toString(StringBuffer s) { s.append("assert "); getfirst().toString(s); if(hasExpr()) { s.append(" : "); getExpr().toString(s); } s.append(";\n"); } public void LocalClassDeclStmt.toString(StringBuffer s) { getClassDecl().toString(s); } // dump the AST to standard output public String ASTNode.dumpTree() { StringBuffer s = new StringBuffer(); dumpTree(s, 0); return s.toString(); } public void ASTNode.dumpTree(StringBuffer s, int j) { for(int i = 0; i < j; i++) { s.append(" "); } s.append(dumpString() + "\n"); for(int i = 0; i < getNumChild(); i++) getChild(i).dumpTree(s, j + 1); } public String ASTNode.dumpTreeNoRewrite() { StringBuffer s = new StringBuffer(); dumpTreeNoRewrite(s, 0); return s.toString(); } protected void ASTNode.dumpTreeNoRewrite(StringBuffer s, int indent) { for(int i = 0; i < indent; i++) s.append(" "); s.append(dumpString()); s.append("\n"); for(int i = 0; i < getNumChildNoTransform(); i++) { getChildNoTransform(i).dumpTreeNoRewrite(s, indent+1); } } syn String ASTNode.dumpString() = getClass().getName(); eq CompilationUnit.dumpString() = getClass().getName() + " [" + getPackageDecl() + "]"; eq VarAccess.dumpString() = getClass().getName() + " [" + getID() + "]"; eq MethodAccess.dumpString() = getClass().getName() + " [" + getID() + "]"; eq TypeAccess.dumpString() = getClass().getName() + " [" + getPackage() + ", " + getID() + "]"; eq ArrayTypeAccess.dumpString() = getClass().getName(); eq PackageAccess.dumpString() = getClass().getName() + " [" + getPackage() + "]"; eq ParseName.dumpString() = getClass().getName() + " [" + getID() + "]"; eq PackageOrTypeAccess.dumpString() = getClass().getName() + " [" + getID() + "]"; eq AmbiguousAccess.dumpString() = getClass().getName() + " [" + getID() + "]"; eq TypeDecl.dumpString() = getClass().getName() + " [" + getID() + "]"; eq FieldDeclaration.dumpString() = getClass().getName() + " [" + getID() + "]"; eq VariableDeclaration.dumpString() = getClass().getName() + " [" + getID() + "]"; eq ParameterDeclaration.dumpString() = getClass().getName() + " [" + getID() + "]"; eq MethodDecl.dumpString() = getClass().getName() + " [" + getID() + "]"; eq Modifier.dumpString() = getClass().getName() + " [" + getID() + "]"; eq Literal.dumpString() = getClass().getName() + " [" + getLITERAL() + "]"; eq BoundTypeAccess.dumpString() = getClass().getName() + " [" + getTypeDecl().fullName() + "]"; public String Program.dumpTree() { StringBuffer s = new StringBuffer(); for(Iterator iter = compilationUnitIterator(); iter.hasNext(); ) { CompilationUnit cu = (CompilationUnit)iter.next(); if(cu.fromSource()) { s.append(cu.dumpTree()); } } return s.toString(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -