1/** \file
2 *  This OBJC source file was generated by $ANTLR version 3.4
3 *
4 *     -  From the grammar source file : /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g
5 *     -                            On : 2012-02-16 17:34:26
6 *     -                for the parser : TParserParser
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 3.4 /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g 2012-02-16 17:34:26
15
16
17/* -----------------------------------------
18 * Include the ANTLR3 generated header file.
19 */
20#import "TParser.h"
21/* ----------------------------------------- */
22
23/** Demonstrates how semantic predicates get hoisted out of the rule in
24 *  which they are found and used in other decisions.  This grammar illustrates
25 *  how predicates can be used to distinguish between enum as a keyword and
26 *  an ID *dynamically*. :)
27
28 * Run "java org.antlr.Tool -dfa t.g" to generate DOT (graphviz) files.  See
29 * the T_dec-1.dot file to see the predicates in action.
30 */
31
32/* ============================================================================= */
33/* =============================================================================
34 * Start of recognizer
35 */
36
37#pragma mark Bitsets
38static ANTLRBitSet *FOLLOW_identifier_in_stat34;
39static const unsigned long long FOLLOW_identifier_in_stat34_data[] = { 0x0000000000000002LL};
40static ANTLRBitSet *FOLLOW_enumAsKeyword_in_stat47;
41static const unsigned long long FOLLOW_enumAsKeyword_in_stat47_data[] = { 0x0000000000000002LL};
42static ANTLRBitSet *FOLLOW_ID_in_identifier66;
43static const unsigned long long FOLLOW_ID_in_identifier66_data[] = { 0x0000000000000002LL};
44static ANTLRBitSet *FOLLOW_enumAsID_in_identifier74;
45static const unsigned long long FOLLOW_enumAsID_in_identifier74_data[] = { 0x0000000000000002LL};
46static ANTLRBitSet *FOLLOW_7_in_enumAsKeyword89;
47static const unsigned long long FOLLOW_7_in_enumAsKeyword89_data[] = { 0x0000000000000002LL};
48static ANTLRBitSet *FOLLOW_7_in_enumAsID100;
49static const unsigned long long FOLLOW_7_in_enumAsID100_data[] = { 0x0000000000000002LL};
50
51
52#pragma mark Dynamic Global globalAttributeScopeImplementation
53
54#pragma mark Dynamic Rule Scopes ruleAttributeScopeImplementation
55
56#pragma mark Rule Return Scopes returnScopeImplementation
57
58@implementation TParser  // line 637
59
60/* ObjC start of ruleAttributeScope */
61#pragma mark Dynamic Rule Scopes ruleAttributeScope
62/* ObjC end of ruleAttributeScope */
63#pragma mark global Attribute Scopes globalAttributeScope
64/* ObjC start globalAttributeScope */
65/* ObjC end globalAttributeScope */
66/* ObjC start actions.(actionScope).synthesize */
67/* ObjC start synthesize() */
68
69+ (void) initialize
70{
71    #pragma mark Bitsets
72    FOLLOW_identifier_in_stat34 = [[ANTLRBitSet newBitSetWithBits:(const unsigned long long *)FOLLOW_identifier_in_stat34_data Count:(NSUInteger)1] retain];
73    FOLLOW_enumAsKeyword_in_stat47 = [[ANTLRBitSet newBitSetWithBits:(const unsigned long long *)FOLLOW_enumAsKeyword_in_stat47_data Count:(NSUInteger)1] retain];
74    FOLLOW_ID_in_identifier66 = [[ANTLRBitSet newBitSetWithBits:(const unsigned long long *)FOLLOW_ID_in_identifier66_data Count:(NSUInteger)1] retain];
75    FOLLOW_enumAsID_in_identifier74 = [[ANTLRBitSet newBitSetWithBits:(const unsigned long long *)FOLLOW_enumAsID_in_identifier74_data Count:(NSUInteger)1] retain];
76    FOLLOW_7_in_enumAsKeyword89 = [[ANTLRBitSet newBitSetWithBits:(const unsigned long long *)FOLLOW_7_in_enumAsKeyword89_data Count:(NSUInteger)1] retain];
77    FOLLOW_7_in_enumAsID100 = [[ANTLRBitSet newBitSetWithBits:(const unsigned long long *)FOLLOW_7_in_enumAsID100_data Count:(NSUInteger)1] retain];
78
79    [BaseRecognizer setTokenNames:[[AMutableArray arrayWithObjects:@"<invalid>", @"<EOR>", @"<DOWN>", @"<UP>",
80 @"ID", @"INT", @"WS", @"'enum'", nil] retain]];
81    [BaseRecognizer setGrammarFileName:@"/Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g"];
82}
83
84+ (TParser *)newTParser:(id<TokenStream>)aStream
85{
86    return [[TParser alloc] initWithTokenStream:aStream];
87}
88
89- (id) initWithTokenStream:(id<TokenStream>)aStream
90{
91    self = [super initWithTokenStream:aStream State:[[RecognizerSharedState newRecognizerSharedStateWithRuleLen:4+1] retain]];
92    if ( self != nil ) {
93        /* start of actions-actionScope-init */
94
95        enableEnum = NO;
96
97        /* start of init */
98    }
99    return self;
100}
101
102- (void) dealloc
103{
104    [super dealloc];
105}
106
107/* ObjC start actions.(actionScope).methods */
108/* ObjC end actions.(actionScope).methods */
109/* ObjC start methods() */
110/* ObjC end methods() */
111/* ObjC start rules */
112/*
113 * $ANTLR start stat
114 * /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:24:1: stat : ( identifier | enumAsKeyword );
115 */
116- (void) stat
117{
118    /* ruleScopeSetUp */
119
120    /* ruleDeclarations */
121
122    @try {
123        /* ruleLabelDefs entry */
124
125
126        // /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:24:5: ( identifier | enumAsKeyword ) //ruleblock
127        NSInteger alt1=2;
128        NSInteger LA1_0 = [input LA:1];
129
130        if ( (LA1_0==ID) ) {
131            alt1=1;
132        }
133        else if ( (LA1_0==7) ) {
134            NSInteger LA1_2 = [input LA:2];
135
136            if ( ((!enableEnum)) ) {
137                alt1=1;
138            }
139            else if ( ((enableEnum)) ) {
140                alt1=2;
141            }
142            else {
143                NoViableAltException *nvae = [NoViableAltException newException:1 state:2 stream:input];
144                nvae.c = LA1_2;
145                @throw nvae;
146
147            }
148        }
149        else {
150            NoViableAltException *nvae = [NoViableAltException newException:1 state:0 stream:input];
151            nvae.c = LA1_0;
152            @throw nvae;
153
154        }
155        switch (alt1) {
156            case 1 : ;
157                // /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:24:7: identifier // alt
158                {
159
160                /* ruleRef */
161                [self pushFollow:FOLLOW_identifier_in_stat34];
162                [self identifier];
163
164                [self popFollow];
165
166
167
168
169                NSLog(@"enum is an ID");
170
171
172                }
173                break;
174            case 2 : ;
175                // /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:25:7: enumAsKeyword // alt
176                {
177
178                /* ruleRef */
179                [self pushFollow:FOLLOW_enumAsKeyword_in_stat47];
180                [self enumAsKeyword];
181
182                [self popFollow];
183
184
185
186
187                NSLog(@"enum is a keyword");
188
189
190                }
191                break;
192
193        }
194        /* token+rule list labels */
195
196    }
197    @catch (RecognitionException *re) {
198        [self reportError:re];
199        [self recover:input Exception:re];
200    }
201
202    @finally {
203        /* ruleScopeCleanUp */
204
205    }
206    return ;
207}
208/* $ANTLR end stat */
209
210/*
211 * $ANTLR start identifier
212 * /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:28:1: identifier : ( ID | enumAsID );
213 */
214- (void) identifier
215{
216    /* ruleScopeSetUp */
217
218    /* ruleDeclarations */
219
220    @try {
221        /* ruleLabelDefs entry */
222
223
224        // /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:29:5: ( ID | enumAsID ) //ruleblock
225        NSInteger alt2=2;
226        NSInteger LA2_0 = [input LA:1];
227
228        if ( (LA2_0==ID) ) {
229            alt2=1;
230        }
231        else if ( (LA2_0==7) ) {
232            alt2=2;
233        }
234        else {
235            NoViableAltException *nvae = [NoViableAltException newException:2 state:0 stream:input];
236            nvae.c = LA2_0;
237            @throw nvae;
238
239        }
240        switch (alt2) {
241            case 1 : ;
242                // /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:29:7: ID // alt
243                {
244
245                [self match:input TokenType:ID Follow:FOLLOW_ID_in_identifier66];
246
247                }
248                break;
249            case 2 : ;
250                // /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:30:7: enumAsID // alt
251                {
252
253                /* ruleRef */
254                [self pushFollow:FOLLOW_enumAsID_in_identifier74];
255                [self enumAsID];
256
257                [self popFollow];
258
259
260
261                }
262                break;
263
264        }
265        /* token+rule list labels */
266
267    }
268    @catch (RecognitionException *re) {
269        [self reportError:re];
270        [self recover:input Exception:re];
271    }
272
273    @finally {
274        /* ruleScopeCleanUp */
275
276    }
277    return ;
278}
279/* $ANTLR end identifier */
280
281/*
282 * $ANTLR start enumAsKeyword
283 * /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:33:1: enumAsKeyword :{...}? 'enum' ;
284 */
285- (void) enumAsKeyword
286{
287    /* ruleScopeSetUp */
288
289    /* ruleDeclarations */
290
291    @try {
292        /* ruleLabelDefs entry */
293
294
295        // /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:33:15: ({...}? 'enum' ) // ruleBlockSingleAlt
296        // /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:33:17: {...}? 'enum' // alt
297        {
298
299        if ( !((enableEnum)) ) {
300            @throw [FailedPredicateException newException:@"enumAsKeyword" predicate:@"enableEnum" stream:input];
301        }
302
303        [self match:input TokenType:7 Follow:FOLLOW_7_in_enumAsKeyword89];
304
305        }
306
307        /* token+rule list labels */
308
309    }
310    @catch (RecognitionException *re) {
311        [self reportError:re];
312        [self recover:input Exception:re];
313    }
314
315    @finally {
316        /* ruleScopeCleanUp */
317
318    }
319    return ;
320}
321/* $ANTLR end enumAsKeyword */
322
323/*
324 * $ANTLR start enumAsID
325 * /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:35:1: enumAsID :{...}? 'enum' ;
326 */
327- (void) enumAsID
328{
329    /* ruleScopeSetUp */
330
331    /* ruleDeclarations */
332
333    @try {
334        /* ruleLabelDefs entry */
335
336
337        // /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:35:10: ({...}? 'enum' ) // ruleBlockSingleAlt
338        // /Users/acondit/source/antlr/code/antlr3/runtime/ObjC/Framework/examples/hoistedPredicates/T.g:35:12: {...}? 'enum' // alt
339        {
340
341        if ( !((!enableEnum)) ) {
342            @throw [FailedPredicateException newException:@"enumAsID" predicate:@"!enableEnum" stream:input];
343        }
344
345        [self match:input TokenType:7 Follow:FOLLOW_7_in_enumAsID100];
346
347        }
348
349        /* token+rule list labels */
350
351    }
352    @catch (RecognitionException *re) {
353        [self reportError:re];
354        [self recover:input Exception:re];
355    }
356
357    @finally {
358        /* ruleScopeCleanUp */
359
360    }
361    return ;
362}
363/* $ANTLR end enumAsID */
364/* ObjC end rules */
365
366@end /* end of TParser implementation line 692 */
367