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

📄 nodefiles.java

📁 java 编译器java复杂编译器,可以编译java文件的类库
💻 JAVA
字号:
/* * Copyright © 2002 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, * California 95054, U.S.A. All rights reserved.  Sun Microsystems, Inc. has * intellectual property rights relating to technology embodied in the product * that is described in this document. In particular, and without limitation, * these intellectual property rights may include one or more of the U.S. * patents listed at http://www.sun.com/patents and one or more additional * patents or pending patent applications in the U.S. and in other countries. * U.S. Government Rights - Commercial software. Government users are subject * to the Sun Microsystems, Inc. standard license agreement and applicable * provisions of the FAR and its supplements.  Use is subject to license terms. * Sun,  Sun Microsystems,  the Sun logo and  Java are trademarks or registered * trademarks of Sun Microsystems, Inc. in the U.S. and other countries.  This * product is covered and controlled by U.S. Export Control laws and may be * subject to the export or import laws in other countries.  Nuclear, missile, * chemical biological weapons or nuclear maritime end uses or end users, * whether direct or indirect, are strictly prohibited.  Export or reexport * to countries subject to U.S. embargo or to entities identified on U.S. * export exclusion lists, including, but not limited to, the denied persons * and specially designated nationals lists is strictly prohibited. */package org.javacc.jjtree;import java.io.*;import java.util.Vector;import org.javacc.parser.JavaCCGlobals;import org.javacc.parser.Options;class NodeFiles{  static String path()  {    String d = Options.S("OUTPUT_DIRECTORY");    if (d.equals("")) {      return "";    } else {      return d + System.getProperty("file.separator");    }  }  static void ensure(IO io, String nodeType)  {    String fileName = path() + nodeType + ".java";    if (nodeType.equals("Node")) {    } else if (nodeType.equals("SimpleNode")) {      ensure(io, "Node");    } else {      ensure(io, "SimpleNode");    }    /* Only build the node file if we're dealing with Node.java, or       the NODE_BUILD_FILES option is set. */    if (!(nodeType.equals("Node") || Options.B("BUILD_NODE_FILES"))) {      return;    }    if ((new File(fileName)).exists()) {      return;    }    io.getMsg().println("File \"" + fileName +			"\" does not exist.  Will create one.");    PrintWriter ostr;    try {      ostr = new PrintWriter(new BufferedWriter(				  new FileWriter(fileName), 8096));      if (nodeType.equals("Node")) {	generateNode_java(ostr);      } else if (nodeType.equals("SimpleNode")) {	generateSimpleNode_java(ostr);      } else {	generateMULTINode_java(ostr, nodeType);      }            ostr.close();    } catch (IOException e) {      throw new Error(e.toString());    }  }    static void generatePrologue(PrintWriter ostr, String fileName)  {    ostr.println("/* " +		 JavaCCGlobals.getIdString(JJTreeGlobals.toolList,					   fileName) +		 " */");    ostr.println();    if (!JJTreeGlobals.packageName.equals("")) {      ostr.println("package " + JJTreeGlobals.packageName + ";");      ostr.println();    }  }  static String nodeConstants()  {    return JJTreeGlobals.parserName + "TreeConstants";  }  static void generateTreeConstants_java()  {    String name = nodeConstants();    String fileName = path() + name + ".java";    try {      PrintWriter ostr = new PrintWriter(new BufferedWriter(					      new FileWriter(fileName),					      8096));      Vector nodeIds = ASTNodeDescriptor.getNodeIds();      Vector nodeNames = ASTNodeDescriptor.getNodeNames();      generatePrologue(ostr, fileName);      ostr.println("public interface " + name);      ostr.println("{");      for (int i = 0; i < nodeIds.size(); ++i) {	String n = (String)nodeIds.elementAt(i);	ostr.println("  public int " + n + " = " + i + ";");      }      ostr.println();      ostr.println();            ostr.println("  public String[] jjtNodeName = {");      for (int i = 0; i < nodeNames.size(); ++i) {	String n = (String)nodeNames.elementAt(i);	ostr.println("    \"" + n + "\",");      }      ostr.println("  };");      ostr.println("}");      ostr.close();    } catch (IOException e) {      throw new Error(e.toString());    }  }  static String visitorClass()  {    return JJTreeGlobals.parserName + "Visitor";  }  static void generateVisitor_java()  {    if (!Options.B("VISITOR")) {      return;    }    String name = visitorClass();    String fileName = path() + name + ".java";    try {      PrintWriter ostr = new PrintWriter(new BufferedWriter(					      new FileWriter(fileName),					      8096));      Vector nodeNames = ASTNodeDescriptor.getNodeNames();      generatePrologue(ostr, fileName);      ostr.println("public interface " + name);      ostr.println("{");      String ve = Options.S("VISITOR_EXCEPTION");      if (!ve.equals("")) {	ve = " throws " + ve;      }            ostr.println("  public Object visit(SimpleNode node, Object data)" +		   ve + ";");      if (Options.B("MULTI")) {	for (int i = 0; i < nodeNames.size(); ++i) {	  String n = (String)nodeNames.elementAt(i);	  if (n.equals("void")) {	    continue;	  }	  String nodeType = Options.S("NODE_PREFIX") + n;	  ostr.println("  public Object visit(" + nodeType +		       " node, Object data)" + ve + ";");	}      }      ostr.println("}");      ostr.close();    } catch (IOException e) {      throw new Error(e.toString());    }  }  private static void generateNode_java(PrintWriter ostr)  {    generatePrologue(ostr, "Node.java");    ostr.println("/* All AST nodes must implement this interface.  It provides basic");    ostr.println("   machinery for constructing the parent and child relationships");    ostr.println("   between nodes. */");    ostr.println("");    ostr.println("public interface Node {");    ostr.println("");    ostr.println("  /** This method is called after the node has been made the current");    ostr.println("    node.  It indicates that child nodes can now be added to it. */");    ostr.println("  public void jjtOpen();");    ostr.println("");    ostr.println("  /** This method is called after all the child nodes have been");    ostr.println("    added. */");    ostr.println("  public void jjtClose();");    ostr.println("");    ostr.println("  /** This pair of methods are used to inform the node of its");    ostr.println("    parent. */");    ostr.println("  public void jjtSetParent(Node n);");    ostr.println("  public Node jjtGetParent();");    ostr.println("");    ostr.println("  /** This method tells the node to add its argument to the node's");    ostr.println("    list of children.  */");    ostr.println("  public void jjtAddChild(Node n, int i);");    ostr.println("");    ostr.println("  /** This method returns a child node.  The children are numbered");    ostr.println("     from zero, left to right. */");    ostr.println("  public Node jjtGetChild(int i);");    ostr.println("");    ostr.println("  /** Return the number of children the node has. */");    ostr.println("  public int jjtGetNumChildren();");    if (Options.B("VISITOR")) {      String ve = Options.S("VISITOR_EXCEPTION");      if (!ve.equals("")) {	ve = " throws " + ve;      }      ostr.println("");      ostr.println("  /** Accept the visitor. **/");      ostr.println("  public Object jjtAccept(" + visitorClass() +		   " visitor, Object data)" + ve + ";");    }    ostr.println("}");    ostr.close();  }  private static void generateSimpleNode_java(PrintWriter ostr)  {    generatePrologue(ostr, "SimpleNode.java");    ostr.println("public class SimpleNode implements Node {");    ostr.println("  protected Node parent;");    ostr.println("  protected Node[] children;");    ostr.println("  protected int id;");    ostr.println("  protected " + JJTreeGlobals.parserName + " parser;");    ostr.println("");    ostr.println("  public SimpleNode(int i) {");    ostr.println("    id = i;");    ostr.println("  }");    ostr.println("");    ostr.println("  public SimpleNode(" + JJTreeGlobals.parserName + " p, int i) {");    ostr.println("    this(i);");    ostr.println("    parser = p;");    ostr.println("  }");    ostr.println("");    if (Options.B("NODE_FACTORY")) {      ostr.println("  public static Node jjtCreate(int id) {");      ostr.println("    return new SimpleNode(id);");      ostr.println("  }");      ostr.println("");      ostr.println("  public static Node jjtCreate(" + JJTreeGlobals.parserName + " p, int id) {");      ostr.println("    return new SimpleNode(p, id);");      ostr.println("  }");      ostr.println("");    }    ostr.println("  public void jjtOpen() {");    ostr.println("  }");    ostr.println("");    ostr.println("  public void jjtClose() {");    ostr.println("  }");    ostr.println("  ");    ostr.println("  public void jjtSetParent(Node n) { parent = n; }");    ostr.println("  public Node jjtGetParent() { return parent; }");    ostr.println("");    ostr.println("  public void jjtAddChild(Node n, int i) {");    ostr.println("    if (children == null) {");    ostr.println("      children = new Node[i + 1];");    ostr.println("    } else if (i >= children.length) {");    ostr.println("      Node c[] = new Node[i + 1];");    ostr.println("      System.arraycopy(children, 0, c, 0, children.length);");    ostr.println("      children = c;");    ostr.println("    }");    ostr.println("    children[i] = n;");    ostr.println("  }");    ostr.println("");    ostr.println("  public Node jjtGetChild(int i) {");    ostr.println("    return children[i];");    ostr.println("  }");    ostr.println("");    ostr.println("  public int jjtGetNumChildren() {");    ostr.println("    return (children == null) ? 0 : children.length;");    ostr.println("  }");    ostr.println("");    if (Options.B("VISITOR")) {      String ve = Options.S("VISITOR_EXCEPTION");      if (!ve.equals("")) {	ve = " throws " + ve;      }      ostr.println("  /** Accept the visitor. **/");      ostr.println("  public Object jjtAccept(" + visitorClass() +		   " visitor, Object data)" + ve + " {");      ostr.println("    return visitor.visit(this, data);");      ostr.println("  }");      ostr.println("");      ostr.println("  /** Accept the visitor. **/");      ostr.println("  public Object childrenAccept(" + visitorClass() +		   " visitor, Object data)" + ve + " {");      ostr.println("    if (children != null) {");      ostr.println("      for (int i = 0; i < children.length; ++i) {");      ostr.println("        children[i].jjtAccept(visitor, data);");      ostr.println("      }");      ostr.println("    }");      ostr.println("    return data;");      ostr.println("  }");      ostr.println("");    }    ostr.println("  /* You can override these two methods in subclasses of SimpleNode to");    ostr.println("     customize the way the node appears when the tree is dumped.  If");    ostr.println("     your output uses more than one line you should override");    ostr.println("     toString(String), otherwise overriding toString() is probably all");    ostr.println("     you need to do. */");    ostr.println("");    ostr.println("  public String toString() { return " + nodeConstants() + ".jjtNodeName[id]; }");    ostr.println("  public String toString(String prefix) { return prefix + toString(); }");    ostr.println("");    ostr.println("  /* Override this method if you want to customize how the node dumps");    ostr.println("     out its children. */");    ostr.println("");    ostr.println("  public void dump(String prefix) {");    ostr.println("    System.out.println(toString(prefix));");    ostr.println("    if (children != null) {");    ostr.println("      for (int i = 0; i < children.length; ++i) {");    ostr.println("	SimpleNode n = (SimpleNode)children[i];");    ostr.println("	if (n != null) {");    ostr.println("	  n.dump(prefix + \" \");");    ostr.println("	}");    ostr.println("      }");    ostr.println("    }");    ostr.println("  }");    ostr.println("}");    ostr.println("");  }  private static void generateMULTINode_java(PrintWriter ostr, String nodeType)  {    generatePrologue(ostr, nodeType + ".java");    ostr.println("public class " + nodeType + " extends SimpleNode {");    ostr.println("  public " + nodeType + "(int id) {");    ostr.println("    super(id);");    ostr.println("  }");    ostr.println();    ostr.println("  public " + nodeType + "(" + JJTreeGlobals.parserName + " p, int id) {");    ostr.println("    super(p, id);");    ostr.println("  }");    ostr.println();    if (Options.B("NODE_FACTORY")) {      ostr.println("  public static Node jjtCreate(int id) {");      ostr.println("      return new " + nodeType + "(id);");      ostr.println("  }");      ostr.println();      ostr.println("  public static Node jjtCreate(" +		   JJTreeGlobals.parserName + " p, int id) {");      ostr.println("      return new " + nodeType + "(p, id);");      ostr.println("  }");    }    if (Options.B("VISITOR")) {      String ve = Options.S("VISITOR_EXCEPTION");      if (!ve.equals("")) {	ve = " throws " + ve;      }      ostr.println("");      ostr.println("  /** Accept the visitor. **/");      ostr.println("  public Object jjtAccept(" + visitorClass() +		   " visitor, Object data)" + ve + " {");      ostr.println("    return visitor.visit(this, data);");      ostr.println("  }");    }    ostr.println("}");    ostr.close();  }}/*end*/

⌨️ 快捷键说明

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