1
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2
* This file is part of SableCC. *
3
* See the file "LICENSE" for copyright information and the *
4
* terms and conditions for copying, distribution and *
5
* modification of SableCC. *
6
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1
/* This file was generated by SableCC (http://www.sablecc.org/). */
8
3
package org.sablecc.sablecc.lexer;
11
import java.util.Stack;
12
import java.util.Vector;
15
7
import org.sablecc.sablecc.node.*;
17
public final class Lexer
19
private final Reader in;
21
public Lexer(Reader in)
28
public Token peek() throws LexerException, IOException
38
public Token next() throws LexerException, IOException
55
private Token getToken() throws IOException, LexerException
60
int start_line = line;
62
int accept_state = -1;
63
int accept_token = -1;
64
int accept_length = -1;
68
StringBuffer text = new StringBuffer();
100
text.append((char) c);
102
int oldState = state;
106
int high = gotoTable[oldState].length - 1;
110
int middle = (low + high) / 2;
112
if(c < gotoTable[oldState][middle][0])
116
else if(c > gotoTable[oldState][middle][1])
122
state = gotoTable[oldState][middle][2];
134
if(accept[state] != -1)
136
accept_state = state;
137
accept_token = accept[state];
138
accept_length = text.length();
145
if(accept_state != -1)
151
TPackage token = new TPackage();
152
token.setPos(start_pos + 1);
153
token.setLine(start_line + 1);
154
token.setText(text.toString().substring(0, accept_length));
155
pushBack(text.toString().substring(accept_length));
162
TStates token = new TStates();
163
token.setPos(start_pos + 1);
164
token.setLine(start_line + 1);
165
token.setText(text.toString().substring(0, accept_length));
166
pushBack(text.toString().substring(accept_length));
173
THelpers token = new THelpers();
174
token.setPos(start_pos + 1);
175
token.setLine(start_line + 1);
176
token.setText(text.toString().substring(0, accept_length));
177
pushBack(text.toString().substring(accept_length));
184
TTokens token = new TTokens();
185
token.setPos(start_pos + 1);
186
token.setLine(start_line + 1);
187
token.setText(text.toString().substring(0, accept_length));
188
pushBack(text.toString().substring(accept_length));
195
TIgnored token = new TIgnored();
196
token.setPos(start_pos + 1);
197
token.setLine(start_line + 1);
198
token.setText(text.toString().substring(0, accept_length));
199
pushBack(text.toString().substring(accept_length));
206
TProductions token = new TProductions();
207
token.setPos(start_pos + 1);
208
token.setLine(start_line + 1);
209
token.setText(text.toString().substring(0, accept_length));
210
pushBack(text.toString().substring(accept_length));
217
TTokenSpecifier token = new TTokenSpecifier();
218
token.setPos(start_pos + 1);
219
token.setLine(start_line + 1);
220
token.setText(text.toString().substring(0, accept_length));
221
pushBack(text.toString().substring(accept_length));
228
TProductionSpecifier token = new TProductionSpecifier();
229
token.setPos(start_pos + 1);
230
token.setLine(start_line + 1);
231
token.setText(text.toString().substring(0, accept_length));
232
pushBack(text.toString().substring(accept_length));
239
TDot token = new TDot();
240
token.setPos(start_pos + 1);
241
token.setLine(start_line + 1);
242
token.setText(text.toString().substring(0, accept_length));
243
pushBack(text.toString().substring(accept_length));
250
TDDot token = new TDDot();
251
token.setPos(start_pos + 1);
252
token.setLine(start_line + 1);
253
token.setText(text.toString().substring(0, accept_length));
254
pushBack(text.toString().substring(accept_length));
261
TSemicolon token = new TSemicolon();
262
token.setPos(start_pos + 1);
263
token.setLine(start_line + 1);
264
token.setText(text.toString().substring(0, accept_length));
265
pushBack(text.toString().substring(accept_length));
272
TEqual token = new TEqual();
273
token.setPos(start_pos + 1);
274
token.setLine(start_line + 1);
275
token.setText(text.toString().substring(0, accept_length));
276
pushBack(text.toString().substring(accept_length));
283
TLBkt token = new TLBkt();
284
token.setPos(start_pos + 1);
285
token.setLine(start_line + 1);
286
token.setText(text.toString().substring(0, accept_length));
287
pushBack(text.toString().substring(accept_length));
294
TRBkt token = new TRBkt();
295
token.setPos(start_pos + 1);
296
token.setLine(start_line + 1);
297
token.setText(text.toString().substring(0, accept_length));
298
pushBack(text.toString().substring(accept_length));
305
TLPar token = new TLPar();
306
token.setPos(start_pos + 1);
307
token.setLine(start_line + 1);
308
token.setText(text.toString().substring(0, accept_length));
309
pushBack(text.toString().substring(accept_length));
316
TRPar token = new TRPar();
317
token.setPos(start_pos + 1);
318
token.setLine(start_line + 1);
319
token.setText(text.toString().substring(0, accept_length));
320
pushBack(text.toString().substring(accept_length));
327
TLBrace token = new TLBrace();
328
token.setPos(start_pos + 1);
329
token.setLine(start_line + 1);
330
token.setText(text.toString().substring(0, accept_length));
331
pushBack(text.toString().substring(accept_length));
338
TRBrace token = new TRBrace();
339
token.setPos(start_pos + 1);
340
token.setLine(start_line + 1);
341
token.setText(text.toString().substring(0, accept_length));
342
pushBack(text.toString().substring(accept_length));
349
TPlus token = new TPlus();
350
token.setPos(start_pos + 1);
351
token.setLine(start_line + 1);
352
token.setText(text.toString().substring(0, accept_length));
353
pushBack(text.toString().substring(accept_length));
360
TMinus token = new TMinus();
361
token.setPos(start_pos + 1);
362
token.setLine(start_line + 1);
363
token.setText(text.toString().substring(0, accept_length));
364
pushBack(text.toString().substring(accept_length));
371
TQMark token = new TQMark();
372
token.setPos(start_pos + 1);
373
token.setLine(start_line + 1);
374
token.setText(text.toString().substring(0, accept_length));
375
pushBack(text.toString().substring(accept_length));
382
TStar token = new TStar();
383
token.setPos(start_pos + 1);
384
token.setLine(start_line + 1);
385
token.setText(text.toString().substring(0, accept_length));
386
pushBack(text.toString().substring(accept_length));
393
TBar token = new TBar();
394
token.setPos(start_pos + 1);
395
token.setLine(start_line + 1);
396
token.setText(text.toString().substring(0, accept_length));
397
pushBack(text.toString().substring(accept_length));
404
TComma token = new TComma();
405
token.setPos(start_pos + 1);
406
token.setLine(start_line + 1);
407
token.setText(text.toString().substring(0, accept_length));
408
pushBack(text.toString().substring(accept_length));
415
TSlash token = new TSlash();
416
token.setPos(start_pos + 1);
417
token.setLine(start_line + 1);
418
token.setText(text.toString().substring(0, accept_length));
419
pushBack(text.toString().substring(accept_length));
426
TArrow token = new TArrow();
427
token.setPos(start_pos + 1);
428
token.setLine(start_line + 1);
429
token.setText(text.toString().substring(0, accept_length));
430
pushBack(text.toString().substring(accept_length));
437
TColon token = new TColon();
438
token.setPos(start_pos + 1);
439
token.setLine(start_line + 1);
440
token.setText(text.toString().substring(0, accept_length));
441
pushBack(text.toString().substring(accept_length));
448
TId token = new TId();
449
token.setPos(start_pos + 1);
450
token.setLine(start_line + 1);
451
token.setText(text.toString().substring(0, accept_length));
452
pushBack(text.toString().substring(accept_length));
459
TChar token = new TChar();
460
token.setPos(start_pos + 1);
461
token.setLine(start_line + 1);
462
token.setText(text.toString().substring(0, accept_length));
463
pushBack(text.toString().substring(accept_length));
470
TDecChar token = new TDecChar();
471
token.setPos(start_pos + 1);
472
token.setLine(start_line + 1);
473
token.setText(text.toString().substring(0, accept_length));
474
pushBack(text.toString().substring(accept_length));
481
THexChar token = new THexChar();
482
token.setPos(start_pos + 1);
483
token.setLine(start_line + 1);
484
token.setText(text.toString().substring(0, accept_length));
485
pushBack(text.toString().substring(accept_length));
492
TString token = new TString();
493
token.setPos(start_pos + 1);
494
token.setLine(start_line + 1);
495
token.setText(text.toString().substring(0, accept_length));
496
pushBack(text.toString().substring(accept_length));
503
TPkgId token = new TPkgId();
504
token.setPos(start_pos + 1);
505
token.setLine(start_line + 1);
506
token.setText(text.toString().substring(0, accept_length));
507
pushBack(text.toString().substring(accept_length));
514
TBlank token = new TBlank();
515
token.setPos(start_pos + 1);
516
token.setLine(start_line + 1);
517
token.setText(text.toString().substring(0, accept_length));
518
pushBack(text.toString().substring(accept_length));
525
TComment token = new TComment();
526
token.setPos(start_pos + 1);
527
token.setLine(start_line + 1);
528
token.setText(text.toString().substring(0, accept_length));
529
pushBack(text.toString().substring(accept_length));
538
if(text.length() > 0)
540
throw new LexerException(
541
"[" + (start_line + 1) + "," + (start_pos + 1) + "]" +
542
" Unknown token: " + text);
546
EOF token = new EOF();
547
token.setPos(start_pos + 1);
548
token.setLine(start_line + 1);
556
private final Stack chars = new Stack();
559
private int getChar() throws IOException
563
return ((Integer) chars.pop()).intValue();
571
int result = in.read();
581
private void pushBack(String text)
583
for(int i = text.length() - 1; i >= 0; i--)
585
chars.push(new Integer((int) text.charAt(i)));
589
private static int[][][] gotoTable =
591
{{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, {36, 36, 5}, {39, 39, 6}, {40, 40, 7}, {41, 41, 8}, {42, 42, 9}, {43, 43, 10}, {44, 44, 11}, {45, 45, 12}, {46, 46, 13}, {47, 47, 14}, {48, 48, 15}, {49, 57, 16}, {58, 58, 17}, {59, 59, 18}, {61, 61, 19}, {63, 63, 20}, {65, 71, 21}, {72, 72, 22}, {73, 73, 23}, {74, 79, 21}, {80, 80, 24}, {81, 82, 21}, {83, 83, 25}, {84, 84, 26}, {85, 90, 21}, {91, 91, 27}, {93, 93, 28}, {95, 95, 29}, {97, 122, 30}, {123, 123, 31}, {124, 124, 32}, {125, 125, 33}, },
592
{{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, },
593
{{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, },
594
{{9, 9, 1}, {10, 10, 34}, {13, 13, 3}, {32, 32, 4}, },
595
{{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, },
596
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
597
{{0, 9, 40}, {11, 12, 40}, {14, 38, 40}, {39, 39, 41}, {40, 65535, 40}, },
605
{{42, 42, 44}, {47, 47, 45}, },
606
{{48, 57, 16}, {88, 88, 46}, {120, 120, 47}, },
612
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
613
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 48}, {102, 122, 39}, },
614
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 102, 39}, {103, 103, 49}, {104, 122, 39}, },
615
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 97, 50}, {98, 113, 39}, {114, 114, 51}, {115, 122, 39}, },
616
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 115, 39}, {116, 116, 52}, {117, 122, 39}, },
617
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 110, 39}, {111, 111, 53}, {112, 122, 39}, },
620
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
621
{{36, 36, 35}, {48, 57, 54}, {65, 90, 37}, {95, 95, 55}, {97, 122, 56}, },
625
{{9, 9, 1}, {10, 10, 2}, {13, 13, 3}, {32, 32, 4}, },
626
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
627
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
628
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
629
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
630
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
631
{{0, 9, 57}, {11, 12, 57}, {14, 38, 57}, {39, 39, 58}, {40, 65535, 57}, },
635
{{0, 41, 60}, {42, 42, 61}, {43, 65535, 60}, },
636
{{0, 9, 62}, {10, 10, 63}, {11, 12, 62}, {13, 13, 64}, {14, 65535, 62}, },
637
{{48, 57, 65}, {65, 70, 65}, {97, 102, 65}, },
638
{{48, 57, 65}, {65, 70, 65}, {97, 102, 65}, },
639
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 107, 39}, {108, 108, 66}, {109, 122, 39}, },
640
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 109, 39}, {110, 110, 67}, {111, 122, 39}, },
641
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 98, 39}, {99, 99, 68}, {100, 122, 39}, },
642
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 110, 39}, {111, 111, 69}, {112, 122, 39}, },
643
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 97, 70}, {98, 122, 39}, },
644
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 106, 39}, {107, 107, 71}, {108, 122, 39}, },
645
{{36, 36, 35}, {48, 57, 54}, {65, 90, 37}, {95, 95, 55}, {97, 122, 56}, },
646
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 72}, },
647
{{36, 36, 35}, {48, 57, 54}, {65, 90, 37}, {95, 95, 55}, {97, 122, 56}, },
648
{{0, 9, 57}, {11, 12, 57}, {14, 38, 57}, {39, 39, 73}, {40, 65535, 57}, },
651
{{0, 41, 60}, {42, 42, 61}, {43, 65535, 60}, },
652
{{0, 41, 74}, {42, 42, 61}, {43, 46, 74}, {47, 47, 75}, {48, 65535, 74}, },
653
{{0, 9, 62}, {10, 10, 63}, {11, 12, 62}, {13, 13, 64}, {14, 65535, 62}, },
656
{{48, 57, 65}, {65, 70, 65}, {97, 102, 65}, },
657
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 111, 39}, {112, 112, 77}, {113, 122, 39}, },
658
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 110, 39}, {111, 111, 78}, {112, 122, 39}, },
659
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 106, 39}, {107, 107, 79}, {108, 122, 39}, },
660
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 99, 39}, {100, 100, 80}, {101, 122, 39}, },
661
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 115, 39}, {116, 116, 81}, {117, 122, 39}, },
662
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 82}, {102, 122, 39}, },
663
{{36, 36, 35}, {48, 57, 83}, {65, 90, 37}, {95, 95, 55}, {97, 122, 84}, },
665
{{0, 41, 85}, {42, 42, 86}, {43, 65535, 85}, },
668
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 87}, {102, 122, 39}, },
669
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 113, 39}, {114, 114, 88}, {115, 122, 39}, },
670
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 97, 89}, {98, 122, 39}, },
671
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 116, 39}, {117, 117, 90}, {118, 122, 39}, },
672
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 91}, {102, 122, 39}, },
673
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 109, 39}, {110, 110, 92}, {111, 122, 39}, },
674
{{36, 36, 35}, {48, 57, 83}, {65, 90, 37}, {95, 95, 55}, {97, 122, 84}, },
675
{{36, 36, 35}, {48, 57, 83}, {65, 90, 37}, {95, 95, 55}, {97, 122, 84}, },
676
{{0, 41, 85}, {42, 42, 86}, {43, 65535, 85}, },
677
{{0, 41, 74}, {42, 42, 86}, {43, 46, 74}, {47, 47, 75}, {48, 65535, 74}, },
678
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 113, 39}, {114, 114, 93}, {115, 122, 39}, },
679
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 94}, {102, 122, 39}, },
680
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 102, 39}, {103, 103, 95}, {104, 122, 39}, },
681
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 98, 39}, {99, 99, 96}, {100, 122, 39}, },
682
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 114, 39}, {115, 115, 97}, {116, 122, 39}, },
683
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 114, 39}, {115, 115, 98}, {116, 122, 39}, },
684
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 114, 39}, {115, 115, 99}, {116, 122, 39}, },
685
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 99, 39}, {100, 100, 100}, {101, 122, 39}, },
686
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 100, 39}, {101, 101, 101}, {102, 122, 39}, },
687
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 115, 39}, {116, 116, 102}, {117, 122, 39}, },
688
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
689
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
690
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
691
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
692
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
693
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 104, 39}, {105, 105, 103}, {106, 122, 39}, },
694
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 110, 39}, {111, 111, 104}, {112, 122, 39}, },
695
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 109, 39}, {110, 110, 105}, {111, 122, 39}, },
696
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 114, 39}, {115, 115, 106}, {116, 122, 39}, },
697
{{36, 36, 35}, {48, 57, 36}, {65, 90, 37}, {95, 95, 38}, {97, 122, 39}, },
700
private static int[] accept =
702
-1, 33, 33, 33, 33, 32, -1, 14, 15, 21, 18, 23, 19, 8, 24, 29, 29, 26, 10, 11, 20, 32, 32, 32, 7, 32, 6, 12, 13, 32, 27, 16, 22, 17, 33, 32, 32, 32, 32, 32, -1, -1, 25, 9, -1, -1, -1, -1, 32, 32, 32, 32, 32, 32, 27, 32, 27, -1, 28, 28, -1, -1, -1, 34, 34, 30, 32, 32, 32, 32, 32, 32, 27, 31, -1, 34, 34, 32, 32, 32, 32, 32, 32, 27, 27, -1, -1, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 1, 3, 2, 4, 0, 32, 32, 32, 32, 5,
11
protected Token token;
12
protected State state = State.NORMAL;
14
private PushbackReader in;
19
private final StringBuffer text = new StringBuffer();
21
protected void filter() throws LexerException, IOException
24
public Lexer(PushbackReader in)
32
DataInputStream s = new DataInputStream(
33
new BufferedInputStream(
34
Lexer.class.getResourceAsStream("lexer.dat")));
37
int length = s.readInt();
38
gotoTable = new int[length][][][];
39
for(int i = 0; i < gotoTable.length; i++)
42
gotoTable[i] = new int[length][][];
43
for(int j = 0; j < gotoTable[i].length; j++)
46
gotoTable[i][j] = new int[length][3];
47
for(int k = 0; k < gotoTable[i][j].length; k++)
49
for(int l = 0; l < 3; l++)
51
gotoTable[i][j][k][l] = s.readInt();
59
accept = new int[length][];
60
for(int i = 0; i < accept.length; i++)
63
accept[i] = new int[length];
64
for(int j = 0; j < accept[i].length; j++)
66
accept[i][j] = s.readInt();
74
throw new RuntimeException("The file \"lexer.dat\" is either missing or corrupted.");
79
public Token peek() throws LexerException, IOException
90
public Token next() throws LexerException, IOException
103
protected Token getToken() throws IOException, LexerException
108
int start_line = line;
110
int accept_state = -1;
111
int accept_token = -1;
112
int accept_length = -1;
114
int accept_line = -1;
116
int[][][] gotoTable = this.gotoTable[state.id()];
117
int[] accept = this.accept[state.id()];
150
text.append((char) c);
154
int oldState = (dfa_state < -1) ? (-2 -dfa_state) : dfa_state;
158
int[][] tmp1 = gotoTable[oldState];
160
int high = tmp1.length - 1;
164
int middle = (low + high) / 2;
165
int[] tmp2 = tmp1[middle];
182
while(dfa_state < -1);
191
if(accept[dfa_state] != -1)
193
accept_state = dfa_state;
194
accept_token = accept[dfa_state];
195
accept_length = text.length();
202
if(accept_state != -1)
209
getText(accept_length),
212
pushBack(accept_length);
218
state = State.PACKAGE;
228
pushBack(accept_length);
234
state = State.PACKAGE;
244
pushBack(accept_length);
254
pushBack(accept_length);
264
pushBack(accept_length);
274
pushBack(accept_length);
284
pushBack(accept_length);
294
pushBack(accept_length);
304
pushBack(accept_length);
314
pushBack(accept_length);
324
pushBack(accept_length);
334
pushBack(accept_length);
340
state = State.NORMAL;
343
state = State.NORMAL;
353
pushBack(accept_length);
363
pushBack(accept_length);
373
pushBack(accept_length);
383
pushBack(accept_length);
393
pushBack(accept_length);
403
pushBack(accept_length);
413
pushBack(accept_length);
423
pushBack(accept_length);
433
pushBack(accept_length);
443
pushBack(accept_length);
453
pushBack(accept_length);
463
pushBack(accept_length);
473
pushBack(accept_length);
483
pushBack(accept_length);
493
pushBack(accept_length);
503
pushBack(accept_length);
511
getText(accept_length),
514
pushBack(accept_length);
522
getText(accept_length),
525
pushBack(accept_length);
533
getText(accept_length),
536
pushBack(accept_length);
544
getText(accept_length),
547
pushBack(accept_length);
555
getText(accept_length),
558
pushBack(accept_length);
566
getText(accept_length),
569
pushBack(accept_length);
577
getText(accept_length),
580
pushBack(accept_length);
589
if(text.length() > 0)
591
throw new LexerException(
592
"[" + (start_line + 1) + "," + (start_pos + 1) + "]" +
593
" Unknown token: " + text);
607
Token new0(String text, int line, int pos)
609
return new TPkgId(text, line, pos);
611
Token new1(int line, int pos)
613
return new TPackage(line, pos);
615
Token new2(int line, int pos)
617
return new TStates(line, pos);
619
Token new3(int line, int pos)
621
return new THelpers(line, pos);
623
Token new4(int line, int pos)
625
return new TTokens(line, pos);
627
Token new5(int line, int pos)
629
return new TIgnored(line, pos);
631
Token new6(int line, int pos)
633
return new TProductions(line, pos);
635
Token new7(int line, int pos)
637
return new TTokenSpecifier(line, pos);
639
Token new8(int line, int pos)
641
return new TProductionSpecifier(line, pos);
643
Token new9(int line, int pos)
645
return new TDot(line, pos);
647
Token new10(int line, int pos)
649
return new TDDot(line, pos);
651
Token new11(int line, int pos)
653
return new TSemicolon(line, pos);
655
Token new12(int line, int pos)
657
return new TEqual(line, pos);
659
Token new13(int line, int pos)
661
return new TLBkt(line, pos);
663
Token new14(int line, int pos)
665
return new TRBkt(line, pos);
667
Token new15(int line, int pos)
669
return new TLPar(line, pos);
671
Token new16(int line, int pos)
673
return new TRPar(line, pos);
675
Token new17(int line, int pos)
677
return new TLBrace(line, pos);
679
Token new18(int line, int pos)
681
return new TRBrace(line, pos);
683
Token new19(int line, int pos)
685
return new TPlus(line, pos);
687
Token new20(int line, int pos)
689
return new TMinus(line, pos);
691
Token new21(int line, int pos)
693
return new TQMark(line, pos);
695
Token new22(int line, int pos)
697
return new TStar(line, pos);
699
Token new23(int line, int pos)
701
return new TBar(line, pos);
703
Token new24(int line, int pos)
705
return new TComma(line, pos);
707
Token new25(int line, int pos)
709
return new TSlash(line, pos);
711
Token new26(int line, int pos)
713
return new TArrow(line, pos);
715
Token new27(int line, int pos)
717
return new TColon(line, pos);
719
Token new28(String text, int line, int pos)
721
return new TId(text, line, pos);
723
Token new29(String text, int line, int pos)
725
return new TChar(text, line, pos);
727
Token new30(String text, int line, int pos)
729
return new TDecChar(text, line, pos);
731
Token new31(String text, int line, int pos)
733
return new THexChar(text, line, pos);
735
Token new32(String text, int line, int pos)
737
return new TString(text, line, pos);
739
Token new33(String text, int line, int pos)
741
return new TBlank(text, line, pos);
743
Token new34(String text, int line, int pos)
745
return new TComment(text, line, pos);
748
private int getChar() throws IOException
755
int result = in.read();
765
private void pushBack(int acceptLength) throws IOException
767
int length = text.length();
768
for(int i = length - 1; i >= acceptLength; i--)
772
in.unread(text.charAt(i));
776
protected void unread(Token token) throws IOException
778
String text = token.getText();
779
int length = text.length();
781
for(int i = length - 1; i >= 0; i--)
785
in.unread(text.charAt(i));
788
pos = token.getPos() - 1;
789
line = token.getLine() - 1;
792
private String getText(int acceptLength)
794
StringBuffer s = new StringBuffer(acceptLength);
795
for(int i = 0; i < acceptLength; i++)
797
s.append(text.charAt(i));
803
private static int[][][][] gotoTable;
806
{{4, 4, 1}, {9, 9, 2}, {10, 10, 3}, {13, 13, 4}, {32, 32, 5}, {39, 39, 6}, {40, 40, 7}, {41, 41, 8}, {42, 42, 9}, {43, 43, 10}, {44, 44, 11}, {45, 45, 12}, {46, 46, 13}, {47, 47, 14}, {48, 48, 15}, {49, 57, 16}, {58, 58, 17}, {59, 59, 18}, {61, 61, 19}, {63, 63, 20}, {72, 72, 21}, {73, 73, 22}, {80, 80, 23}, {83, 83, 24}, {84, 84, 25}, {91, 91, 26}, {93, 93, 27}, {97, 122, 28}, {123, 123, 29}, {124, 124, 30}, {125, 125, 31}, },
810
{{4, 9, -2}, {10, 10, 32}, {13, 32, -2}, },
812
{{0, 9, 33}, {11, 12, 33}, {14, 38, 33}, {39, 39, 34}, {40, 65535, 33}, },
820
{{42, 42, 37}, {47, 47, 38}, },
821
{{48, 57, 16}, {88, 88, 39}, {120, 120, 40}, },
829
{{97, 97, 43}, {114, 114, 44}, },
834
{{48, 57, 47}, {95, 95, 48}, {97, 122, 49}, },
839
{{0, 9, 50}, {11, 12, 50}, {14, 38, 50}, {39, 39, 51}, {40, 65535, 50}, },
843
{{0, 41, 53}, {42, 42, 54}, {43, 65535, 53}, },
844
{{0, 9, 55}, {10, 10, 56}, {11, 12, 55}, {13, 13, 57}, {14, 65535, 55}, },
845
{{48, 57, 58}, {65, 70, 58}, {97, 102, 58}, },
856
{{0, 38, -35}, {39, 39, 66}, {40, 65535, 50}, },
860
{{0, 41, 67}, {42, 42, 54}, {43, 46, 67}, {47, 47, 68}, {48, 65535, 67}, },
871
{{48, 57, 76}, {95, 95, 48}, {97, 122, 77}, },
873
{{0, 41, 78}, {42, 42, 79}, {43, 65535, 78}, },
885
{{0, 41, 67}, {42, 42, 79}, {43, 65535, -56}, },
908
{{4, 4, 1}, {9, 9, 2}, {10, 10, 3}, {13, 13, 4}, {32, 32, 5}, {36, 36, 6}, {39, 39, 7}, {40, 40, 8}, {41, 41, 9}, {42, 42, 10}, {43, 43, 11}, {44, 44, 12}, {45, 45, 13}, {46, 46, 14}, {47, 47, 15}, {48, 48, 16}, {49, 57, 17}, {58, 58, 18}, {59, 59, 19}, {61, 61, 20}, {63, 63, 21}, {65, 71, 22}, {72, 72, 23}, {73, 73, 24}, {74, 79, 22}, {80, 80, 25}, {81, 82, 22}, {83, 83, 26}, {84, 84, 27}, {85, 90, 22}, {91, 91, 28}, {93, 93, 29}, {95, 95, 30}, {97, 122, 31}, {123, 123, 32}, {124, 124, 33}, {125, 125, 34}, },
912
{{4, 9, -2}, {10, 10, 35}, {13, 32, -2}, },
914
{{36, 36, 36}, {48, 57, 37}, {65, 90, 38}, {95, 95, 39}, {97, 122, 40}, },
915
{{0, 9, 41}, {11, 12, 41}, {14, 38, 41}, {39, 39, 42}, {40, 65535, 41}, },
923
{{42, 42, 45}, {47, 47, 46}, },
924
{{48, 57, 17}, {88, 88, 47}, {120, 120, 48}, },
931
{{36, 95, -8}, {97, 100, 40}, {101, 101, 49}, {102, 122, 40}, },
932
{{36, 95, -8}, {97, 102, 40}, {103, 103, 50}, {104, 122, 40}, },
933
{{36, 95, -8}, {97, 113, 40}, {114, 114, 51}, {115, 122, 40}, },
934
{{36, 95, -8}, {97, 115, 40}, {116, 116, 52}, {117, 122, 40}, },
935
{{36, 95, -8}, {97, 110, 40}, {111, 111, 53}, {112, 122, 40}, },
939
{{36, 36, 36}, {48, 57, 54}, {65, 90, 38}, {95, 95, 55}, {97, 122, 56}, },
949
{{0, 9, 57}, {11, 12, 57}, {14, 38, 57}, {39, 39, 58}, {40, 65535, 57}, },
953
{{0, 41, 60}, {42, 42, 61}, {43, 65535, 60}, },
954
{{0, 9, 62}, {10, 10, 63}, {11, 12, 62}, {13, 13, 64}, {14, 65535, 62}, },
955
{{48, 57, 65}, {65, 70, 65}, {97, 102, 65}, },
957
{{36, 95, -8}, {97, 107, 40}, {108, 108, 66}, {109, 122, 40}, },
958
{{36, 95, -8}, {97, 109, 40}, {110, 110, 67}, {111, 122, 40}, },
959
{{36, 110, -29}, {111, 111, 68}, {112, 122, 40}, },
960
{{36, 95, -8}, {97, 97, 69}, {98, 122, 40}, },
961
{{36, 95, -8}, {97, 106, 40}, {107, 107, 70}, {108, 122, 40}, },
963
{{36, 95, -8}, {97, 122, 71}, },
965
{{0, 38, -43}, {39, 39, 72}, {40, 65535, 57}, },
969
{{0, 41, 73}, {42, 42, 61}, {43, 46, 73}, {47, 47, 74}, {48, 65535, 73}, },
974
{{36, 95, -8}, {97, 111, 40}, {112, 112, 76}, {113, 122, 40}, },
975
{{36, 110, -29}, {111, 111, 77}, {112, 122, 40}, },
976
{{36, 95, -8}, {97, 99, 40}, {100, 100, 78}, {101, 122, 40}, },
977
{{36, 115, -28}, {116, 116, 79}, {117, 122, 40}, },
978
{{36, 100, -25}, {101, 101, 80}, {102, 122, 40}, },
979
{{36, 36, 36}, {48, 57, 81}, {65, 95, -33}, {97, 122, 82}, },
981
{{0, 41, 83}, {42, 42, 84}, {43, 65535, 83}, },
984
{{36, 100, -25}, {101, 101, 85}, {102, 122, 40}, },
985
{{36, 113, -27}, {114, 114, 86}, {115, 122, 40}, },
986
{{36, 95, -8}, {97, 116, 40}, {117, 117, 87}, {118, 122, 40}, },
987
{{36, 100, -25}, {101, 101, 88}, {102, 122, 40}, },
988
{{36, 109, -52}, {110, 110, 89}, {111, 122, 40}, },
992
{{0, 41, 73}, {42, 42, 84}, {43, 65535, -63}, },
993
{{36, 113, -27}, {114, 114, 90}, {115, 122, 40}, },
994
{{36, 100, -25}, {101, 101, 91}, {102, 122, 40}, },
995
{{36, 95, -8}, {97, 98, 40}, {99, 99, 92}, {100, 122, 40}, },
996
{{36, 95, -8}, {97, 114, 40}, {115, 115, 93}, {116, 122, 40}, },
997
{{36, 114, -90}, {115, 115, 94}, {116, 122, 40}, },
998
{{36, 114, -90}, {115, 115, 95}, {116, 122, 40}, },
999
{{36, 99, -70}, {100, 100, 96}, {101, 122, 40}, },
1000
{{36, 115, -28}, {116, 116, 97}, {117, 122, 40}, },
1005
{{36, 95, -8}, {97, 104, 40}, {105, 105, 98}, {106, 122, 40}, },
1006
{{36, 110, -29}, {111, 111, 99}, {112, 122, 40}, },
1007
{{36, 109, -52}, {110, 110, 100}, {111, 122, 40}, },
1008
{{36, 114, -90}, {115, 115, 101}, {116, 122, 40}, },
1013
private static int[][] accept;
1016
{-1, 33, 33, 33, 33, 33, -1, 15, 16, 22, 19, 24, 20, 9, 25, 30, 30, 27, 11, 12, 21, -1, -1, 8, -1, 7, 13, 14, 28, 17, 23, 18, 33, -1, -1, 26, 10, -1, 34, -1, -1, -1, -1, -1, -1, -1, -1, 28, -1, 28, -1, 29, 29, -1, -1, 34, 34, 34, 31, -1, -1, -1, -1, -1, -1, 28, 32, -1, 34, 34, -1, -1, -1, -1, -1, -1, 28, 28, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 2, 4, 3, 5, 1, -1, -1, -1, -1, 6, },
1018
{-1, 33, 33, 33, 33, 33, 0, -1, 15, 16, 22, 19, 24, 20, 9, 25, 30, 30, 27, 11, 12, 21, 0, 0, 0, 0, 0, 0, 13, 14, 0, 0, 17, 23, 18, 33, 0, 0, 0, 0, 0, -1, -1, 26, 10, -1, 34, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, -1, 29, 29, -1, -1, 34, 34, 34, 31, 0, 0, 0, 0, 0, 0, 32, -1, 34, 34, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, },
1022
public static class State
1024
public final static State NORMAL = new State(0);
1025
public final static State PACKAGE = new State(1);
1029
private State(int id)