1 16 17 18 19 package org.apache.taglibs.standard.lang.jpath.expression; 20 21 class JJTParserState { 22 23 private java.util.Stack nodes; 24 private java.util.Stack marks; 25 private int sp; private int mk; private boolean node_created; 28 29 JJTParserState() { 30 31 nodes = new java.util.Stack (); 32 marks = new java.util.Stack (); 33 sp = 0; 34 mk = 0; 35 } 36 37 40 boolean nodeCreated() { 41 return node_created; 42 } 43 44 46 void reset() { 47 48 nodes.removeAllElements(); 49 marks.removeAllElements(); 50 51 sp = 0; 52 mk = 0; 53 } 54 55 57 Node rootNode() { 58 return (Node) nodes.elementAt(0); 59 } 60 61 62 void pushNode(Node n) { 63 64 nodes.push(n); 65 66 ++sp; 67 } 68 69 71 Node popNode() { 72 73 if (--sp < mk) { 74 mk = ((Integer ) marks.pop()).intValue(); 75 } 76 77 return (Node) nodes.pop(); 78 } 79 80 81 Node peekNode() { 82 return (Node) nodes.peek(); 83 } 84 85 87 int nodeArity() { 88 return sp - mk; 89 } 90 91 void clearNodeScope(Node n) { 92 93 while (sp > mk) { 94 popNode(); 95 } 96 97 mk = ((Integer ) marks.pop()).intValue(); 98 } 99 100 void openNodeScope(Node n) { 101 102 marks.push(new Integer (mk)); 103 104 mk = sp; 105 106 n.jjtOpen(); 107 } 108 109 113 void closeNodeScope(Node n, int num) { 114 115 mk = ((Integer ) marks.pop()).intValue(); 116 117 while (num-- > 0) { 118 Node c = popNode(); 119 120 c.jjtSetParent(n); 121 n.jjtAddChild(c, num); 122 } 123 124 n.jjtClose(); 125 pushNode(n); 126 127 node_created = true; 128 } 129 130 135 void closeNodeScope(Node n, boolean condition) { 136 137 if (condition) { 138 int a = nodeArity(); 139 140 mk = ((Integer ) marks.pop()).intValue(); 141 142 while (a-- > 0) { 143 Node c = popNode(); 144 145 c.jjtSetParent(n); 146 n.jjtAddChild(c, a); 147 } 148 149 n.jjtClose(); 150 pushNode(n); 151 152 node_created = true; 153 } else { 154 mk = ((Integer ) marks.pop()).intValue(); 155 node_created = false; 156 } 157 } 158 } 159 | Popular Tags |