1/** \file
2 *  This OBJC source file was generated by $ANTLR version ${project.version} ${buildNumber}
3 *
4 *     -  From the grammar source file : Lang.g
5 *     -                            On : 2011-05-06 17:38:52
6 *     -                 for the lexer : LangLexerLexer
7 *
8 * Editing it, at least manually, is not wise.
9 *
10 * ObjC language generator and runtime by Alan Condit, acondit|hereisanat|ipns|dotgoeshere|com.
11 *
12 *
13*/
14// $ANTLR ${project.version} ${buildNumber} Lang.g 2011-05-06 17:38:52
15
16
17/* -----------------------------------------
18 * Include the ANTLR3 generated header file.
19 */
20#import "LangLexer.h"
21/* ----------------------------------------- */
22
23
24/* ============================================================================= */
25/* =============================================================================
26 * Start of recognizer
27 */
28
29/** As per Terence: No returns for lexer rules! */
30@implementation LangLexer // line 330
31
32+ (void) initialize
33{
34    [ANTLRBaseRecognizer setGrammarFileName:@"Lang.g"];
35}
36
37+ (NSString *) tokenNameForType:(NSInteger)aTokenType
38{
39    return [[self getTokenNames] objectAtIndex:aTokenType];
40}
41
42+ (LangLexer *)newLangLexerWithCharStream:(id<ANTLRCharStream>)anInput
43{
44    return [[LangLexer alloc] initWithCharStream:anInput];
45}
46
47- (id) initWithCharStream:(id<ANTLRCharStream>)anInput
48{
49    self = [super initWithCharStream:anInput State:[[ANTLRRecognizerSharedState newANTLRRecognizerSharedStateWithRuleLen:7+1] retain]];
50    if ( self != nil ) {
51    }
52    return self;
53}
54
55- (void) dealloc
56{
57    [super dealloc];
58}
59
60/* ObjC Start of actions.lexer.methods */
61/* ObjC end of actions.lexer.methods */
62/* ObjC start methods() */
63/* ObjC end methods() */
64
65/* Start of Rules */
66// $ANTLR start "T__10"
67- (void) mT__10
68{
69    //
70    /* my ruleScopeSetUp */
71    /* Terence's stuff */
72
73    @try {
74        NSInteger _type = T__10;
75        NSInteger _channel = ANTLRTokenChannelDefault;
76        // Lang.g:7:7: ( ';' ) // ruleBlockSingleAlt
77        // Lang.g:7:9: ';' // alt
78        {
79        [self matchChar:';'];
80
81
82        }
83
84        // token+rule list labels
85
86        state.type = _type;
87        state.channel = _channel;
88    }
89    @finally {
90        //
91        /* Terence's stuff */
92
93    }
94    return;
95}
96/* $ANTLR end "T__10" */
97
98// $ANTLR start "INTTYPE"
99- (void) mINTTYPE
100{
101    //
102    /* my ruleScopeSetUp */
103    /* Terence's stuff */
104
105    @try {
106        NSInteger _type = INTTYPE;
107        NSInteger _channel = ANTLRTokenChannelDefault;
108        // Lang.g:18:9: ( 'int' ) // ruleBlockSingleAlt
109        // Lang.g:18:11: 'int' // alt
110        {
111        [self matchString:@"int"];
112
113
114
115        }
116
117        // token+rule list labels
118
119        state.type = _type;
120        state.channel = _channel;
121    }
122    @finally {
123        //
124        /* Terence's stuff */
125
126    }
127    return;
128}
129/* $ANTLR end "INTTYPE" */
130
131// $ANTLR start "FLOATTYPE"
132- (void) mFLOATTYPE
133{
134    //
135    /* my ruleScopeSetUp */
136    /* Terence's stuff */
137
138    @try {
139        NSInteger _type = FLOATTYPE;
140        NSInteger _channel = ANTLRTokenChannelDefault;
141        // Lang.g:19:11: ( 'float' ) // ruleBlockSingleAlt
142        // Lang.g:19:13: 'float' // alt
143        {
144        [self matchString:@"float"];
145
146
147
148        }
149
150        // token+rule list labels
151
152        state.type = _type;
153        state.channel = _channel;
154    }
155    @finally {
156        //
157        /* Terence's stuff */
158
159    }
160    return;
161}
162/* $ANTLR end "FLOATTYPE" */
163
164// $ANTLR start "ID"
165- (void) mID
166{
167    //
168    /* my ruleScopeSetUp */
169    /* Terence's stuff */
170
171    @try {
172        NSInteger _type = ID;
173        NSInteger _channel = ANTLRTokenChannelDefault;
174        // Lang.g:20:4: ( ( 'a' .. 'z' )+ ) // ruleBlockSingleAlt
175        // Lang.g:20:6: ( 'a' .. 'z' )+ // alt
176        {
177        // Lang.g:20:6: ( 'a' .. 'z' )+ // positiveClosureBlock
178        NSInteger cnt1 = 0;
179        do {
180            NSInteger alt1 = 2;
181            NSInteger LA1_0 = [input LA:1];
182            if ( ((LA1_0 >= 'a' && LA1_0 <= 'z')) ) {
183                alt1=1;
184            }
185
186
187            switch (alt1) {
188                case 1 : ;
189                    // Lang.g: // alt
190                    {
191                    if ((([input LA:1] >= 'a') && ([input LA:1] <= 'z'))) {
192                        [input consume];
193                    } else {
194                        ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException newException:nil stream:input];
195                        [self recover:mse];
196                        @throw mse;
197                    }
198
199
200                    }
201                    break;
202
203                default :
204                    if ( cnt1 >= 1 )
205                        goto loop1;
206                    ANTLREarlyExitException *eee =
207                        [ANTLREarlyExitException newException:input decisionNumber:1];
208                    @throw eee;
209            }
210            cnt1++;
211        } while (YES);
212        loop1: ;
213
214
215        }
216
217        // token+rule list labels
218
219        state.type = _type;
220        state.channel = _channel;
221    }
222    @finally {
223        //
224        /* Terence's stuff */
225
226    }
227    return;
228}
229/* $ANTLR end "ID" */
230
231// $ANTLR start "INT"
232- (void) mINT
233{
234    //
235    /* my ruleScopeSetUp */
236    /* Terence's stuff */
237
238    @try {
239        NSInteger _type = INT;
240        NSInteger _channel = ANTLRTokenChannelDefault;
241        // Lang.g:21:5: ( ( '0' .. '9' )+ ) // ruleBlockSingleAlt
242        // Lang.g:21:7: ( '0' .. '9' )+ // alt
243        {
244        // Lang.g:21:7: ( '0' .. '9' )+ // positiveClosureBlock
245        NSInteger cnt2 = 0;
246        do {
247            NSInteger alt2 = 2;
248            NSInteger LA2_0 = [input LA:1];
249            if ( ((LA2_0 >= '0' && LA2_0 <= '9')) ) {
250                alt2=1;
251            }
252
253
254            switch (alt2) {
255                case 1 : ;
256                    // Lang.g: // alt
257                    {
258                    if ((([input LA:1] >= '0') && ([input LA:1] <= '9'))) {
259                        [input consume];
260                    } else {
261                        ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException newException:nil stream:input];
262                        [self recover:mse];
263                        @throw mse;
264                    }
265
266
267                    }
268                    break;
269
270                default :
271                    if ( cnt2 >= 1 )
272                        goto loop2;
273                    ANTLREarlyExitException *eee =
274                        [ANTLREarlyExitException newException:input decisionNumber:2];
275                    @throw eee;
276            }
277            cnt2++;
278        } while (YES);
279        loop2: ;
280
281
282        }
283
284        // token+rule list labels
285
286        state.type = _type;
287        state.channel = _channel;
288    }
289    @finally {
290        //
291        /* Terence's stuff */
292
293    }
294    return;
295}
296/* $ANTLR end "INT" */
297
298// $ANTLR start "WS"
299- (void) mWS
300{
301    //
302    /* my ruleScopeSetUp */
303    /* Terence's stuff */
304
305    @try {
306        NSInteger _type = WS;
307        NSInteger _channel = ANTLRTokenChannelDefault;
308        // Lang.g:22:4: ( ( ' ' | '\\n' ) ) // ruleBlockSingleAlt
309        // Lang.g:22:6: ( ' ' | '\\n' ) // alt
310        {
311        if ([input LA:1] == '\n'||[input LA:1] == ' ') {
312            [input consume];
313        } else {
314            ANTLRMismatchedSetException *mse = [ANTLRMismatchedSetException newException:nil stream:input];
315            [self recover:mse];
316            @throw mse;
317        }
318
319
320        _channel=HIDDEN;
321
322
323        }
324
325        // token+rule list labels
326
327        state.type = _type;
328        state.channel = _channel;
329    }
330    @finally {
331        //
332        /* Terence's stuff */
333
334    }
335    return;
336}
337/* $ANTLR end "WS" */
338
339- (void) mTokens
340{
341    // Lang.g:1:8: ( T__10 | INTTYPE | FLOATTYPE | ID | INT | WS ) //ruleblock
342    NSInteger alt3=6;
343    unichar charLA3 = [input LA:1];
344    switch (charLA3) {
345        case ';': ;
346            {
347            alt3=1;
348            }
349            break;
350        case 'i': ;
351            {
352            NSInteger LA3_2 = [input LA:2];
353
354            if ( (LA3_2=='n') ) {
355                NSInteger LA3_7 = [input LA:3];
356
357                if ( (LA3_7=='t') ) {
358                    NSInteger LA3_9 = [input LA:4];
359
360                    if ( ((LA3_9 >= 'a' && LA3_9 <= 'z')) ) {
361                        alt3=4;
362                    }
363                    else {
364                        alt3 = 2;
365                    }
366                }
367                else {
368                    alt3 = 4;
369                }
370            }
371            else {
372                alt3 = 4;
373            }
374            }
375            break;
376        case 'f': ;
377            {
378            NSInteger LA3_3 = [input LA:2];
379
380            if ( (LA3_3=='l') ) {
381                NSInteger LA3_8 = [input LA:3];
382
383                if ( (LA3_8=='o') ) {
384                    NSInteger LA3_10 = [input LA:4];
385
386                    if ( (LA3_10=='a') ) {
387                        NSInteger LA3_12 = [input LA:5];
388
389                        if ( (LA3_12=='t') ) {
390                            NSInteger LA3_13 = [input LA:6];
391
392                            if ( ((LA3_13 >= 'a' && LA3_13 <= 'z')) ) {
393                                alt3=4;
394                            }
395                            else {
396                                alt3 = 3;
397                            }
398                        }
399                        else {
400                            alt3 = 4;
401                        }
402                    }
403                    else {
404                        alt3 = 4;
405                    }
406                }
407                else {
408                    alt3 = 4;
409                }
410            }
411            else {
412                alt3 = 4;
413            }
414            }
415            break;
416        case 'a': ;
417        case 'b': ;
418        case 'c': ;
419        case 'd': ;
420        case 'e': ;
421        case 'g': ;
422        case 'h': ;
423        case 'j': ;
424        case 'k': ;
425        case 'l': ;
426        case 'm': ;
427        case 'n': ;
428        case 'o': ;
429        case 'p': ;
430        case 'q': ;
431        case 'r': ;
432        case 's': ;
433        case 't': ;
434        case 'u': ;
435        case 'v': ;
436        case 'w': ;
437        case 'x': ;
438        case 'y': ;
439        case 'z': ;
440            {
441            alt3=4;
442            }
443            break;
444        case '0': ;
445        case '1': ;
446        case '2': ;
447        case '3': ;
448        case '4': ;
449        case '5': ;
450        case '6': ;
451        case '7': ;
452        case '8': ;
453        case '9': ;
454            {
455            alt3=5;
456            }
457            break;
458        case '\n': ;
459        case ' ': ;
460            {
461            alt3=6;
462            }
463            break;
464
465    default: ;
466        ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException newException:3 state:0 stream:input];
467        nvae.c = charLA3;
468        @throw nvae;
469
470    }
471
472    switch (alt3) {
473        case 1 : ;
474            // Lang.g:1:10: T__10 // alt
475            {
476            [self mT__10];
477
478
479
480            }
481            break;
482        case 2 : ;
483            // Lang.g:1:16: INTTYPE // alt
484            {
485            [self mINTTYPE];
486
487
488
489            }
490            break;
491        case 3 : ;
492            // Lang.g:1:24: FLOATTYPE // alt
493            {
494            [self mFLOATTYPE];
495
496
497
498            }
499            break;
500        case 4 : ;
501            // Lang.g:1:34: ID // alt
502            {
503            [self mID];
504
505
506
507            }
508            break;
509        case 5 : ;
510            // Lang.g:1:37: INT // alt
511            {
512            [self mINT];
513
514
515
516            }
517            break;
518        case 6 : ;
519            // Lang.g:1:41: WS // alt
520            {
521            [self mWS];
522
523
524
525            }
526            break;
527
528    }
529
530}
531
532@end /* end of LangLexer implementation line 397 */