1 23 24 package com.sun.el.parser; 25 26 class JJTELParserState { 27 private java.util.Stack nodes; 28 private java.util.Stack marks; 29 30 private int sp; private int mk; private boolean node_created; 33 34 JJTELParserState() { 35 nodes = new java.util.Stack (); 36 marks = new java.util.Stack (); 37 sp = 0; 38 mk = 0; 39 } 40 41 44 boolean nodeCreated() { 45 return node_created; 46 } 47 48 50 void reset() { 51 nodes.removeAllElements(); 52 marks.removeAllElements(); 53 sp = 0; 54 mk = 0; 55 } 56 57 59 Node rootNode() { 60 return (Node)nodes.elementAt(0); 61 } 62 63 64 void pushNode(Node n) { 65 nodes.push(n); 66 ++sp; 67 } 68 69 71 Node popNode() { 72 if (--sp < mk) { 73 mk = ((Integer )marks.pop()).intValue(); 74 } 75 return (Node)nodes.pop(); 76 } 77 78 79 Node peekNode() { 80 return (Node)nodes.peek(); 81 } 82 83 85 int nodeArity() { 86 return sp - mk; 87 } 88 89 90 void clearNodeScope(Node n) { 91 while (sp > mk) { 92 popNode(); 93 } 94 mk = ((Integer )marks.pop()).intValue(); 95 } 96 97 98 void openNodeScope(Node n) { 99 marks.push(new Integer (mk)); 100 mk = sp; 101 n.jjtOpen(); 102 } 103 104 105 109 void closeNodeScope(Node n, int num) { 110 mk = ((Integer )marks.pop()).intValue(); 111 while (num-- > 0) { 112 Node c = popNode(); 113 c.jjtSetParent(n); 114 n.jjtAddChild(c, num); 115 } 116 n.jjtClose(); 117 pushNode(n); 118 node_created = true; 119 } 120 121 122 127 void closeNodeScope(Node n, boolean condition) { 128 if (condition) { 129 int a = nodeArity(); 130 mk = ((Integer )marks.pop()).intValue(); 131 while (a-- > 0) { 132 Node c = popNode(); 133 c.jjtSetParent(n); 134 n.jjtAddChild(c, a); 135 } 136 n.jjtClose(); 137 pushNode(n); 138 node_created = true; 139 } else { 140 mk = ((Integer )marks.pop()).intValue(); 141 node_created = false; 142 } 143 } 144 } 145 | Popular Tags |