001/* Generated By:JavaCC: Do not edit this line. ExpressionParser.java */
002package com.randomnoun.common.jexl.parser;
003
004import java.io.*;
005import com.randomnoun.common.jexl.ast.*;
006import java.util.Vector;
007
008
009public class ExpressionParser implements ExpressionParserConstants {
010   public ExpressionParser(String fileName)
011   {
012      this(System.in);
013      try
014      {
015         ReInit(new FileInputStream(new File(fileName)));
016      }
017      catch (Exception e)
018      {
019         e.printStackTrace();
020      }
021   }
022   public static void main(String args[])
023   {
024      ExpressionParser parser;
025      if ( args.length == 0 )
026      {
027         System.out.println("Expression Parser:  Reading from standard input . . .");
028         parser = new ExpressionParser(System.in);
029      }
030      else
031         if ( args.length == 1 )
032         {
033            System.out.println("Expression Parser:  Reading from file " + args[0]+ " . . .");
034            try
035            {
036               parser = new ExpressionParser(new java.io.FileInputStream(args[0]));
037            }
038            catch (java.io.FileNotFoundException e)
039            {
040               System.out.println("Expression Parser:  File " + args[0]+ " not found.");
041               return;
042            }
043         }
044         else
045         {
046            System.out.println("Expression Parser1:  Usage is one of:");
047            System.out.println("         java JavaParser < inputfile");
048            System.out.println("OR");
049            System.out.println("         java JavaParser inputfile");
050            return;
051         }
052      try
053      {
054         parser.Expression();
055         System.out.println("Expression Parser:  Expression parsed successfully.");
056      }
057      catch (ParseException e)
058      {
059         System.out.println(e.getMessage());
060         System.out.println("Expression Parser:  Encountered errors during parse.");
061      }
062   }
063
064  final public TopLevelExpression TopLevelExpression() throws ParseException {
065   Expression n0;
066   NodeToken n1;
067   Token n2;
068    n0 = Expression();
069    n2 = jj_consume_token(0);
070      n2.beginColumn++; n2.endColumn++;
071      n1 = JTBToolkit.makeNodeToken(n2);
072     {if (true) return new TopLevelExpression(n0,n1);}
073    throw new Error("Missing return statement in function");
074  }
075
076  final public Expression Expression() throws ParseException {
077   ConditionalAndExpression n0;
078   NodeListOptional n1 = new NodeListOptional();
079   NodeSequence n2;
080   NodeToken n3;
081   Token n4;
082   ConditionalAndExpression n5;
083    n0 = ConditionalAndExpression();
084    label_1:
085    while (true) {
086      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
087      case 19:
088        ;
089        break;
090      default:
091        break label_1;
092      }
093        n2 = new NodeSequence(2);
094      n4 = jj_consume_token(19);
095                n3 = JTBToolkit.makeNodeToken(n4);
096        n2.addNode(n3);
097      n5 = ConditionalAndExpression();
098        n2.addNode(n5);
099        n1.addNode(n2);
100    }
101     n1.nodes.trimToSize();
102     {if (true) return new Expression(n0,n1);}
103    throw new Error("Missing return statement in function");
104  }
105
106  final public ConditionalAndExpression ConditionalAndExpression() throws ParseException {
107   EqualityExpression n0;
108   NodeListOptional n1 = new NodeListOptional();
109   NodeSequence n2;
110   NodeToken n3;
111   Token n4;
112   EqualityExpression n5;
113    n0 = EqualityExpression();
114    label_2:
115    while (true) {
116      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
117      case 20:
118        ;
119        break;
120      default:
121        break label_2;
122      }
123        n2 = new NodeSequence(2);
124      n4 = jj_consume_token(20);
125                n3 = JTBToolkit.makeNodeToken(n4);
126        n2.addNode(n3);
127      n5 = EqualityExpression();
128        n2.addNode(n5);
129        n1.addNode(n2);
130    }
131     n1.nodes.trimToSize();
132     {if (true) return new ConditionalAndExpression(n0,n1);}
133    throw new Error("Missing return statement in function");
134  }
135
136  final public EqualityExpression EqualityExpression() throws ParseException {
137   RelationalExpression n0;
138   NodeListOptional n1 = new NodeListOptional();
139   NodeSequence n2;
140   NodeChoice n3;
141   NodeToken n4;
142   Token n5;
143   NodeToken n6;
144   Token n7;
145   RelationalExpression n8;
146    n0 = RelationalExpression();
147    label_3:
148    while (true) {
149      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
150      case 21:
151      case 22:
152        ;
153        break;
154      default:
155        break label_3;
156      }
157        n2 = new NodeSequence(2);
158      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
159      case 21:
160        n5 = jj_consume_token(21);
161                      n4 = JTBToolkit.makeNodeToken(n5);
162              n3 = new NodeChoice(n4, 0);
163        break;
164      case 22:
165        n7 = jj_consume_token(22);
166                      n6 = JTBToolkit.makeNodeToken(n7);
167              n3 = new NodeChoice(n6, 1);
168        break;
169      default:
170        jj_consume_token(-1);
171        throw new ParseException();
172      }
173        n2.addNode(n3);
174      n8 = RelationalExpression();
175        n2.addNode(n8);
176        n1.addNode(n2);
177    }
178     n1.nodes.trimToSize();
179     {if (true) return new EqualityExpression(n0,n1);}
180    throw new Error("Missing return statement in function");
181  }
182
183  final public RelationalExpression RelationalExpression() throws ParseException {
184   AdditiveExpression n0;
185   NodeListOptional n1 = new NodeListOptional();
186   NodeSequence n2;
187   NodeChoice n3;
188   NodeToken n4;
189   Token n5;
190   NodeToken n6;
191   Token n7;
192   NodeToken n8;
193   Token n9;
194   NodeToken n10;
195   Token n11;
196   AdditiveExpression n12;
197    n0 = AdditiveExpression();
198    label_4:
199    while (true) {
200      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
201      case 23:
202      case 24:
203      case 25:
204      case 26:
205        ;
206        break;
207      default:
208        break label_4;
209      }
210        n2 = new NodeSequence(2);
211      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
212      case 23:
213        n5 = jj_consume_token(23);
214                     n4 = JTBToolkit.makeNodeToken(n5);
215              n3 = new NodeChoice(n4, 0);
216        break;
217      case 24:
218        n7 = jj_consume_token(24);
219                     n6 = JTBToolkit.makeNodeToken(n7);
220              n3 = new NodeChoice(n6, 1);
221        break;
222      case 25:
223        n9 = jj_consume_token(25);
224                      n8 = JTBToolkit.makeNodeToken(n9);
225              n3 = new NodeChoice(n8, 2);
226        break;
227      case 26:
228        n11 = jj_consume_token(26);
229                       n10 = JTBToolkit.makeNodeToken(n11);
230              n3 = new NodeChoice(n10, 3);
231        break;
232      default:
233        jj_consume_token(-1);
234        throw new ParseException();
235      }
236        n2.addNode(n3);
237      n12 = AdditiveExpression();
238        n2.addNode(n12);
239        n1.addNode(n2);
240    }
241     n1.nodes.trimToSize();
242     {if (true) return new RelationalExpression(n0,n1);}
243    throw new Error("Missing return statement in function");
244  }
245
246  final public AdditiveExpression AdditiveExpression() throws ParseException {
247   MultiplicativeExpression n0;
248   NodeListOptional n1 = new NodeListOptional();
249   NodeSequence n2;
250   NodeChoice n3;
251   NodeToken n4;
252   Token n5;
253   NodeToken n6;
254   Token n7;
255   MultiplicativeExpression n8;
256    n0 = MultiplicativeExpression();
257    label_5:
258    while (true) {
259      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
260      case 27:
261      case 28:
262        ;
263        break;
264      default:
265        break label_5;
266      }
267        n2 = new NodeSequence(2);
268      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
269      case 27:
270        n5 = jj_consume_token(27);
271                     n4 = JTBToolkit.makeNodeToken(n5);
272              n3 = new NodeChoice(n4, 0);
273        break;
274      case 28:
275        n7 = jj_consume_token(28);
276                     n6 = JTBToolkit.makeNodeToken(n7);
277              n3 = new NodeChoice(n6, 1);
278        break;
279      default:
280        jj_consume_token(-1);
281        throw new ParseException();
282      }
283        n2.addNode(n3);
284      n8 = MultiplicativeExpression();
285        n2.addNode(n8);
286        n1.addNode(n2);
287    }
288     n1.nodes.trimToSize();
289     {if (true) return new AdditiveExpression(n0,n1);}
290    throw new Error("Missing return statement in function");
291  }
292
293  final public MultiplicativeExpression MultiplicativeExpression() throws ParseException {
294   UnaryExpression n0;
295   NodeListOptional n1 = new NodeListOptional();
296   NodeSequence n2;
297   NodeChoice n3;
298   NodeToken n4;
299   Token n5;
300   NodeToken n6;
301   Token n7;
302   NodeToken n8;
303   Token n9;
304   UnaryExpression n10;
305    n0 = UnaryExpression();
306    label_6:
307    while (true) {
308      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
309      case 29:
310      case 30:
311      case 31:
312        ;
313        break;
314      default:
315        break label_6;
316      }
317        n2 = new NodeSequence(2);
318      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
319      case 29:
320        n5 = jj_consume_token(29);
321                     n4 = JTBToolkit.makeNodeToken(n5);
322              n3 = new NodeChoice(n4, 0);
323        break;
324      case 30:
325        n7 = jj_consume_token(30);
326                     n6 = JTBToolkit.makeNodeToken(n7);
327              n3 = new NodeChoice(n6, 1);
328        break;
329      case 31:
330        n9 = jj_consume_token(31);
331                     n8 = JTBToolkit.makeNodeToken(n9);
332              n3 = new NodeChoice(n8, 2);
333        break;
334      default:
335        jj_consume_token(-1);
336        throw new ParseException();
337      }
338        n2.addNode(n3);
339      n10 = UnaryExpression();
340        n2.addNode(n10);
341        n1.addNode(n2);
342    }
343     n1.nodes.trimToSize();
344     {if (true) return new MultiplicativeExpression(n0,n1);}
345    throw new Error("Missing return statement in function");
346  }
347
348  final public UnaryExpression UnaryExpression() throws ParseException {
349   NodeChoice n0;
350   NodeSequence n1;
351   NodeChoice n2;
352   NodeToken n3;
353   Token n4;
354   NodeToken n5;
355   Token n6;
356   NodeToken n7;
357   Token n8;
358   UnaryExpression n9;
359   PrimaryExpression n10;
360    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
361    case 28:
362    case 32:
363    case 33:
364        n1 = new NodeSequence(2);
365      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
366      case 32:
367        n4 = jj_consume_token(32);
368                     n3 = JTBToolkit.makeNodeToken(n4);
369              n2 = new NodeChoice(n3, 0);
370        break;
371      case 33:
372        n6 = jj_consume_token(33);
373                     n5 = JTBToolkit.makeNodeToken(n6);
374              n2 = new NodeChoice(n5, 1);
375        break;
376      case 28:
377        n8 = jj_consume_token(28);
378                     n7 = JTBToolkit.makeNodeToken(n8);
379              n2 = new NodeChoice(n7, 2);
380        break;
381      default:
382        jj_consume_token(-1);
383        throw new ParseException();
384      }
385        n1.addNode(n2);
386      n9 = UnaryExpression();
387        n1.addNode(n9);
388        n0 = new NodeChoice(n1, 0);
389      break;
390    case INTEGER_LITERAL:
391    case FLOATING_POINT_LITERAL:
392    case CHARACTER_LITERAL:
393    case STRING_LITERAL:
394    case TRUE:
395    case NULL:
396    case FALSE:
397    case IDENTIFIER:
398    case 34:
399      n10 = PrimaryExpression();
400        n0 = new NodeChoice(n10, 1);
401      break;
402    default:
403      jj_consume_token(-1);
404      throw new ParseException();
405    }
406     {if (true) return new UnaryExpression(n0);}
407    throw new Error("Missing return statement in function");
408  }
409
410  final public PrimaryExpression PrimaryExpression() throws ParseException {
411   NodeChoice n0;
412   FunctionCall n1;
413   Name n2;
414   Literal n3;
415   NodeSequence n4;
416   NodeToken n5;
417   Token n6;
418   Expression n7;
419   NodeToken n8;
420   Token n9;
421    if (jj_2_1(2)) {
422      n1 = FunctionCall();
423        n0 = new NodeChoice(n1, 0);
424    } else if (jj_2_2(2)) {
425      n2 = Name();
426        n0 = new NodeChoice(n2, 1);
427    } else {
428      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
429      case INTEGER_LITERAL:
430      case FLOATING_POINT_LITERAL:
431      case CHARACTER_LITERAL:
432      case STRING_LITERAL:
433      case TRUE:
434      case NULL:
435      case FALSE:
436        n3 = Literal();
437        n0 = new NodeChoice(n3, 2);
438        break;
439      case 34:
440        n4 = new NodeSequence(3);
441        n6 = jj_consume_token(34);
442               n5 = JTBToolkit.makeNodeToken(n6);
443        n4.addNode(n5);
444        n7 = Expression();
445        n4.addNode(n7);
446        n9 = jj_consume_token(35);
447               n8 = JTBToolkit.makeNodeToken(n9);
448        n4.addNode(n8);
449        n0 = new NodeChoice(n4, 3);
450        break;
451      default:
452        jj_consume_token(-1);
453        throw new ParseException();
454      }
455    }
456     {if (true) return new PrimaryExpression(n0);}
457    throw new Error("Missing return statement in function");
458  }
459
460  final public Name Name() throws ParseException {
461   NodeToken n0;
462   Token n1;
463   NodeListOptional n2 = new NodeListOptional();
464   NodeSequence n3;
465   NodeToken n4;
466   Token n5;
467   NodeToken n6;
468   Token n7;
469    n1 = jj_consume_token(IDENTIFIER);
470                     n0 = JTBToolkit.makeNodeToken(n1);
471    label_7:
472    while (true) {
473      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
474      case 36:
475        ;
476        break;
477      default:
478        break label_7;
479      }
480        n3 = new NodeSequence(2);
481      n5 = jj_consume_token(36);
482               n4 = JTBToolkit.makeNodeToken(n5);
483        n3.addNode(n4);
484      n7 = jj_consume_token(IDENTIFIER);
485                        n6 = JTBToolkit.makeNodeToken(n7);
486        n3.addNode(n6);
487        n2.addNode(n3);
488    }
489     n2.nodes.trimToSize();
490     {if (true) return new Name(n0,n2);}
491    throw new Error("Missing return statement in function");
492  }
493
494  final public FunctionCall FunctionCall() throws ParseException {
495   NodeToken n0;
496   Token n1;
497   Arguments n2;
498    n1 = jj_consume_token(IDENTIFIER);
499                     n0 = JTBToolkit.makeNodeToken(n1);
500    n2 = Arguments();
501     {if (true) return new FunctionCall(n0,n2);}
502    throw new Error("Missing return statement in function");
503  }
504
505  final public Arguments Arguments() throws ParseException {
506   NodeToken n0;
507   Token n1;
508   NodeOptional n2 = new NodeOptional();
509   ArgumentList n3;
510   NodeToken n4;
511   Token n5;
512    n1 = jj_consume_token(34);
513            n0 = JTBToolkit.makeNodeToken(n1);
514    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
515    case INTEGER_LITERAL:
516    case FLOATING_POINT_LITERAL:
517    case CHARACTER_LITERAL:
518    case STRING_LITERAL:
519    case TRUE:
520    case NULL:
521    case FALSE:
522    case IDENTIFIER:
523    case 28:
524    case 32:
525    case 33:
526    case 34:
527      n3 = ArgumentList();
528        n2.addNode(n3);
529      break;
530    default:
531      ;
532    }
533    n5 = jj_consume_token(35);
534            n4 = JTBToolkit.makeNodeToken(n5);
535     {if (true) return new Arguments(n0,n2,n4);}
536    throw new Error("Missing return statement in function");
537  }
538
539  final public ArgumentList ArgumentList() throws ParseException {
540   Expression n0;
541   NodeListOptional n1 = new NodeListOptional();
542   NodeSequence n2;
543   NodeToken n3;
544   Token n4;
545   Expression n5;
546    n0 = Expression();
547    label_8:
548    while (true) {
549      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
550      case 37:
551        ;
552        break;
553      default:
554        break label_8;
555      }
556        n2 = new NodeSequence(2);
557      n4 = jj_consume_token(37);
558               n3 = JTBToolkit.makeNodeToken(n4);
559        n2.addNode(n3);
560      n5 = Expression();
561        n2.addNode(n5);
562        n1.addNode(n2);
563    }
564     n1.nodes.trimToSize();
565     {if (true) return new ArgumentList(n0,n1);}
566    throw new Error("Missing return statement in function");
567  }
568
569  final public Literal Literal() throws ParseException {
570   NodeChoice n0;
571   NodeToken n1;
572   Token n2;
573   NodeToken n3;
574   Token n4;
575   NodeToken n5;
576   Token n6;
577   NodeToken n7;
578   Token n8;
579   BooleanLiteral n9;
580   NullLiteral n10;
581    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
582    case INTEGER_LITERAL:
583      n2 = jj_consume_token(INTEGER_LITERAL);
584                             n1 = JTBToolkit.makeNodeToken(n2);
585        n0 = new NodeChoice(n1, 0);
586      break;
587    case FLOATING_POINT_LITERAL:
588      n4 = jj_consume_token(FLOATING_POINT_LITERAL);
589                                    n3 = JTBToolkit.makeNodeToken(n4);
590        n0 = new NodeChoice(n3, 1);
591      break;
592    case CHARACTER_LITERAL:
593      n6 = jj_consume_token(CHARACTER_LITERAL);
594                               n5 = JTBToolkit.makeNodeToken(n6);
595        n0 = new NodeChoice(n5, 2);
596      break;
597    case STRING_LITERAL:
598      n8 = jj_consume_token(STRING_LITERAL);
599                            n7 = JTBToolkit.makeNodeToken(n8);
600        n0 = new NodeChoice(n7, 3);
601      break;
602    case TRUE:
603    case FALSE:
604      n9 = BooleanLiteral();
605        n0 = new NodeChoice(n9, 4);
606      break;
607    case NULL:
608      n10 = NullLiteral();
609        n0 = new NodeChoice(n10, 5);
610      break;
611    default:
612      jj_consume_token(-1);
613      throw new ParseException();
614    }
615     {if (true) return new Literal(n0);}
616    throw new Error("Missing return statement in function");
617  }
618
619  final public BooleanLiteral BooleanLiteral() throws ParseException {
620   NodeChoice n0;
621   NodeToken n1;
622   Token n2;
623   NodeToken n3;
624   Token n4;
625    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
626    case TRUE:
627      n2 = jj_consume_token(TRUE);
628                  n1 = JTBToolkit.makeNodeToken(n2);
629        n0 = new NodeChoice(n1, 0);
630      break;
631    case FALSE:
632      n4 = jj_consume_token(FALSE);
633                   n3 = JTBToolkit.makeNodeToken(n4);
634        n0 = new NodeChoice(n3, 1);
635      break;
636    default:
637      jj_consume_token(-1);
638      throw new ParseException();
639    }
640     {if (true) return new BooleanLiteral(n0);}
641    throw new Error("Missing return statement in function");
642  }
643
644  final public NullLiteral NullLiteral() throws ParseException {
645   NodeToken n0;
646   Token n1;
647    n1 = jj_consume_token(NULL);
648               n0 = JTBToolkit.makeNodeToken(n1);
649     {if (true) return new NullLiteral(n0);}
650    throw new Error("Missing return statement in function");
651  }
652
653  private boolean jj_2_1(int xla) {
654    jj_la = xla; jj_lastpos = jj_scanpos = token;
655    try { return !jj_3_1(); }
656    catch(LookaheadSuccess ls) { return true; }
657  }
658
659  private boolean jj_2_2(int xla) {
660    jj_la = xla; jj_lastpos = jj_scanpos = token;
661    try { return !jj_3_2(); }
662    catch(LookaheadSuccess ls) { return true; }
663  }
664
665  private boolean jj_3_2() {
666    if (jj_3R_10()) return true;
667    return false;
668  }
669
670  private boolean jj_3R_9() {
671    if (jj_scan_token(IDENTIFIER)) return true;
672    if (jj_3R_11()) return true;
673    return false;
674  }
675
676  private boolean jj_3R_10() {
677    if (jj_scan_token(IDENTIFIER)) return true;
678    Token xsp;
679    while (true) {
680      xsp = jj_scanpos;
681      if (jj_3R_12()) { jj_scanpos = xsp; break; }
682    }
683    return false;
684  }
685
686  private boolean jj_3_1() {
687    if (jj_3R_9()) return true;
688    return false;
689  }
690
691  private boolean jj_3R_11() {
692    if (jj_scan_token(34)) return true;
693    return false;
694  }
695
696  private boolean jj_3R_12() {
697    if (jj_scan_token(36)) return true;
698    return false;
699  }
700
701  /** Generated Token Manager. */
702  public ExpressionParserTokenManager token_source;
703  JavaCharStream jj_input_stream;
704  /** Current token. */
705  public Token token;
706  /** Next token. */
707  public Token jj_nt;
708  private int jj_ntk;
709  private Token jj_scanpos, jj_lastpos;
710  private int jj_la;
711
712  /** Constructor with InputStream. */
713  public ExpressionParser(java.io.InputStream stream) {
714     this(stream, null);
715  }
716  /** Constructor with InputStream and supplied encoding */
717  public ExpressionParser(java.io.InputStream stream, String encoding) {
718    try { jj_input_stream = new JavaCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
719    token_source = new ExpressionParserTokenManager(jj_input_stream);
720    token = new Token();
721    jj_ntk = -1;
722  }
723
724  /** Reinitialise. */
725  public void ReInit(java.io.InputStream stream) {
726     ReInit(stream, null);
727  }
728  /** Reinitialise. */
729  public void ReInit(java.io.InputStream stream, String encoding) {
730    try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
731    token_source.ReInit(jj_input_stream);
732    token = new Token();
733    jj_ntk = -1;
734  }
735
736  /** Constructor. */
737  public ExpressionParser(java.io.Reader stream) {
738    jj_input_stream = new JavaCharStream(stream, 1, 1);
739    token_source = new ExpressionParserTokenManager(jj_input_stream);
740    token = new Token();
741    jj_ntk = -1;
742  }
743
744  /** Reinitialise. */
745  public void ReInit(java.io.Reader stream) {
746    jj_input_stream.ReInit(stream, 1, 1);
747    token_source.ReInit(jj_input_stream);
748    token = new Token();
749    jj_ntk = -1;
750  }
751
752  /** Constructor with generated Token Manager. */
753  public ExpressionParser(ExpressionParserTokenManager tm) {
754    token_source = tm;
755    token = new Token();
756    jj_ntk = -1;
757  }
758
759  /** Reinitialise. */
760  public void ReInit(ExpressionParserTokenManager tm) {
761    token_source = tm;
762    token = new Token();
763    jj_ntk = -1;
764  }
765
766  private Token jj_consume_token(int kind) throws ParseException {
767    Token oldToken;
768    if ((oldToken = token).next != null) token = token.next;
769    else token = token.next = token_source.getNextToken();
770    jj_ntk = -1;
771    if (token.kind == kind) {
772      return token;
773    }
774    token = oldToken;
775    throw generateParseException();
776  }
777
778  static private final class LookaheadSuccess extends java.lang.Error { }
779  final private LookaheadSuccess jj_ls = new LookaheadSuccess();
780  private boolean jj_scan_token(int kind) {
781    if (jj_scanpos == jj_lastpos) {
782      jj_la--;
783      if (jj_scanpos.next == null) {
784        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
785      } else {
786        jj_lastpos = jj_scanpos = jj_scanpos.next;
787      }
788    } else {
789      jj_scanpos = jj_scanpos.next;
790    }
791    if (jj_scanpos.kind != kind) return true;
792    if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
793    return false;
794  }
795
796
797/** Get the next Token. */
798  final public Token getNextToken() {
799    if (token.next != null) token = token.next;
800    else token = token.next = token_source.getNextToken();
801    jj_ntk = -1;
802    return token;
803  }
804
805/** Get the specific Token. */
806  final public Token getToken(int index) {
807    Token t = token;
808    for (int i = 0; i < index; i++) {
809      if (t.next != null) t = t.next;
810      else t = t.next = token_source.getNextToken();
811    }
812    return t;
813  }
814
815  private int jj_ntk() {
816    if ((jj_nt=token.next) == null)
817      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
818    else
819      return (jj_ntk = jj_nt.kind);
820  }
821
822  /** Generate ParseException. */
823  public ParseException generateParseException() {
824    Token errortok = token.next;
825    int line = errortok.beginLine, column = errortok.beginColumn;
826    String mess = (errortok.kind == 0) ? tokenImage[0] : errortok.image;
827    return new ParseException("Parse error at line " + line + ", column " + column + ".  Encountered: " + mess);
828  }
829
830  /** Enable tracing. */
831  final public void enable_tracing() {
832  }
833
834  /** Disable tracing. */
835  final public void disable_tracing() {
836  }
837
838}
839
840class JTBToolkit {
841   static NodeToken makeNodeToken(Token t) {
842      return new NodeToken(t.image.intern(), t.kind, t.beginLine, t.beginColumn, t.endLine, t.endColumn);
843   }
844}