KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > taglibs > standard > extra > spath > SPathParser


1 /* Generated By:JavaCC: Do not edit this line. SPathParser.java */
2 package org.apache.taglibs.standard.extra.spath;
3
4 import java.util.Vector JavaDoc;
5
6 public class SPathParser implements SPathParserConstants {
7
8   /** Simple command-line parser interface, primarily for testing. */
9   public static void main(String JavaDoc args[]) throws ParseException
10   {
11     SPathParser parser = new SPathParser(System.in);
12     Path p = parser.expression();
13     java.util.List JavaDoc l = p.getSteps();
14
15     // output for simple testing
16
System.out.println();
17     if (p instanceof AbsolutePath)
18         System.out.println("Root: /");
19     for (int i = 0; i < l.size(); i++) {
20         Step s = (Step) l.get(i);
21         System.out.print("Step: " + s.getName());
22         if (s.isDepthUnlimited())
23             System.out.print("(*)");
24         System.out.println();
25     }
26   }
27
28   // custom constructor to accept a String
29
public SPathParser(String JavaDoc x) {
30     this(new java.io.StringReader JavaDoc(x));
31   }
32
33 //*********************************************************************
34
// Actual SPath grammar
35
final public Path expression() throws ParseException {
36   Path expr;
37     if (jj_2_1(2147483647)) {
38       expr = absolutePath();
39       jj_consume_token(0);
40     } else {
41       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
42       case QNAME:
43       case NSWILDCARD:
44       case SLASH:
45       case STAR:
46         expr = relativePath();
47         jj_consume_token(0);
48         break;
49       default:
50         jj_la1[0] = jj_gen;
51         jj_consume_token(-1);
52         throw new ParseException();
53       }
54     }
55    {if (true) return expr;}
56     throw new Error JavaDoc("Missing return statement in function");
57   }
58
59   final public AbsolutePath absolutePath() throws ParseException {
60   RelativePath relPath;
61     jj_consume_token(SLASH);
62     relPath = relativePath();
63    {if (true) return new AbsolutePath(relPath);}
64     throw new Error JavaDoc("Missing return statement in function");
65   }
66
67 // as an example, we use recursion here to handle a list
68
final public RelativePath relativePath() throws ParseException {
69   RelativePath relPath = null;
70   Step step;
71     step = step();
72     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
73     case SLASH:
74       jj_consume_token(SLASH);
75       relPath = relativePath();
76       break;
77     default:
78       jj_la1[1] = jj_gen;
79       ;
80     }
81    {if (true) return new RelativePath(step, relPath);}
82     throw new Error JavaDoc("Missing return statement in function");
83   }
84
85 // as an example, we use inline code here to handle a list
86
/*
87  * (i'm doing something perhaps unusual here, including the <SLASH>
88  * as if it were part of the step. this mechanism for differentiating
89  * '/' from '//' seems most natural, even if it is a bit unconventional.)
90  */

91   final public Step step() throws ParseException {
92   Token slash = null;
93   String JavaDoc nt;
94   Vector JavaDoc pl = null;
95   Predicate p;
96     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
97     case SLASH:
98       slash = jj_consume_token(SLASH);
99       break;
100     default:
101       jj_la1[2] = jj_gen;
102       ;
103     }
104     nt = nameTest();
105     label_1:
106     while (true) {
107       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
108       case START_BRACKET:
109         ;
110         break;
111       default:
112         jj_la1[3] = jj_gen;
113         break label_1;
114       }
115       p = predicate();
116           if (pl == null) pl = new Vector JavaDoc();
117           pl.add(p);
118     }
119    // if 'slash != null', then we have '//' versus '/'
120
{if (true) return new Step(slash != null, nt, pl);}
121     throw new Error JavaDoc("Missing return statement in function");
122   }
123
124   final public String JavaDoc nameTest() throws ParseException {
125   Token name;
126     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
127     case STAR:
128       name = jj_consume_token(STAR);
129       break;
130     case NSWILDCARD:
131       name = jj_consume_token(NSWILDCARD);
132       break;
133     case QNAME:
134       name = jj_consume_token(QNAME);
135       break;
136     default:
137       jj_la1[4] = jj_gen;
138       jj_consume_token(-1);
139       throw new ParseException();
140     }
141    {if (true) return name.toString();}
142     throw new Error JavaDoc("Missing return statement in function");
143   }
144
145   final public Predicate predicate() throws ParseException {
146   Predicate p;
147     jj_consume_token(START_BRACKET);
148     p = attributePredicate();
149     jj_consume_token(END_BRACKET);
150     {if (true) return p;}
151     throw new Error JavaDoc("Missing return statement in function");
152   }
153
154   final public Predicate attributePredicate() throws ParseException {
155   Token attname, target;
156     jj_consume_token(AT);
157     attname = jj_consume_token(QNAME);
158     jj_consume_token(EQUALS);
159     target = jj_consume_token(LITERAL);
160     {if (true) return new AttributePredicate(attname.toString(), target.toString());}
161     throw new Error JavaDoc("Missing return statement in function");
162   }
163
164   final private boolean jj_2_1(int xla) {
165     jj_la = xla; jj_lastpos = jj_scanpos = token;
166     boolean retval = !jj_3_1();
167     jj_save(0, xla);
168     return retval;
169   }
170
171   final private boolean jj_3R_13() {
172     if (jj_scan_token(AT)) return true;
173     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
174     if (jj_scan_token(QNAME)) return true;
175     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
176     if (jj_scan_token(EQUALS)) return true;
177     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
178     if (jj_scan_token(LITERAL)) return true;
179     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
180     return false;
181   }
182
183   final private boolean jj_3_1() {
184     if (jj_3R_2()) return true;
185     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
186     return false;
187   }
188
189   final private boolean jj_3R_10() {
190     if (jj_scan_token(NSWILDCARD)) return true;
191     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
192     return false;
193   }
194
195   final private boolean jj_3R_11() {
196     if (jj_scan_token(QNAME)) return true;
197     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
198     return false;
199   }
200
201   final private boolean jj_3R_2() {
202     if (jj_scan_token(SLASH)) return true;
203     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
204     if (jj_3R_3()) return true;
205     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
206     return false;
207   }
208
209   final private boolean jj_3R_12() {
210     if (jj_scan_token(START_BRACKET)) return true;
211     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
212     if (jj_3R_13()) return true;
213     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
214     if (jj_scan_token(END_BRACKET)) return true;
215     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
216     return false;
217   }
218
219   final private boolean jj_3R_8() {
220     if (jj_3R_12()) return true;
221     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
222     return false;
223   }
224
225   final private boolean jj_3R_5() {
226     if (jj_scan_token(SLASH)) return true;
227     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
228     if (jj_3R_3()) return true;
229     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
230     return false;
231   }
232
233   final private boolean jj_3R_6() {
234     if (jj_scan_token(SLASH)) return true;
235     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
236     return false;
237   }
238
239   final private boolean jj_3R_3() {
240     if (jj_3R_4()) return true;
241     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
242     Token xsp;
243     xsp = jj_scanpos;
244     if (jj_3R_5()) jj_scanpos = xsp;
245     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
246     return false;
247   }
248
249   final private boolean jj_3R_4() {
250     Token xsp;
251     xsp = jj_scanpos;
252     if (jj_3R_6()) jj_scanpos = xsp;
253     else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
254     if (jj_3R_7()) return true;
255     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
256     while (true) {
257       xsp = jj_scanpos;
258       if (jj_3R_8()) { jj_scanpos = xsp; break; }
259       if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
260     }
261     return false;
262   }
263
264   final private boolean jj_3R_9() {
265     if (jj_scan_token(STAR)) return true;
266     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
267     return false;
268   }
269
270   final private boolean jj_3R_7() {
271     Token xsp;
272     xsp = jj_scanpos;
273     if (jj_3R_9()) {
274     jj_scanpos = xsp;
275     if (jj_3R_10()) {
276     jj_scanpos = xsp;
277     if (jj_3R_11()) return true;
278     if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
279     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
280     } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
281     return false;
282   }
283
284   public SPathParserTokenManager token_source;
285   ASCII_UCodeESC_CharStream jj_input_stream;
286   public Token token, jj_nt;
287   private int jj_ntk;
288   private Token jj_scanpos, jj_lastpos;
289   private int jj_la;
290   public boolean lookingAhead = false;
291   private boolean jj_semLA;
292   private int jj_gen;
293   final private int[] jj_la1 = new int[5];
294   final private int[] jj_la1_0 = {0x6014,0x2000,0x2000,0x10000,0x4014,};
295   final private JJCalls[] jj_2_rtns = new JJCalls[1];
296   private boolean jj_rescan = false;
297   private int jj_gc = 0;
298
299   public SPathParser(java.io.InputStream JavaDoc stream) {
300     jj_input_stream = new ASCII_UCodeESC_CharStream(stream, 1, 1);
301     token_source = new SPathParserTokenManager(jj_input_stream);
302     token = new Token();
303     jj_ntk = -1;
304     jj_gen = 0;
305     for (int i = 0; i < 5; i++) jj_la1[i] = -1;
306     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
307   }
308
309   public void ReInit(java.io.InputStream JavaDoc stream) {
310     jj_input_stream.ReInit(stream, 1, 1);
311     token_source.ReInit(jj_input_stream);
312     token = new Token();
313     jj_ntk = -1;
314     jj_gen = 0;
315     for (int i = 0; i < 5; i++) jj_la1[i] = -1;
316     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
317   }
318
319   public SPathParser(java.io.Reader JavaDoc stream) {
320     jj_input_stream = new ASCII_UCodeESC_CharStream(stream, 1, 1);
321     token_source = new SPathParserTokenManager(jj_input_stream);
322     token = new Token();
323     jj_ntk = -1;
324     jj_gen = 0;
325     for (int i = 0; i < 5; i++) jj_la1[i] = -1;
326     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
327   }
328
329   public void ReInit(java.io.Reader JavaDoc stream) {
330     jj_input_stream.ReInit(stream, 1, 1);
331     token_source.ReInit(jj_input_stream);
332     token = new Token();
333     jj_ntk = -1;
334     jj_gen = 0;
335     for (int i = 0; i < 5; i++) jj_la1[i] = -1;
336     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
337   }
338
339   public SPathParser(SPathParserTokenManager tm) {
340     token_source = tm;
341     token = new Token();
342     jj_ntk = -1;
343     jj_gen = 0;
344     for (int i = 0; i < 5; i++) jj_la1[i] = -1;
345     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
346   }
347
348   public void ReInit(SPathParserTokenManager tm) {
349     token_source = tm;
350     token = new Token();
351     jj_ntk = -1;
352     jj_gen = 0;
353     for (int i = 0; i < 5; i++) jj_la1[i] = -1;
354     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
355   }
356
357   final private Token jj_consume_token(int kind) throws ParseException {
358     Token oldToken;
359     if ((oldToken = token).next != null) token = token.next;
360     else token = token.next = token_source.getNextToken();
361     jj_ntk = -1;
362     if (token.kind == kind) {
363       jj_gen++;
364       if (++jj_gc > 100) {
365         jj_gc = 0;
366         for (int i = 0; i < jj_2_rtns.length; i++) {
367           JJCalls c = jj_2_rtns[i];
368           while (c != null) {
369             if (c.gen < jj_gen) c.first = null;
370             c = c.next;
371           }
372         }
373       }
374       return token;
375     }
376     token = oldToken;
377     jj_kind = kind;
378     throw generateParseException();
379   }
380
381   final private boolean jj_scan_token(int kind) {
382     if (jj_scanpos == jj_lastpos) {
383       jj_la--;
384       if (jj_scanpos.next == null) {
385         jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
386       } else {
387         jj_lastpos = jj_scanpos = jj_scanpos.next;
388       }
389     } else {
390       jj_scanpos = jj_scanpos.next;
391     }
392     if (jj_rescan) {
393       int i = 0; Token tok = token;
394       while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
395       if (tok != null) jj_add_error_token(kind, i);
396     }
397     return (jj_scanpos.kind != kind);
398   }
399
400   final public Token getNextToken() {
401     if (token.next != null) token = token.next;
402     else token = token.next = token_source.getNextToken();
403     jj_ntk = -1;
404     jj_gen++;
405     return token;
406   }
407
408   final public Token getToken(int index) {
409     Token t = lookingAhead ? jj_scanpos : token;
410     for (int i = 0; i < index; i++) {
411       if (t.next != null) t = t.next;
412       else t = t.next = token_source.getNextToken();
413     }
414     return t;
415   }
416
417   final private int jj_ntk() {
418     if ((jj_nt=token.next) == null)
419       return (jj_ntk = (token.next=token_source.getNextToken()).kind);
420     else
421       return (jj_ntk = jj_nt.kind);
422   }
423
424   private java.util.Vector JavaDoc jj_expentries = new java.util.Vector JavaDoc();
425   private int[] jj_expentry;
426   private int jj_kind = -1;
427   private int[] jj_lasttokens = new int[100];
428   private int jj_endpos;
429
430   private void jj_add_error_token(int kind, int pos) {
431     if (pos >= 100) return;
432     if (pos == jj_endpos + 1) {
433       jj_lasttokens[jj_endpos++] = kind;
434     } else if (jj_endpos != 0) {
435       jj_expentry = new int[jj_endpos];
436       for (int i = 0; i < jj_endpos; i++) {
437         jj_expentry[i] = jj_lasttokens[i];
438       }
439       boolean exists = false;
440       for (java.util.Enumeration JavaDoc enum_ = jj_expentries.elements(); enum_.hasMoreElements();) {
441         int[] oldentry = (int[])(enum_.nextElement());
442         if (oldentry.length == jj_expentry.length) {
443           exists = true;
444           for (int i = 0; i < jj_expentry.length; i++) {
445             if (oldentry[i] != jj_expentry[i]) {
446               exists = false;
447               break;
448             }
449           }
450           if (exists) break;
451         }
452       }
453       if (!exists) jj_expentries.addElement(jj_expentry);
454       if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
455     }
456   }
457
458   final public ParseException generateParseException() {
459     jj_expentries.removeAllElements();
460     boolean[] la1tokens = new boolean[20];
461     for (int i = 0; i < 20; i++) {
462       la1tokens[i] = false;
463     }
464     if (jj_kind >= 0) {
465       la1tokens[jj_kind] = true;
466       jj_kind = -1;
467     }
468     for (int i = 0; i < 5; i++) {
469       if (jj_la1[i] == jj_gen) {
470         for (int j = 0; j < 32; j++) {
471           if ((jj_la1_0[i] & (1<<j)) != 0) {
472             la1tokens[j] = true;
473           }
474         }
475       }
476     }
477     for (int i = 0; i < 20; i++) {
478       if (la1tokens[i]) {
479         jj_expentry = new int[1];
480         jj_expentry[0] = i;
481         jj_expentries.addElement(jj_expentry);
482       }
483     }
484     jj_endpos = 0;
485     jj_rescan_token();
486     jj_add_error_token(0, 0);
487     int[][] exptokseq = new int[jj_expentries.size()][];
488     for (int i = 0; i < jj_expentries.size(); i++) {
489       exptokseq[i] = (int[])jj_expentries.elementAt(i);
490     }
491     return new ParseException(token, exptokseq, tokenImage);
492   }
493
494   final public void enable_tracing() {
495   }
496
497   final public void disable_tracing() {
498   }
499
500   final private void jj_rescan_token() {
501     jj_rescan = true;
502     for (int i = 0; i < 1; i++) {
503       JJCalls p = jj_2_rtns[i];
504       do {
505         if (p.gen > jj_gen) {
506           jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
507           switch (i) {
508             case 0: jj_3_1(); break;
509           }
510         }
511         p = p.next;
512       } while (p != null);
513     }
514     jj_rescan = false;
515   }
516
517   final private void jj_save(int index, int xla) {
518     JJCalls p = jj_2_rtns[index];
519     while (p.gen > jj_gen) {
520       if (p.next == null) { p = p.next = new JJCalls(); break; }
521       p = p.next;
522     }
523     p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
524   }
525
526   static final class JJCalls {
527     int gen;
528     Token first;
529     int arg;
530     JJCalls next;
531   }
532
533 }
534
Popular Tags