001/* Generated By:JJTree&JavaCC: Do not edit this line. MatrixParserTokenManager.java */
002/* Parser for matrices written in matlab format.
003
004 Copyright (c) 1998-2008 The Regents of the University of California.
005 All rights reserved.
006 Permission is hereby granted, without written agreement and without
007 license or royalty fees, to use, copy, modify, and distribute this
008 software and its documentation for any purpose, provided that the above
009 copyright notice and the following two paragraphs appear in all copies
010 of this software.
011
012 IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
013 FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
014 ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
015 THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
016 SUCH DAMAGE.
017
018 THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
019 INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
020 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
021 PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
022 CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
023 ENHANCEMENTS, OR MODIFICATIONS.
024
025                                        PT_COPYRIGHT_VERSION_2
026                                        COPYRIGHTENDKEY
027*/
028package ptolemy.data.expr;
029
030/** Token Manager. */
031public class MatrixParserTokenManager implements MatrixParserConstants {
032
033    /** Debug output. */
034    public java.io.PrintStream debugStream = System.out;
035
036    /** Set debug output. */
037    public void setDebugStream(java.io.PrintStream ds) {
038        debugStream = ds;
039    }
040
041    private int jjStopAtPos(int pos, int kind) {
042        jjmatchedKind = kind;
043        jjmatchedPos = pos;
044        return pos + 1;
045    }
046
047    private int jjMoveStringLiteralDfa0_0() {
048        switch (curChar) {
049        case 44:
050            return jjStopAtPos(0, 16);
051        case 59:
052            return jjStopAtPos(0, 14);
053        case 91:
054            return jjStopAtPos(0, 13);
055        case 93:
056            return jjStopAtPos(0, 15);
057        default:
058            return jjMoveNfa_0(2, 0);
059        }
060    }
061
062    static final long[] jjbitVec0 = { 0x0L, 0x0L, 0xffffffffffffffffL,
063            0xffffffffffffffffL };
064
065    private int jjMoveNfa_0(int startState, int curPos) {
066        int startsAt = 0;
067        jjnewStateCnt = 23;
068        int i = 1;
069        jjstateSet[0] = startState;
070        int kind = 0x7fffffff;
071        for (;;) {
072            if (++jjround == 0x7fffffff) {
073                ReInitRounds();
074            }
075            if (curChar < 64) {
076                long l = 1L << curChar;
077                do {
078                    switch (jjstateSet[--i]) {
079                    case 2:
080                        if ((0x3ff000000000000L & l) != 0L) {
081                            if (kind > 5) {
082                                kind = 5;
083                            }
084                            jjCheckNAddStates(0, 7);
085                        } else if ((0x280000000000L & l) != 0L) {
086                            if (kind > 11) {
087                                kind = 11;
088                            }
089                        } else if (curChar == 46) {
090                            jjCheckNAddTwoStates(7, 11);
091                        } else if (curChar == 35) {
092                            jjCheckNAddTwoStates(4, 5);
093                        }
094                        break;
095                    case 1:
096                        if ((0x3ff008000000000L & l) == 0L) {
097                            break;
098                        }
099                        if (kind > 9) {
100                            kind = 9;
101                        }
102                        jjstateSet[jjnewStateCnt++] = 1;
103                        break;
104                    case 3:
105                        if (curChar == 35) {
106                            jjCheckNAddTwoStates(4, 5);
107                        }
108                        break;
109                    case 4:
110                        if ((0xffffffffffffdbffL & l) != 0L) {
111                            jjCheckNAddTwoStates(4, 5);
112                        }
113                        break;
114                    case 5:
115                        if ((0x2400L & l) != 0L) {
116                            kind = 12;
117                        }
118                        break;
119                    case 6:
120                        if (curChar == 46) {
121                            jjCheckNAddTwoStates(7, 11);
122                        }
123                        break;
124                    case 7:
125                        if ((0x3ff000000000000L & l) == 0L) {
126                            break;
127                        }
128                        if (kind > 5) {
129                            kind = 5;
130                        }
131                        jjCheckNAddTwoStates(7, 8);
132                        break;
133                    case 9:
134                        if ((0x280000000000L & l) != 0L) {
135                            jjCheckNAdd(10);
136                        }
137                        break;
138                    case 10:
139                        if ((0x3ff000000000000L & l) == 0L) {
140                            break;
141                        }
142                        if (kind > 5) {
143                            kind = 5;
144                        }
145                        jjCheckNAdd(10);
146                        break;
147                    case 11:
148                        if ((0x3ff000000000000L & l) == 0L) {
149                            break;
150                        }
151                        if (kind > 5) {
152                            kind = 5;
153                        }
154                        jjCheckNAdd(11);
155                        break;
156                    case 12:
157                        if ((0x3ff000000000000L & l) == 0L) {
158                            break;
159                        }
160                        if (kind > 5) {
161                            kind = 5;
162                        }
163                        jjCheckNAddStates(0, 7);
164                        break;
165                    case 13:
166                        if ((0x3ff000000000000L & l) == 0L) {
167                            break;
168                        }
169                        if (kind > 5) {
170                            kind = 5;
171                        }
172                        jjCheckNAddTwoStates(13, 8);
173                        break;
174                    case 14:
175                        if ((0x3ff000000000000L & l) == 0L) {
176                            break;
177                        }
178                        if (kind > 5) {
179                            kind = 5;
180                        }
181                        jjCheckNAddStates(8, 10);
182                        break;
183                    case 15:
184                        if (curChar == 46) {
185                            jjCheckNAdd(16);
186                        }
187                        break;
188                    case 16:
189                        if ((0x3ff000000000000L & l) == 0L) {
190                            break;
191                        }
192                        if (kind > 5) {
193                            kind = 5;
194                        }
195                        jjCheckNAddTwoStates(16, 8);
196                        break;
197                    case 17:
198                        if ((0x3ff000000000000L & l) == 0L) {
199                            break;
200                        }
201                        if (kind > 5) {
202                            kind = 5;
203                        }
204                        jjCheckNAddTwoStates(17, 18);
205                        break;
206                    case 18:
207                        if (curChar == 46) {
208                            jjCheckNAdd(19);
209                        }
210                        break;
211                    case 19:
212                        if ((0x3ff000000000000L & l) == 0L) {
213                            break;
214                        }
215                        if (kind > 5) {
216                            kind = 5;
217                        }
218                        jjCheckNAdd(19);
219                        break;
220                    case 20:
221                        if ((0x3ff000000000000L & l) == 0L) {
222                            break;
223                        }
224                        if (kind > 5) {
225                            kind = 5;
226                        }
227                        jjCheckNAdd(20);
228                        break;
229                    case 21:
230                        if ((0x3ff000000000000L & l) == 0L) {
231                            break;
232                        }
233                        if (kind > 10) {
234                            kind = 10;
235                        }
236                        jjCheckNAddTwoStates(22, 21);
237                        break;
238                    case 22:
239                        if ((0x3ff000000000000L & l) == 0L) {
240                            break;
241                        }
242                        if (kind > 10) {
243                            kind = 10;
244                        }
245                        jjCheckNAdd(22);
246                        break;
247                    default:
248                        break;
249                    }
250                } while (i != startsAt);
251            } else if (curChar < 128) {
252                long l = 1L << (curChar & 077);
253                do {
254                    switch (jjstateSet[--i]) {
255                    case 2:
256                    case 0:
257                        if ((0x7fffffe87fffffeL & l) == 0L) {
258                            break;
259                        }
260                        if (kind > 9) {
261                            kind = 9;
262                        }
263                        jjCheckNAddTwoStates(0, 1);
264                        break;
265                    case 1:
266                        if ((0x7fffffe87fffffeL & l) == 0L) {
267                            break;
268                        }
269                        if (kind > 9) {
270                            kind = 9;
271                        }
272                        jjCheckNAdd(1);
273                        break;
274                    case 4:
275                        jjAddStates(11, 12);
276                        break;
277                    case 8:
278                        if ((0x2000000020L & l) != 0L) {
279                            jjAddStates(13, 14);
280                        }
281                        break;
282                    default:
283                        break;
284                    }
285                } while (i != startsAt);
286            } else {
287                int i2 = (curChar & 0xff) >> 6;
288                long l2 = 1L << (curChar & 077);
289                do {
290                    switch (jjstateSet[--i]) {
291                    case 4:
292                        if ((jjbitVec0[i2] & l2) != 0L) {
293                            jjAddStates(11, 12);
294                        }
295                        break;
296                    default:
297                        break;
298                    }
299                } while (i != startsAt);
300            }
301            if (kind != 0x7fffffff) {
302                jjmatchedKind = kind;
303                jjmatchedPos = curPos;
304                kind = 0x7fffffff;
305            }
306            ++curPos;
307            if ((i = jjnewStateCnt) == (startsAt = 23
308                    - (jjnewStateCnt = startsAt))) {
309                return curPos;
310            }
311            try {
312                curChar = input_stream.readChar();
313            } catch (java.io.IOException e) {
314                return curPos;
315            }
316        }
317    }
318
319    static final int[] jjnextStates = { 13, 14, 15, 8, 17, 18, 20, 21, 14, 15,
320            8, 4, 5, 9, 10, };
321
322    /** Token literal values. */
323    public static final String[] jjstrLiteralImages = { "", null, null, null,
324            null, null, null, null, null, null, null, null, null, "\133", "\73",
325            "\135", "\54", };
326
327    /** Lexer state names. */
328    public static final String[] lexStateNames = { "DEFAULT", };
329    static final long[] jjtoToken = { 0x1ee21L, };
330    static final long[] jjtoSkip = { 0x101eL, };
331    static final long[] jjtoSpecial = { 0x1000L, };
332    protected SimpleCharStream input_stream;
333    private final int[] jjrounds = new int[23];
334    private final int[] jjstateSet = new int[46];
335    protected char curChar;
336
337    /** Constructor. */
338    public MatrixParserTokenManager(SimpleCharStream stream) {
339        if (SimpleCharStream.staticFlag) {
340            throw new Error(
341                    "ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
342        }
343        input_stream = stream;
344    }
345
346    /** Constructor. */
347    public MatrixParserTokenManager(SimpleCharStream stream, int lexState) {
348        this(stream);
349        SwitchTo(lexState);
350    }
351
352    /** Reinitialise parser. */
353    public void ReInit(SimpleCharStream stream) {
354        jjmatchedPos = jjnewStateCnt = 0;
355        curLexState = defaultLexState;
356        input_stream = stream;
357        ReInitRounds();
358    }
359
360    private void ReInitRounds() {
361        int i;
362        jjround = 0x80000001;
363        for (i = 23; i-- > 0;) {
364            jjrounds[i] = 0x80000000;
365        }
366    }
367
368    /** Reinitialise parser. */
369    public void ReInit(SimpleCharStream stream, int lexState) {
370        ReInit(stream);
371        SwitchTo(lexState);
372    }
373
374    /** Switch to specified lex state. */
375    public void SwitchTo(int lexState) {
376        if (lexState >= 1 || lexState < 0) {
377            throw new TokenMgrError(
378                    "Error: Ignoring invalid lexical state : " + lexState
379                            + ". State unchanged.",
380                    TokenMgrError.INVALID_LEXICAL_STATE);
381        } else {
382            curLexState = lexState;
383        }
384    }
385
386    protected Token jjFillToken() {
387        final Token t;
388        final String curTokenImage;
389        final int beginLine;
390        final int endLine;
391        final int beginColumn;
392        final int endColumn;
393        String im = jjstrLiteralImages[jjmatchedKind];
394        curTokenImage = (im == null) ? input_stream.GetImage() : im;
395        beginLine = input_stream.getBeginLine();
396        beginColumn = input_stream.getBeginColumn();
397        endLine = input_stream.getEndLine();
398        endColumn = input_stream.getEndColumn();
399        t = Token.newToken(jjmatchedKind, curTokenImage);
400
401        t.beginLine = beginLine;
402        t.endLine = endLine;
403        t.beginColumn = beginColumn;
404        t.endColumn = endColumn;
405
406        return t;
407    }
408
409    int curLexState = 0;
410    int defaultLexState = 0;
411    int jjnewStateCnt;
412    int jjround;
413    int jjmatchedPos;
414    int jjmatchedKind;
415
416    /** Get the next Token. */
417    public Token getNextToken() {
418        Token specialToken = null;
419        Token matchedToken;
420        int curPos = 0;
421
422        EOFLoop: for (;;) {
423            try {
424                curChar = input_stream.BeginToken();
425            } catch (java.io.IOException e) {
426                jjmatchedKind = 0;
427                matchedToken = jjFillToken();
428                matchedToken.specialToken = specialToken;
429                return matchedToken;
430            }
431
432            try {
433                input_stream.backup(0);
434                while (curChar <= 32
435                        && (0x100002600L & (1L << curChar)) != 0L) {
436                    curChar = input_stream.BeginToken();
437                }
438            } catch (java.io.IOException e1) {
439                continue EOFLoop;
440            }
441            jjmatchedKind = 0x7fffffff;
442            jjmatchedPos = 0;
443            curPos = jjMoveStringLiteralDfa0_0();
444            if (jjmatchedKind != 0x7fffffff) {
445                if (jjmatchedPos + 1 < curPos) {
446                    input_stream.backup(curPos - jjmatchedPos - 1);
447                }
448                if ((jjtoToken[jjmatchedKind >> 6]
449                        & (1L << (jjmatchedKind & 077))) != 0L) {
450                    matchedToken = jjFillToken();
451                    matchedToken.specialToken = specialToken;
452                    return matchedToken;
453                } else {
454                    if ((jjtoSpecial[jjmatchedKind >> 6]
455                            & (1L << (jjmatchedKind & 077))) != 0L) {
456                        matchedToken = jjFillToken();
457                        if (specialToken == null) {
458                            specialToken = matchedToken;
459                        } else {
460                            matchedToken.specialToken = specialToken;
461                            specialToken = (specialToken.next = matchedToken);
462                        }
463                    }
464                    continue EOFLoop;
465                }
466            }
467            int error_line = input_stream.getEndLine();
468            int error_column = input_stream.getEndColumn();
469            String error_after = null;
470            boolean EOFSeen = false;
471            try {
472                input_stream.readChar();
473                input_stream.backup(1);
474            } catch (java.io.IOException e1) {
475                EOFSeen = true;
476                error_after = curPos <= 1 ? "" : input_stream.GetImage();
477                if (curChar == '\n' || curChar == '\r') {
478                    error_line++;
479                    error_column = 0;
480                } else {
481                    error_column++;
482                }
483            }
484            if (!EOFSeen) {
485                input_stream.backup(1);
486                error_after = curPos <= 1 ? "" : input_stream.GetImage();
487            }
488            throw new TokenMgrError(EOFSeen, curLexState, error_line,
489                    error_column, error_after, curChar,
490                    TokenMgrError.LEXICAL_ERROR);
491        }
492    }
493
494    private void jjCheckNAdd(int state) {
495        if (jjrounds[state] != jjround) {
496            jjstateSet[jjnewStateCnt++] = state;
497            jjrounds[state] = jjround;
498        }
499    }
500
501    private void jjAddStates(int start, int end) {
502        do {
503            jjstateSet[jjnewStateCnt++] = jjnextStates[start];
504        } while (start++ != end);
505    }
506
507    private void jjCheckNAddTwoStates(int state1, int state2) {
508        jjCheckNAdd(state1);
509        jjCheckNAdd(state2);
510    }
511
512    private void jjCheckNAddStates(int start, int end) {
513        do {
514            jjCheckNAdd(jjnextStates[start]);
515        } while (start++ != end);
516    }
517
518}