1 /* Generated By: CamlParser.jj,v 1.1 2002/08/21 21&JavaCC: Do not edit this line. CamlParser.java */ 2 package net.bonzoun.cocodonkey; 3 4 import java.io; 5 import java.util; 6 7 public class CamlParser implements CamlParserConstants { 8 9 public static CamlData parse(File file) { 10 long t0 = System.currentTimeMillis(); 11 try { 12 CamlParser parser = new CamlParser(new InputStreamReader(new FileInputStream(file), "ISO8859_1")); 13 return parser.parse(); 14 } catch (Exception e) { 15 e.printStackTrace(); 16 return null; 17 } finally { 18 long t = System.currentTimeMillis(); 19 //System.out.println("Parse " + file.getName() + " in " + (t-t0) + "ms"); 20 } 21 } 22 23 final public CamlData parse() throws ParseException { 24 Map data; 25 data = struct_content(); 26 jj_consume_token(0); 27 {if (true) return new CamlData.Map(data);} 28 throw new Error("Missing return statement in function"); 29 } 30 31 final public Map struct_content() throws ParseException { 32 HashMap map = new HashMap(); 33 String key; 34 CamlData data; 35 label_1: 36 while (true) { 37 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 38 case SYMBOL: 39 ; 40 break; 41 default: 42 jj_la1[0] = jj_gen; 43 break label_1; 44 } 45 jj_consume_token(SYMBOL); 46 key = token.image; 47 jj_consume_token(EQUALS); 48 data = data(); 49 map.put(key, data); 50 } 51 {if (true) return map;} 52 throw new Error("Missing return statement in function"); 53 } 54 55 final public CamlData data() throws ParseException { 56 List list; 57 Map map; 58 CamlData data; 59 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 60 case LBRACE: 61 map = struct(); 62 data = new CamlData.Map(map); 63 break; 64 case LBRACKET: 65 list = listSem(); 66 data = new CamlData.List(list); 67 break; 68 case LPARENT: 69 list = listCom(); 70 data = new CamlData.List(list); 71 break; 72 case STRING: 73 jj_consume_token(STRING); 74 if (token.image.length()>2) { 75 String s = token.image; 76 int p; 77 while( (p=s.indexOf("\\\\")) >= 0) 78 s = s.substring(0, p) + s.substring(p+1); 79 data = new CamlData.Data(s.substring(1, s.length()-1)); 80 } else 81 data = new CamlData.Data(""); 82 break; 83 case SYMBOL: 84 jj_consume_token(SYMBOL); 85 data = new CamlData.Data(token.image); 86 break; 87 case INTEGER: 88 jj_consume_token(INTEGER); 89 data = new CamlData.Data(token.image); 90 break; 91 case FLOAT: 92 jj_consume_token(FLOAT); 93 data = new CamlData.Data(token.image); 94 break; 95 default: 96 jj_la1[1] = jj_gen; 97 jj_consume_token(-1); 98 throw new ParseException(); 99 } 100 {if (true) return data;} 101 throw new Error("Missing return statement in function"); 102 } 103 104 final public Map struct() throws ParseException { 105 Map data; 106 jj_consume_token(LBRACE); 107 data = struct_content(); 108 jj_consume_token(RBRACE); 109 {if (true) return data;} 110 throw new Error("Missing return statement in function"); 111 } 112 113 final public List listSem() throws ParseException { 114 ArrayList list = new ArrayList(); 115 CamlData data; 116 jj_consume_token(LBRACKET); 117 label_2: 118 while (true) { 119 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 120 case SYMBOL: 121 case INTEGER: 122 case FLOAT: 123 case STRING: 124 case LBRACE: 125 case LBRACKET: 126 case LPARENT: 127 ; 128 break; 129 default: 130 jj_la1[2] = jj_gen; 131 break label_2; 132 } 133 data = data(); 134 list.add(data); 135 label_3: 136 while (true) { 137 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 138 case SEMICOLON: 139 ; 140 break; 141 default: 142 jj_la1[3] = jj_gen; 143 break label_3; 144 } 145 jj_consume_token(SEMICOLON); 146 data = data(); 147 list.add(data); 148 } 149 } 150 jj_consume_token(RBRACKET); 151 {if (true) return list;} 152 throw new Error("Missing return statement in function"); 153 } 154 155 final public List listCom() throws ParseException { 156 ArrayList list = new ArrayList(); 157 CamlData data; 158 jj_consume_token(LPARENT); 159 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 160 case SYMBOL: 161 case INTEGER: 162 case FLOAT: 163 case STRING: 164 case LBRACE: 165 case LBRACKET: 166 case LPARENT: 167 data = data(); 168 list.add(data); 169 label_4: 170 while (true) { 171 switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { 172 case COMMA: 173 ; 174 break; 175 default: 176 jj_la1[4] = jj_gen; 177 break label_4; 178 } 179 jj_consume_token(COMMA); 180 data = data(); 181 list.add(data); 182 } 183 break; 184 default: 185 jj_la1[5] = jj_gen; 186 ; 187 } 188 jj_consume_token(RPARENT); 189 {if (true) return list;} 190 throw new Error("Missing return statement in function"); 191 } 192 193 public CamlParserTokenManager token_source; 194 ASCII_CharStream jj_input_stream; 195 public Token token, jj_nt; 196 private int jj_ntk; 197 private int jj_gen; 198 final private int[] jj_la1 = new int[6]; 199 final private int[] jj_la1_0 = {0x2,0x2be,0x2be,0x800,0x1000,0x2be,}; 200 201 public CamlParser(java.io.InputStream stream) { 202 jj_input_stream = new ASCII_CharStream(stream, 1, 1); 203 token_source = new CamlParserTokenManager(jj_input_stream); 204 token = new Token(); 205 jj_ntk = -1; 206 jj_gen = 0; 207 for (int i = 0; i < 6; i++) jj_la1[i] = -1; 208 } 209 210 public void ReInit(java.io.InputStream stream) { 211 jj_input_stream.ReInit(stream, 1, 1); 212 token_source.ReInit(jj_input_stream); 213 token = new Token(); 214 jj_ntk = -1; 215 jj_gen = 0; 216 for (int i = 0; i < 6; i++) jj_la1[i] = -1; 217 } 218 219 public CamlParser(java.io.Reader stream) { 220 jj_input_stream = new ASCII_CharStream(stream, 1, 1); 221 token_source = new CamlParserTokenManager(jj_input_stream); 222 token = new Token(); 223 jj_ntk = -1; 224 jj_gen = 0; 225 for (int i = 0; i < 6; i++) jj_la1[i] = -1; 226 } 227 228 public void ReInit(java.io.Reader stream) { 229 jj_input_stream.ReInit(stream, 1, 1); 230 token_source.ReInit(jj_input_stream); 231 token = new Token(); 232 jj_ntk = -1; 233 jj_gen = 0; 234 for (int i = 0; i < 6; i++) jj_la1[i] = -1; 235 } 236 237 public CamlParser(CamlParserTokenManager tm) { 238 token_source = tm; 239 token = new Token(); 240 jj_ntk = -1; 241 jj_gen = 0; 242 for (int i = 0; i < 6; i++) jj_la1[i] = -1; 243 } 244 245 public void ReInit(CamlParserTokenManager tm) { 246 token_source = tm; 247 token = new Token(); 248 jj_ntk = -1; 249 jj_gen = 0; 250 for (int i = 0; i < 6; i++) jj_la1[i] = -1; 251 } 252 253 final private Token jj_consume_token(int kind) throws ParseException { 254 Token oldToken; 255 if ((oldToken = token).next != null) token = token.next; 256 else token = token.next = token_source.getNextToken(); 257 jj_ntk = -1; 258 if (token.kind == kind) { 259 jj_gen++; 260 return token; 261 } 262 token = oldToken; 263 jj_kind = kind; 264 throw generateParseException(); 265 } 266 267 final public Token getNextToken() { 268 if (token.next != null) token = token.next; 269 else token = token.next = token_source.getNextToken(); 270 jj_ntk = -1; 271 jj_gen++; 272 return token; 273 } 274 275 final public Token getToken(int index) { 276 Token t = token; 277 for (int i = 0; i < index; i++) { 278 if (t.next != null) t = t.next; 279 else t = t.next = token_source.getNextToken(); 280 } 281 return t; 282 } 283 284 final private int jj_ntk() { 285 if ((jj_nt=token.next) == null) 286 return (jj_ntk = (token.next=token_source.getNextToken()).kind); 287 else 288 return (jj_ntk = jj_nt.kind); 289 } 290 291 private java.util.Vector jj_expentries = new java.util.Vector(); 292 private int[] jj_expentry; 293 private int jj_kind = -1; 294 295 final public ParseException generateParseException() { 296 jj_expentries.removeAllElements(); 297 boolean[] la1tokens = new boolean[22]; 298 for (int i = 0; i < 22; i++) { 299 la1tokens[i] = false; 300 } 301 if (jj_kind >= 0) { 302 la1tokens[jj_kind] = true; 303 jj_kind = -1; 304 } 305 for (int i = 0; i < 6; i++) { 306 if (jj_la1[i] == jj_gen) { 307 for (int j = 0; j < 32; j++) { 308 if ((jj_la1_0[i] & (1<<j)) != 0) { 309 la1tokens[j] = true; 310 } 311 } 312 } 313 } 314 for (int i = 0; i < 22; i++) { 315 if (la1tokens[i]) { 316 jj_expentry = new int[1]; 317 jj_expentry[0] = i; 318 jj_expentries.addElement(jj_expentry); 319 } 320 } 321 int[][] exptokseq = new int[jj_expentries.size()][]; 322 for (int i = 0; i < jj_expentries.size(); i++) { 323 exptokseq[i] = (int[])jj_expentries.elementAt(i); 324 } 325 return new ParseException(token, exptokseq, tokenImage); 326 } 327 328 final public void enable_tracing() { 329 } 330 331 final public void disable_tracing() { 332 } 333 334 }