jjtreestate.java

来自「java 编译器java复杂编译器,可以编译java文件的类库」· Java 代码 · 共 205 行

JAVA
205
字号
/* * 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.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import org.javacc.parser.Options;class JJTreeState{  static void insertParserMembers(IO io) {    String s;    if (Options.B("STATIC")) {      s = "static ";    } else {      s = "";    }    io.println();    io.println("  protected " + s + nameState() +		 " jjtree = new " + nameState() + "();");    io.println();  }  private static String nameState() {    return "JJT" + JJTreeGlobals.parserName + "State";  }  static void generateTreeState_java()  {    String fileName = NodeFiles.path() + nameState() + ".java";    File file = new File(fileName);    if (file.exists()) {      return;    }    try {      PrintWriter ostr = new PrintWriter(new BufferedWriter(					      new FileWriter(fileName),					      8096));      NodeFiles.generatePrologue(ostr, fileName);      insertState(ostr);      ostr.close();    } catch (IOException e) {      throw new Error(e.toString());    }  }    private static void insertState(PrintWriter ostr) {    ostr.println("class " + nameState() + " {");    ostr.println("  private java.util.Stack nodes;");    ostr.println("  private java.util.Stack marks;");    ostr.println("");    ostr.println("  private int sp;		// number of nodes on stack");    ostr.println("  private int mk;		// current mark");    ostr.println("  private boolean node_created;");    ostr.println("");    ostr.println("  " + nameState() + "() {");    ostr.println("    nodes = new java.util.Stack();");    ostr.println("    marks = new java.util.Stack();");    ostr.println("    sp = 0;");    ostr.println("    mk = 0;");    ostr.println("  }");    ostr.println("");    ostr.println("  /* Determines whether the current node was actually closed and");    ostr.println("     pushed.  This should only be called in the final user action of a");    ostr.println("     node scope.  */");    ostr.println("  boolean nodeCreated() {");    ostr.println("    return node_created;");    ostr.println("  }");    ostr.println("");    ostr.println("  /* Call this to reinitialize the node stack.  It is called");    ostr.println("     automatically by the parser's ReInit() method. */");    ostr.println("  void reset() {");    ostr.println("    nodes.removeAllElements();");    ostr.println("    marks.removeAllElements();");    ostr.println("    sp = 0;");    ostr.println("    mk = 0;");    ostr.println("  }");    ostr.println("");    ostr.println("  /* Returns the root node of the AST.  It only makes sense to call");    ostr.println("     this after a successful parse. */");    ostr.println("  Node rootNode() {");    ostr.println("    return (Node)nodes.elementAt(0);");    ostr.println("  }");    ostr.println("");    ostr.println("  /* Pushes a node on to the stack. */");    ostr.println("  void pushNode(Node n) {");    ostr.println("    nodes.push(n);");    ostr.println("    ++sp;");    ostr.println("  }");    ostr.println("");    ostr.println("  /* Returns the node on the top of the stack, and remove it from the");    ostr.println("     stack.  */");    ostr.println("  Node popNode() {");    ostr.println("    if (--sp < mk) {");    ostr.println("      mk = ((Integer)marks.pop()).intValue();");    ostr.println("    }");    ostr.println("    return (Node)nodes.pop();");    ostr.println("  }");    ostr.println("");    ostr.println("  /* Returns the node currently on the top of the stack. */");    ostr.println("  Node peekNode() {");    ostr.println("    return (Node)nodes.peek();");    ostr.println("  }");    ostr.println("");    ostr.println("  /* Returns the number of children on the stack in the current node");    ostr.println("     scope. */");    ostr.println("  int nodeArity() {");    ostr.println("    return sp - mk;");    ostr.println("  }");    ostr.println("");    ostr.println("");    ostr.println("  void clearNodeScope(Node n) {");    ostr.println("    while (sp > mk) {");    ostr.println("      popNode();");    ostr.println("    }");    ostr.println("    mk = ((Integer)marks.pop()).intValue();");    ostr.println("  }");    ostr.println("");    ostr.println("");    ostr.println("  void openNodeScope(Node n) {");    ostr.println("    marks.push(new Integer(mk));");    ostr.println("    mk = sp;");    ostr.println("    n.jjtOpen();");    ostr.println("  }");    ostr.println("");    ostr.println("");    ostr.println("  /* A definite node is constructed from a specified number of");    ostr.println("     children.  That number of nodes are popped from the stack and");    ostr.println("     made the children of the definite node.  Then the definite node");    ostr.println("     is pushed on to the stack. */");    ostr.println("  void closeNodeScope(Node n, int num) {");    ostr.println("    mk = ((Integer)marks.pop()).intValue();");    ostr.println("    while (num-- > 0) {");    ostr.println("      Node c = popNode();");    ostr.println("      c.jjtSetParent(n);");    ostr.println("      n.jjtAddChild(c, num);");    ostr.println("    }");    ostr.println("    n.jjtClose();");    ostr.println("    pushNode(n);");    ostr.println("    node_created = true;");    ostr.println("  }");    ostr.println("");    ostr.println("");    ostr.println("  /* A conditional node is constructed if its condition is true.  All");    ostr.println("     the nodes that have been pushed since the node was opened are");    ostr.println("     made children of the the conditional node, which is then pushed");    ostr.println("     on to the stack.  If the condition is false the node is not");    ostr.println("     constructed and they are left on the stack. */");    ostr.println("  void closeNodeScope(Node n, boolean condition) {");    ostr.println("    if (condition) {");    ostr.println("      int a = nodeArity();");    ostr.println("      mk = ((Integer)marks.pop()).intValue();");    ostr.println("      while (a-- > 0) {");    ostr.println("	Node c = popNode();");    ostr.println("	c.jjtSetParent(n);");    ostr.println("	n.jjtAddChild(c, a);");    ostr.println("      }");    ostr.println("      n.jjtClose();");    ostr.println("      pushNode(n);");    ostr.println("      node_created = true;");    ostr.println("    } else {");    ostr.println("      mk = ((Integer)marks.pop()).intValue();");    ostr.println("      node_created = false;");    ostr.println("    }");    ostr.println("  }");    ostr.println("}");  }}/*end*/

⌨️ 快捷键说明

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