KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > velocity > runtime > parser > ParserTokenManager


1 /* Generated By:JJTree&JavaCC: Do not edit this line. ParserTokenManager.java */
2 package org.apache.velocity.runtime.parser;
3 import java.io.*;
4 import java.util.*;
5 import org.apache.velocity.runtime.RuntimeServices;
6 import org.apache.velocity.runtime.parser.node.*;
7 import org.apache.velocity.runtime.directive.Directive;
8 import org.apache.velocity.runtime.directive.Macro;
9 import org.apache.velocity.runtime.directive.MacroParseException;
10 import org.apache.velocity.util.StringUtils;
11
12 public class ParserTokenManager implements ParserConstants
13 {
14     private int fileDepth = 0;
15
16     private int lparen = 0;
17     private int rparen = 0;
18
19     Stack stateStack = new Stack();
20     public boolean debugPrint = false;
21
22     private boolean inReference;
23     public boolean inDirective;
24     private boolean inComment;
25     public boolean inSet;
26
27     /**
28      * pushes the current state onto the 'state stack',
29      * and maintains the parens counts
30      * public because we need it in PD & VM handling
31      *
32      * @return boolean : success. It can fail if the state machine
33      * gets messed up (do don't mess it up :)
34      */

35     public boolean stateStackPop()
36     {
37         Hashtable h;
38
39         try
40         {
41             h = (Hashtable) stateStack.pop();
42         }
43         catch( EmptyStackException e)
44         {
45             lparen=0;
46             SwitchTo(DEFAULT);
47             return false;
48         }
49
50         if( debugPrint )
51             System.out.println(
52                 " stack pop (" + stateStack.size() + ") : lparen=" +
53                     ( (Integer JavaDoc) h.get("lparen")).intValue() +
54                         " newstate=" + ( (Integer JavaDoc) h.get("lexstate")).intValue() );
55
56         lparen = ( (Integer JavaDoc) h.get("lparen")).intValue();
57         rparen = ( (Integer JavaDoc) h.get("rparen")).intValue();
58
59         SwitchTo( ( (Integer JavaDoc) h.get("lexstate")).intValue() );
60
61         return true;
62     }
63
64     /**
65      * pops a state off the stack, and restores paren counts
66      *
67      * @return boolean : success of operation
68      */

69     public boolean stateStackPush()
70     {
71         if( debugPrint )
72             System.out.println(" (" + stateStack.size() + ") pushing cur state : " +
73                 curLexState );
74
75         Hashtable h = new Hashtable();
76
77         h.put("lexstate", new Integer JavaDoc( curLexState ) );
78         h.put("lparen", new Integer JavaDoc( lparen ));
79         h.put("rparen", new Integer JavaDoc( rparen ));
80
81         lparen = 0;
82
83         stateStack.push( h );
84
85         return true;
86     }
87
88     /**
89      * Clears all state variables, resets to
90      * start values, clears stateStack. Call
91      * before parsing.
92      * @return void
93      */

94     public void clearStateVars()
95     {
96         stateStack.clear();
97
98         lparen = 0;
99         rparen = 0;
100         inReference = false;
101         inDirective = false;
102         inComment = false;
103         inSet = false;
104
105         return;
106     }
107
108     /**
109      * handles the dropdown logic when encountering a RPAREN
110      */

111     private void RPARENHandler()
112     {
113         /*
114          * Ultimately, we want to drop down to the state below
115          * the one that has an open (if we hit bottom (DEFAULT),
116          * that's fine. It's just text schmoo.
117          */

118
119         boolean closed = false;
120
121         if (inComment)
122             closed = true;
123
124         while( !closed )
125         {
126             /*
127              * look at current state. If we haven't seen a lparen
128              * in this state then we drop a state, because this
129              * lparen clearly closes our state
130              */

131
132             if( lparen > 0)
133             {
134                 /*
135                  * if rparen + 1 == lparen, then this state is closed.
136                  * Otherwise, increment and keep parsing
137                  */

138
139                  if( lparen == rparen + 1)
140                  {
141                        stateStackPop();
142                  }
143                 else
144                 {
145                     rparen++;
146                 }
147
148                  closed = true;
149             }
150             else
151             {
152                 /*
153                  * now, drop a state
154                  */

155
156                 if(!stateStackPop())
157                     break;
158             }
159         }
160     }
161   public java.io.PrintStream JavaDoc debugStream = System.out;
162   public void setDebugStream(java.io.PrintStream JavaDoc ds) { debugStream = ds; }
163 private final int jjStopStringLiteralDfa_0(int pos, long active0)
164 {
165    switch (pos)
166    {
167       case 0:
168          if ((active0 & 0x6000000L) != 0L)
169          {
170             jjmatchedKind = 52;
171             return 33;
172          }
173          if ((active0 & 0x10000000L) != 0L)
174             return 31;
175          if ((active0 & 0xd000L) != 0L)
176             return 7;
177          return -1;
178       case 1:
179          if ((active0 & 0x6000000L) != 0L)
180          {
181             jjmatchedKind = 52;
182             jjmatchedPos = 1;
183             return 33;
184          }
185          if ((active0 & 0x4000L) != 0L)
186             return 5;
187          return -1;
188       case 2:
189          if ((active0 & 0x6000000L) != 0L)
190          {
191             jjmatchedKind = 52;
192             jjmatchedPos = 2;
193             return 33;
194          }
195          return -1;
196       case 3:
197          if ((active0 & 0x4000000L) != 0L)
198          {
199             jjmatchedKind = 52;
200             jjmatchedPos = 3;
201             return 33;
202          }
203          if ((active0 & 0x2000000L) != 0L)
204             return 33;
205          return -1;
206       default :
207          return -1;
208    }
209 }
210 private final int jjStartNfa_0(int pos, long active0)
211 {
212    return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
213 }
214 private final int jjStopAtPos(int pos, int kind)
215 {
216    jjmatchedKind = kind;
217    jjmatchedPos = pos;
218    return pos + 1;
219 }
220 private final int jjStartNfaWithStates_0(int pos, int kind, int state)
221 {
222    jjmatchedKind = kind;
223    jjmatchedPos = pos;
224    try { curChar = input_stream.readChar(); }
225    catch(java.io.IOException JavaDoc e) { return pos + 1; }
226    return jjMoveNfa_0(state, pos + 1);
227 }
228 private final int jjMoveStringLiteralDfa0_0()
229 {
230    switch(curChar)
231    {
232       case 33:
233          jjmatchedKind = 41;
234          return jjMoveStringLiteralDfa1_0(0x10000000000L);
235       case 35:
236          jjmatchedKind = 15;
237          return jjMoveStringLiteralDfa1_0(0x5000L);
238       case 37:
239          return jjStopAtPos(0, 32);
240       case 38:
241          return jjMoveStringLiteralDfa1_0(0x200000000L);
242       case 40:
243          return jjStopAtPos(0, 5);
244       case 42:
245          return jjStopAtPos(0, 30);
246       case 43:
247          return jjStopAtPos(0, 29);
248       case 44:
249          return jjStopAtPos(0, 3);
250       case 45:
251          return jjStartNfaWithStates_0(0, 28, 31);
252       case 46:
253          return jjMoveStringLiteralDfa1_0(0x10L);
254       case 47:
255          return jjStopAtPos(0, 31);
256       case 60:
257          jjmatchedKind = 35;
258          return jjMoveStringLiteralDfa1_0(0x1000000000L);
259       case 61:
260          jjmatchedKind = 42;
261          return jjMoveStringLiteralDfa1_0(0x8000000000L);
262       case 62:
263          jjmatchedKind = 37;
264          return jjMoveStringLiteralDfa1_0(0x4000000000L);
265       case 91:
266          return jjStopAtPos(0, 1);
267       case 93:
268          return jjStopAtPos(0, 2);
269       case 102:
270          return jjMoveStringLiteralDfa1_0(0x4000000L);
271       case 116:
272          return jjMoveStringLiteralDfa1_0(0x2000000L);
273       case 124:
274          return jjMoveStringLiteralDfa1_0(0x400000000L);
275       default :
276          return jjMoveNfa_0(0, 0);
277    }
278 }
279 private final int jjMoveStringLiteralDfa1_0(long active0)
280 {
281    try { curChar = input_stream.readChar(); }
282    catch(java.io.IOException JavaDoc e) {
283       jjStopStringLiteralDfa_0(0, active0);
284       return 1;
285    }
286    switch(curChar)
287    {
288       case 35:
289          if ((active0 & 0x1000L) != 0L)
290             return jjStopAtPos(1, 12);
291          break;
292       case 38:
293          if ((active0 & 0x200000000L) != 0L)
294             return jjStopAtPos(1, 33);
295          break;
296       case 42:
297          if ((active0 & 0x4000L) != 0L)
298             return jjStartNfaWithStates_0(1, 14, 5);
299          break;
300       case 46:
301          if ((active0 & 0x10L) != 0L)
302             return jjStopAtPos(1, 4);
303          break;
304       case 61:
305          if ((active0 & 0x1000000000L) != 0L)
306             return jjStopAtPos(1, 36);
307          else if ((active0 & 0x4000000000L) != 0L)
308             return jjStopAtPos(1, 38);
309          else if ((active0 & 0x8000000000L) != 0L)
310             return jjStopAtPos(1, 39);
311          else if ((active0 & 0x10000000000L) != 0L)
312             return jjStopAtPos(1, 40);
313          break;
314       case 97:
315          return jjMoveStringLiteralDfa2_0(active0, 0x4000000L);
316       case 114:
317          return jjMoveStringLiteralDfa2_0(active0, 0x2000000L);
318       case 124:
319          if ((active0 & 0x400000000L) != 0L)
320             return jjStopAtPos(1, 34);
321          break;
322       default :
323          break;
324    }
325    return jjStartNfa_0(0, active0);
326 }
327 private final int jjMoveStringLiteralDfa2_0(long old0, long active0)
328 {
329    if (((active0 &= old0)) == 0L)
330       return jjStartNfa_0(0, old0);
331    try { curChar = input_stream.readChar(); }
332    catch(java.io.IOException JavaDoc e) {
333       jjStopStringLiteralDfa_0(1, active0);
334       return 2;
335    }
336    switch(curChar)
337    {
338       case 108:
339          return jjMoveStringLiteralDfa3_0(active0, 0x4000000L);
340       case 117:
341          return jjMoveStringLiteralDfa3_0(active0, 0x2000000L);
342       default :
343          break;
344    }
345    return jjStartNfa_0(1, active0);
346 }
347 private final int jjMoveStringLiteralDfa3_0(long old0, long active0)
348 {
349    if (((active0 &= old0)) == 0L)
350       return jjStartNfa_0(1, old0);
351    try { curChar = input_stream.readChar(); }
352    catch(java.io.IOException JavaDoc e) {
353       jjStopStringLiteralDfa_0(2, active0);
354       return 3;
355    }
356    switch(curChar)
357    {
358       case 101:
359          if ((active0 & 0x2000000L) != 0L)
360             return jjStartNfaWithStates_0(3, 25, 33);
361          break;
362       case 115:
363          return jjMoveStringLiteralDfa4_0(active0, 0x4000000L);
364       default :
365          break;
366    }
367    return jjStartNfa_0(2, active0);
368 }
369 private final int jjMoveStringLiteralDfa4_0(long old0, long active0)
370 {
371    if (((active0 &= old0)) == 0L)
372       return jjStartNfa_0(2, old0);
373    try { curChar = input_stream.readChar(); }
374    catch(java.io.IOException JavaDoc e) {
375       jjStopStringLiteralDfa_0(3, active0);
376       return 4;
377    }
378    switch(curChar)
379    {
380       case 101:
381          if ((active0 & 0x4000000L) != 0L)
382             return jjStartNfaWithStates_0(4, 26, 33);
383          break;
384       default :
385          break;
386    }
387    return jjStartNfa_0(3, active0);
388 }
389 private final void jjCheckNAdd(int state)
390 {
391    if (jjrounds[state] != jjround)
392    {
393       jjstateSet[jjnewStateCnt++] = state;
394       jjrounds[state] = jjround;
395    }
396 }
397 private final void jjAddStates(int start, int end)
398 {
399    do {
400       jjstateSet[jjnewStateCnt++] = jjnextStates[start];
401    } while (start++ != end);
402 }
403 private final void jjCheckNAddTwoStates(int state1, int state2)
404 {
405    jjCheckNAdd(state1);
406    jjCheckNAdd(state2);
407 }
408 private final void jjCheckNAddStates(int start, int end)
409 {
410    do {
411       jjCheckNAdd(jjnextStates[start]);
412    } while (start++ != end);
413 }
414 private final void jjCheckNAddStates(int start)
415 {
416    jjCheckNAdd(jjnextStates[start]);
417    jjCheckNAdd(jjnextStates[start + 1]);
418 }
419 static final long[] jjbitVec0 = {
420    0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
421 };
422 static final long[] jjbitVec2 = {
423    0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
424 };
425 private final int jjMoveNfa_0(int startState, int curPos)
426 {
427    int[] nextStates;
428    int startsAt = 0;
429    jjnewStateCnt = 42;
430    int i = 1;
431    jjstateSet[0] = startState;
432    int j, kind = 0x7fffffff;
433    for (;;)
434    {
435       if (++jjround == 0x7fffffff)
436          ReInitRounds();
437       if (curChar < 64)
438       {
439          long l = 1L << curChar;
440          MatchLoop: do
441          {
442             switch(jjstateSet[--i])
443             {
444                case 0:
445                   if ((0x3ff000000000000L & l) != 0L)
446                   {
447                      if (kind > 49)
448                         kind = 49;
449                      jjCheckNAdd(31);
450                   }
451                   else if ((0x2400L & l) != 0L)
452                   {
453                      if (kind > 27)
454                         kind = 27;
455                   }
456                   else if ((0x100000200L & l) != 0L)
457                   {
458                      if (kind > 23)
459                         kind = 23;
460                      jjCheckNAdd(9);
461                   }
462                   else if (curChar == 36)
463                   {
464                      if (kind > 10)
465                         kind = 10;
466                      jjCheckNAddTwoStates(39, 40);
467                   }
468                   else if (curChar == 45)
469                      jjCheckNAdd(31);
470                   else if (curChar == 39)
471                      jjCheckNAddStates(0, 2);
472                   else if (curChar == 34)
473                      jjCheckNAddStates(3, 5);
474                   else if (curChar == 35)
475                      jjstateSet[jjnewStateCnt++] = 7;
476                   else if (curChar == 41)
477                   {
478                      if (kind > 6)
479                         kind = 6;
480                      jjCheckNAddStates(6, 8);
481                   }
482                   if (curChar == 13)
483                      jjstateSet[jjnewStateCnt++] = 28;
484                   break;
485                case 1:
486                   if ((0x100000200L & l) != 0L)
487                      jjCheckNAddStates(6, 8);
488                   break;
489                case 2:
490                   if ((0x2400L & l) != 0L && kind > 6)
491                      kind = 6;
492                   break;
493                case 3:
494                   if (curChar == 10 && kind > 6)
495                      kind = 6;
496                   break;
497                case 4:
498                   if (curChar == 13)
499                      jjstateSet[jjnewStateCnt++] = 3;
500                   break;
501                case 5:
502                   if (curChar == 42)
503                      jjstateSet[jjnewStateCnt++] = 6;
504                   break;
505                case 6:
506                   if ((0xfffffff7ffffffffL & l) != 0L && kind > 13)
507                      kind = 13;
508                   break;
509                case 7:
510                   if (curChar == 42)
511                      jjstateSet[jjnewStateCnt++] = 5;
512                   break;
513                case 8:
514                   if (curChar == 35)
515                      jjstateSet[jjnewStateCnt++] = 7;
516                   break;
517                case 9:
518                   if ((0x100000200L & l) == 0L)
519                      break;
520                   if (kind > 23)
521                      kind = 23;
522                   jjCheckNAdd(9);
523                   break;
524                case 10:
525                   if (curChar == 34)
526                      jjCheckNAddStates(3, 5);
527                   break;
528                case 11:
529                   if ((0xfffffffbffffdbffL & l) != 0L)
530                      jjCheckNAddStates(3, 5);
531                   break;
532                case 12:
533                   if (curChar == 34 && kind > 24)
534                      kind = 24;
535                   break;
536                case 14:
537                   if ((0x8400000000L & l) != 0L)
538                      jjCheckNAddStates(3, 5);
539                   break;
540                case 15:
541                   if ((0xff000000000000L & l) != 0L)
542                      jjCheckNAddStates(9, 12);
543                   break;
544                case 16:
545                   if ((0xff000000000000L & l) != 0L)
546                      jjCheckNAddStates(3, 5);
547                   break;
548                case 17:
549                   if ((0xf000000000000L & l) != 0L)
550                      jjstateSet[jjnewStateCnt++] = 18;
551                   break;
552                case 18:
553                   if ((0xff000000000000L & l) != 0L)
554                      jjCheckNAdd(16);
555                   break;
556                case 19:
557                   if (curChar == 32)
558                      jjAddStates(13, 14);
559                   break;
560                case 20:
561                   if (curChar == 10)
562                      jjCheckNAddStates(3, 5);
563                   break;
564                case 21:
565                   if (curChar == 39)
566                      jjCheckNAddStates(0, 2);
567                   break;
568                case 22:
569                   if ((0xffffff7fffffdbffL & l) != 0L)
570                      jjCheckNAddStates(0, 2);
571                   break;
572                case 24:
573                   if (curChar == 32)
574                      jjAddStates(15, 16);
575                   break;
576                case 25:
577                   if (curChar == 10)
578                      jjCheckNAddStates(0, 2);
579                   break;
580                case 26:
581                   if (curChar == 39 && kind > 24)
582                      kind = 24;
583                   break;
584                case 27:
585                   if ((0x2400L & l) != 0L && kind > 27)
586                      kind = 27;
587                   break;
588                case 28:
589                   if (curChar == 10 && kind > 27)
590                      kind = 27;
591                   break;
592                case 29:
593                   if (curChar == 13)
594                      jjstateSet[jjnewStateCnt++] = 28;
595                   break;
596                case 30:
597                   if (curChar == 45)
598                      jjCheckNAdd(31);
599                   break;
600                case 31:
601                   if ((0x3ff000000000000L & l) == 0L)
602                      break;
603                   if (kind > 49)
604                      kind = 49;
605                   jjCheckNAdd(31);
606                   break;
607                case 33:
608                   if ((0x3ff000000000000L & l) == 0L)
609                      break;
610                   if (kind > 52)
611                      kind = 52;
612                   jjstateSet[jjnewStateCnt++] = 33;
613                   break;
614                case 36:
615                   if (curChar == 36 && kind > 10)
616                      kind = 10;
617                   break;
618                case 38:
619                   if (curChar == 36)
620                      jjCheckNAddTwoStates(39, 40);
621                   break;
622                case 40:
623                   if (curChar == 33 && kind > 11)
624                      kind = 11;
625                   break;
626                case 41:
627                   if (curChar != 36)
628                      break;
629                   if (kind > 10)
630                      kind = 10;
631                   jjCheckNAddTwoStates(39, 40);
632                   break;
633                default : break;
634             }
635          } while(i != startsAt);
636       }
637       else if (curChar < 128)
638       {
639          long l = 1L << (curChar & 077);
640          MatchLoop: do
641          {
642             switch(jjstateSet[--i])
643             {
644                case 0:
645                   if ((0x7fffffe87fffffeL & l) != 0L)
646                   {
647                      if (kind > 52)
648                         kind = 52;
649                      jjCheckNAdd(33);
650                   }
651                   else if (curChar == 92)
652                      jjCheckNAddStates(17, 20);
653                   break;
654                case 6:
655                   if (kind > 13)
656                      kind = 13;
657                   break;
658                case 11:
659                   if ((0xffffffffefffffffL & l) != 0L)
660                      jjCheckNAddStates(3, 5);
661                   break;
662                case 13:
663                   if (curChar == 92)
664                      jjAddStates(21, 25);
665                   break;
666                case 14:
667                   if ((0x14404410000000L & l) != 0L)
668                      jjCheckNAddStates(3, 5);
669                   break;
670                case 22:
671                   jjAddStates(0, 2);
672                   break;
673                case 23:
674                   if (curChar == 92)
675                      jjAddStates(15, 16);
676                   break;
677                case 32:
678                case 33:
679                   if ((0x7fffffe87fffffeL & l) == 0L)
680                      break;
681                   if (kind > 52)
682                      kind = 52;
683                   jjCheckNAdd(33);
684                   break;
685                case 34:
686                   if (curChar == 92)
687                      jjCheckNAddStates(17, 20);
688                   break;
689                case 35:
690                   if (curChar == 92)
691                      jjCheckNAddTwoStates(35, 36);
692                   break;
693                case 37:
694                   if (curChar == 92)
695                      jjCheckNAddTwoStates(37, 38);
696                   break;
697                case 39:
698                   if (curChar == 92)
699                      jjAddStates(26, 27);
700                   break;
701                default : break;
702             }
703          } while(i != startsAt);
704       }
705       else
706       {
707          int hiByte = (int)(curChar >> 8);
708          int i1 = hiByte >> 6;
709          long l1 = 1L << (hiByte & 077);
710          int i2 = (curChar & 0xff) >> 6;
711          long l2 = 1L << (curChar & 077);
712          MatchLoop: do
713          {
714             switch(jjstateSet[--i])
715             {
716                case 6:
717                   if (jjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 13)
718                      kind = 13;
719                   break;
720                case 11:
721                   if (jjCanMove_0(hiByte, i1, i2, l1, l2))
722                      jjAddStates(3, 5);
723                   break;
724                case 22:
725                   if (jjCanMove_0(hiByte, i1, i2, l1, l2))
726                      jjAddStates(0, 2);
727                   break;
728                default : break;
729             }
730          } while(i != startsAt);
731       }
732       if (kind != 0x7fffffff)
733       {
734          jjmatchedKind = kind;
735          jjmatchedPos = curPos;
736          kind = 0x7fffffff;
737       }
738       ++curPos;
739       if ((i = jjnewStateCnt) ==