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

📄 prettyprint.jadd

📁 JDK1.4编译器前端
💻 JADD
📖 第 1 页 / 共 2 页
字号:
/* * The JastAdd Extensible Java Compiler (http://jastadd.org) is covered * by the modified BSD License. You should have received a copy of the * modified BSD license with this compiler. *  * Copyright (c) 2005-2008, Torbjorn Ekman * All rights reserved. */aspect PrettyPrint {  // Helper for indentation    protected static int ASTNode.indent = 0;    public static String ASTNode.indent() {    StringBuffer s = new StringBuffer();    for(int i = 0; i < indent; i++) {      s.append("  ");    }    return s.toString();  }  // Default output    public String ASTNode.toString() {    StringBuffer s = new StringBuffer();    toString(s);    return s.toString().trim();  }    public void ASTNode.toString(StringBuffer s) {    throw new Error("Operation toString(StringBuffer s) not implemented for " + getClass().getName());  }  public void Program.toString(StringBuffer s) {    for(Iterator iter = compilationUnitIterator(); iter.hasNext(); ) {      CompilationUnit cu = (CompilationUnit)iter.next();      if(cu.fromSource()) {         cu.toString(s);      }    }  }          public void CompilationUnit.toString(StringBuffer s) {    try {      if(!getPackageDecl().equals("")) {        s.append("package " + getPackageDecl() + ";\n");      }      for(int i = 0; i < getNumImportDecl(); i++) {        getImportDecl(i).toString(s);      }      for(int i = 0; i < getNumTypeDecl(); i++) {        getTypeDecl(i).toString(s);        s.append("\n");      }    } catch (NullPointerException e) {      System.out.print("Error in compilation unit hosting " + getTypeDecl(0).typeName());      throw e;    }  }  public void SingleTypeImportDecl.toString(StringBuffer s) {    s.append("import ");    getAccess().toString(s);    s.append(";\n");  }  public void TypeImportOnDemandDecl.toString(StringBuffer s) {    s.append("import ");    getAccess().toString(s);    s.append(".*;\n");  }      public void ClassDecl.toString(StringBuffer s) {    getModifiers().toString(s);    s.append("class " + name());    if(hasSuperClassAccess()) {      s.append(" extends ");      getSuperClassAccess().toString(s);    }    if(getNumImplements() > 0) {      s.append(" implements ");      getImplements(0).toString(s);      for(int i = 1; i < getNumImplements(); i++) {        s.append(", ");        getImplements(i).toString(s);      }    }    s.append(" {\n");    indent++;    for(int i=0; i < getNumBodyDecl(); i++) {      getBodyDecl(i).toString(s);    }    indent--;    s.append(indent() + "}\n");  }    public void InterfaceDecl.toString(StringBuffer s) {    getModifiers().toString(s);    s.append("interface " + name());    if(getNumSuperInterfaceId() > 0) {      s.append(" extends ");      getSuperInterfaceId(0).toString(s);      for(int i = 1; i < getNumSuperInterfaceId(); i++) {        s.append(", ");        getSuperInterfaceId(i).toString(s);      }    }    s.append(" {\n");    indent++;    for(int i=0; i < getNumBodyDecl(); i++) {      getBodyDecl(i).toString(s);    }        indent--;    s.append(indent() + "}\n");  }  // Type body decl  public void InstanceInitializer.toString(StringBuffer s) {    if(getBlock().getNumStmt() > 0) {      s.append(indent());      getBlock().toString(s);    }  }  public void StaticInitializer.toString(StringBuffer s) {    s.append(indent());    s.append("static ");    getBlock().toString(s);  }    public void ConstructorDecl.toString(StringBuffer s) {    s.append(indent());    getModifiers().toString(s);    s.append(name() + "(");    if(getNumParameter() > 0) {      getParameter(0).toString(s);      for(int i = 1; i < getNumParameter(); i++) {        s.append(", ");        getParameter(i).toString(s);      }    }    s.append(")");    if(getNumException() > 0) {      s.append(" throws ");      getException(0).toString(s);      for(int i = 1; i < getNumException(); i++) {        s.append(", ");        getException(i).toString(s);      }    }        s.append(" {\n");    indent++;    if(hasConstructorInvocation()) {      s.append(indent());      getConstructorInvocation().toString(s);    }    for(int i = 0; i < getBlock().getNumStmt(); i++) {      s.append(indent());      getBlock().getStmt(i).toString(s);    }    indent--;    s.append(indent());    s.append("}\n");  }  public void FieldDeclaration.toString(StringBuffer s) {    s.append(indent());    getModifiers().toString(s);    getTypeAccess().toString(s);    s.append(" " + name());    if(hasInit()) {      s.append(" = ");      getInit().toString(s);    }    s.append(";\n");  }  public void VariableDeclaration.toString(StringBuffer s) {    getModifiers().toString(s);    getTypeAccess().toString(s);    s.append(" " + name());    if(hasInit()) {      s.append(" = ");      getInit().toString(s);    }    s.append(";\n");  }  public void MethodDecl.toString(StringBuffer s) {    s.append(indent());    getModifiers().toString(s);    getTypeAccess().toString(s);    s.append(" " + name() + "(");    if(getNumParameter() > 0) {      getParameter(0).toString(s);      for(int i = 1; i < getNumParameter(); i++) {        s.append(", ");        getParameter(i).toString(s);      }    }    s.append(")");    if(getNumException() > 0) {      s.append(" throws ");      getException(0).toString(s);      for(int i = 1; i < getNumException(); i++) {        s.append(", ");        getException(i).toString(s);      }    }    if(hasBlock()) {      s.append(" ");      getBlock().toString(s);    }    else {      s.append(";\n");    }  }  public void MemberClassDecl.toString(StringBuffer s) {    s.append(indent());    getClassDecl().toString(s);  }  public void MemberInterfaceDecl.toString(StringBuffer s) {    s.append(indent());    getInterfaceDecl().toString(s);  }  public void EmptyType.toString(StringBuffer s) {    s.append(indent());    s.append(";\n");  }  public void ArrayInit.toString(StringBuffer s) {    s.append("{ ");    if(getNumInit() > 0) {      getInit(0).toString(s);      for(int i = 1; i < getNumInit(); i++) {        s.append(", ");        getInit(i).toString(s);      }    }    s.append(" } ");  }  public void ParameterDeclaration.toString(StringBuffer s) {    getModifiers().toString(s);    getTypeAccess().toString(s);    s.append(" " + name());  }  // Assign Expression  public void AssignExpr.toString(StringBuffer s) {    getDest().toString(s);    s.append(printOp());    getSource().toString(s);  }  syn String AssignExpr.printOp() = " = ";  eq AssignSimpleExpr.printOp() = " = ";  eq AssignMulExpr.printOp() = " *= ";  eq AssignDivExpr.printOp() = " /= ";  eq AssignModExpr.printOp() = " %= ";  eq AssignPlusExpr.printOp() = " += ";  eq AssignMinusExpr.printOp() = " -= ";  eq AssignLShiftExpr.printOp() = " <<= ";  eq AssignRShiftExpr.printOp() = " >>= ";  eq AssignURShiftExpr.printOp() = " >>>= ";  eq AssignAndExpr.printOp() = " &= ";  eq AssignXorExpr.printOp() = " ^= ";  eq AssignOrExpr.printOp()  = " |= ";  // Literals      public void Literal.toString(StringBuffer s) {    s.append(getLITERAL());  }    public void StringLiteral.toString(StringBuffer s) {    s.append("\"" + escape(getLITERAL()) + "\"");  }    public void CharacterLiteral.toString(StringBuffer s) {    s.append("'" + escape(getLITERAL()) + "'");  }  public void LongLiteral.toString(StringBuffer s) {    s.append(getLITERAL());    s.append("L");  }  public void FloatingPointLiteral.toString(StringBuffer s) {    s.append(getLITERAL());    s.append("F");  }  public void DoubleLiteral.toString(StringBuffer s) {    s.append(getLITERAL());    s.append("D");  }  protected static String Literal.escape(String s) {    StringBuffer result = new StringBuffer();    for (int i=0; i < s.length(); i++) {      switch(s.charAt(i)) {        case '\b' : result.append("\\b"); break;        case '\t' : result.append("\\t"); break;        case '\n' : result.append("\\n"); break;        case '\f' : result.append("\\f"); break;        case '\r' : result.append("\\r"); break;        case '\"' : result.append("\\\""); break;        case '\'' : result.append("\\\'"); break;        case '\\' : result.append("\\\\"); break;        default:          int value = (int)s.charAt(i);          if(value < 0x20 || (value > 0x7e))            result.append(asEscape(value));          else            result.append(s.charAt(i));      }    }    return result.toString();  }  protected static String Literal.asEscape(int value) {    StringBuffer s = new StringBuffer("\\u");    String hex = Integer.toHexString(value);    for(int i = 0; i < 4-hex.length(); i++)      s.append("0");    s.append(hex);    return s.toString();  }  public void ParExpr.toString(StringBuffer s) {    s.append("(");    getExpr().toString(s);    s.append(")");  }  public void ClassInstanceExpr.toString(StringBuffer s) {    s.append("new ");    getAccess().toString(s);    s.append("(");    if(getNumArg() > 0) {      getArg(0).toString(s);      for(int i = 1; i < getNumArg(); i++) {        s.append(", ");        getArg(i).toString(s);      }    }    s.append(")");    if(hasTypeDecl()) {      TypeDecl decl = getTypeDecl();      s.append(" {\n");      indent++;      for(int i = 0; i < decl.getNumBodyDecl(); i++) {        if(!(decl.getBodyDecl(i) instanceof ConstructorDecl))          decl.getBodyDecl(i).toString(s);      }      indent--;      s.append(indent());      s.append("}");    }  }  public void ArrayCreationExpr.toString(StringBuffer s) {    s.append("new ");    getTypeAccess().toString(s);    if(hasArrayInit()) {      getArrayInit().toString(s);    }  }  // Pre and post operations for unary expression    public void Unary.toString(StringBuffer s) {    s.append(printPreOp());    getOperand().toString(s);    s.append(printPostOp());  }  syn String Unary.printPostOp() = "";  eq PostIncExpr.printPostOp() = "++";  eq PostDecExpr.printPostOp() = "--";  syn String Unary.printPreOp() = "";  eq PreIncExpr.printPreOp() = "++";  eq PreDecExpr.printPreOp() = "--";  eq MinusExpr.printPreOp() = "-";  eq PlusExpr.printPreOp() = "+";  eq BitNotExpr.printPreOp() = "~";  eq LogNotExpr.printPreOp() = "!";    public void CastExpr.toString(StringBuffer s) {    s.append("(");    getTypeAccess().toString(s);    s.append(")");    getExpr().toString(s);  }

⌨️ 快捷键说明

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