1 22 23 package org.javacc.jjtree; 24 25 import java.util.Hashtable ; 26 import java.util.Vector ; 27 28 public class ASTNodeDescriptor extends SimpleNode { 29 ASTNodeDescriptor(int id) { 30 super(id); 31 } 32 33 private boolean faked = false; 34 35 static ASTNodeDescriptor indefinite(String s) 36 { 37 ASTNodeDescriptor nd = new ASTNodeDescriptor(JJTreeParserTreeConstants.JJTNODEDESCRIPTOR); 38 nd.name = s; 39 nd.setNodeIdValue(); 40 nd.faked = true; 41 return nd; 42 } 43 44 45 static Vector nodeIds = new Vector (); 46 static Vector nodeNames = new Vector (); 47 static Hashtable nodeSeen = new Hashtable (); 48 49 static Vector getNodeIds() 50 { 51 return nodeIds; 52 } 53 54 static Vector getNodeNames() 55 { 56 return nodeNames; 57 } 58 59 void setNodeIdValue() 60 { 61 String k = getNodeId(); 62 if (!nodeSeen.containsKey(k)) { 63 nodeSeen.put(k, k); 64 nodeNames.addElement(name); 65 nodeIds.addElement(k); 66 } 67 } 68 69 String getNodeId() 70 { 71 return "JJT" + name.toUpperCase().replace('.', '_'); 72 } 73 74 75 String name; 76 boolean isGT; 77 ASTNodeDescriptorExpression expression; 78 79 80 boolean isVoid() 81 { 82 return name.equals("void"); 83 } 84 85 public String toString() 86 { 87 if (faked) { 88 return "(faked) " + name; 89 } else { 90 return super.toString() + ": " + name; 91 } 92 } 93 94 95 String getDescriptor() 96 { 97 if (expression == null) { 98 return name; 99 } else { 100 return "#" + name + "(" + (isGT ? ">" : "") + expression_text() + ")"; 101 } 102 } 103 104 105 String getNodeType() 106 { 107 if (JJTreeOptions.getMulti()) { 108 return JJTreeOptions.getNodePrefix() + name; 109 } else { 110 return "SimpleNode"; 111 } 112 } 113 114 115 String getNodeName() 116 { 117 return name; 118 } 119 120 121 String openNode(String nodeVar) 122 { 123 return "jjtree.openNodeScope(" + nodeVar + ");"; 124 } 125 126 127 private String expression_text() 128 { 129 if (expression.getFirstToken().image.equals(")") && 130 expression.getLastToken().image.equals("(")) { 131 return "true"; 132 } 133 134 String s = ""; 135 Token t = expression.getFirstToken(); 136 while (true) { 137 s += " " + t.image; 138 if (t == expression.getLastToken()) { 139 break; 140 } 141 t = t.next; 142 } 143 return s; 144 } 145 146 147 String closeNode(String nodeVar) 148 { 149 if (expression == null) { 150 return "jjtree.closeNodeScope(" + nodeVar + ", true);"; 151 } else if (isGT) { 152 return "jjtree.closeNodeScope(" + nodeVar + ", jjtree.nodeArity() >" + 153 expression_text() + ");"; 154 } else { 155 return "jjtree.closeNodeScope(" + nodeVar + ", " + 156 expression_text() + ");"; 157 } 158 } 159 160 161 String translateImage(Token t) 162 { 163 return whiteOut(t); 164 } 165 166 } 167 168 169 | Popular Tags |