JJTree 介绍
Node的生命周期
1.创建一个node节点时候自动指定一个唯一整形参数,这个整形参数表示唯一的节点类型,在simplenode类里面很有用,JJTREE自动产生一个parserTreeConstants.java文件和声明一些常用变量来作为node标示;同样还有数组jjtNodeName[]
2. node's jjtOpen() 方法调用
3.如果设置了 NODE_SCOPE_HOOK 参数, 那么用户声明的 openNodeScope()方法被调用并将 node 作为参数传进去. 这方法能初始化node的属性或者调用它的方法 .比如能保存node第一个token在这个节点
4.如果遇到在node解析时候抛出一个错误,那么JJTREE不能被关闭,用户定义的 closeNodeHook() 也不能被调用
5. 或者这个node的参数正则表达式是false,用户定义的closenodehook()也不能正常关闭;
6. 或者所有孩子节点都是整形数定义node节点,或者全部的包含在条件表达式的节点被压入堆栈, 他们之间的顺序是没有被标示的
7.node'的 jjtClose() 方法被调用
8. 节点node 被压入堆栈 stack.
9. 如果设置了 NODE_SCOPE_HOOK 参数,用户定义的 closenNodeScope()调用而且把node作为参数传进去
10.如果node不是root根节点他将作为孩子节点,并且调用jjtSetParent()方法设置父节点
/* Generated By:JJTree: Do not edit this line. .\JJTEg4State.java */ class JJTEg4State { private java.util.Stack nodes; private java.util.Stack marks; private int sp; // 堆栈的node节点的数量number of nodes on stack private int mk; // 当前的node的index private boolean node_created; JJTEg4State() { nodes = new java.util.Stack(); marks = new java.util.Stack(); sp = 0; mk = 0; } /* 决定当前的node是否关或者压入,当用户在执行动作时候调用. */ boolean nodeCreated() { return node_created; } /*初始化statck,当reinit()调用时候自动进行调用 */ void reset() { nodes.removeAllElements(); marks.removeAllElements(); sp = 0; mk = 0; } /* Returns the root node of the AST. It only makes sense to call this after a successful parse. */ Node rootNode() { return (Node)nodes.elementAt(0); } /* Pushes a node on to the stack. */ void pushNode(Node n) { nodes.push(n); ++sp; } /* Returns the node on the top of the stack, and remove it from the stack. */ Node popNode() { if (--sp < mk) { mk = ((Integer)marks.pop()).intValue(); } return (Node)nodes.pop(); } /* 返回statck最顶层的那个node节点 */ Node peekNode() { return (Node)nodes.peek(); } /* 返回当前node的孩子数量,比如node有很多,ASTADD ASTMULT的这种node*/ int nodeArity() { return sp - mk; } void clearNodeScope(Node n) { while (sp > mk) { popNode(); } mk = ((Integer)marks.pop()).intValue(); } void openNodeScope(Node n) { marks.push(new Integer(mk)); mk = sp; n.jjtOpen(); } /* 把node作为父节点,从堆栈里面讲num个节点作为子节点,然后将node重新压入堆栈 */ void closeNodeScope(Node n, int num) { mk = ((Integer)marks.pop()).intValue(); while (num-- > 0) { Node c = popNode(); c.jjtSetParent(n); n.jjtAddChild(c, num); } n.jjtClose(); pushNode(n); node_created = true; } /* A conditional node is constructed if its condition is true. All the nodes that have been pushed since the node was opened are made children of the the conditional node, which is then pushed on to the stack. If the condition is false the node is not constructed and they are left on the stack. */ void closeNodeScope(Node n, boolean condition) { if (condition) { int a = nodeArity(); mk = ((Integer)marks.pop()).intValue(); while (a-- > 0) { Node c = popNode(); c.jjtSetParent(n); n.jjtAddChild(c, a); } n.jjtClose(); pushNode(n); node_created = true; } else { mk = ((Integer)marks.pop()).intValue(); node_created = false; } } }
参数:
BUILD_NODE_FILES (default: true)
Generate sample implementations for SimpleNode and any other nodes used in the grammar.
相关推荐
JavaCC-4.0和JavaCC-5.0是该工具的两个不同版本。版本号的提升通常意味着新版本包含了一些改进、增强的功能和可能的bug修复。具体来说: - JavaCC-4.0:这是JavaCC的一个早期版本,提供了基本的语法解析功能和词法...
标题"javacc-4.0.zip"表明这是JavaCC的4.0版本,通常包含完整的源码、文档、示例和相关的库文件。此版本可能针对特定的Java版本进行了优化,并且可能修复了一些已知的问题或添加了新功能。 描述中的"调试程序需要的...
maven-javacc-plugin-2.0.4.jar
这个“javacc-5.0.zip”文件包含了JavaCC的5.0版本,是一个用于处理源代码和其他形式的文本输入的软件开发工具包。 JavaCC的工作原理基于上下文无关文法(Context-Free Grammar, CFG),它允许开发者定义一种特定的...
ph-javacc-maven-plugin 的更新版本。 最初是JavaCC 6.1.3,后来更新到JavaCC 7.0,但与此同时,底层代码是项目,它是JavaCC 7.0.3的分支,但代码和输出质量有所改善。 主要区别在于在Java 1.5以下生成代码的代码...
maven-javacc-plugin-2.0.7-sources.jar
maven-javacc-plugin-2.0.5.jar
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
maven-javacc-plugin-2.0.4-sources.jar
maven-javacc-plugin-2.0.0-sources.jar
maven-javacc-plugin-2.0.6-sources.jar
maven-javacc-plugin-2.0.5-sources.jar
maven-javacc-plugin-2.0.3-sources.jar
maven-javacc-plugin-2.0.1-sources.jar
maven-javacc-plugin-1.2.10-sources.jar
maven-javacc-plugin-1.2.9-sources.jar