Home | History | Annotate | Download | only in hoistedPredicates
      1 /** \file
      2  *  This OBJC source file was generated by $ANTLR version ${project.version} ${buildNumber}
      3  *
      4  *     -  From the grammar source file : T.g
      5  *     -                            On : 2011-05-06 19:14:23
      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 ${project.version} ${buildNumber} T.g 2011-05-06 19:14:23
     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
     38 static ANTLRBitSet *FOLLOW_identifier_in_stat34;
     39 static const unsigned long long FOLLOW_identifier_in_stat34_data[] = { 0x0000000000000002LL};
     40 static ANTLRBitSet *FOLLOW_enumAsKeyword_in_stat47;
     41 static const unsigned long long FOLLOW_enumAsKeyword_in_stat47_data[] = { 0x0000000000000002LL};
     42 static ANTLRBitSet *FOLLOW_ID_in_identifier66;
     43 static const unsigned long long FOLLOW_ID_in_identifier66_data[] = { 0x0000000000000002LL};
     44 static ANTLRBitSet *FOLLOW_enumAsID_in_identifier74;
     45 static const unsigned long long FOLLOW_enumAsID_in_identifier74_data[] = { 0x0000000000000002LL};
     46 static ANTLRBitSet *FOLLOW_7_in_enumAsKeyword89;
     47 static const unsigned long long FOLLOW_7_in_enumAsKeyword89_data[] = { 0x0000000000000002LL};
     48 static ANTLRBitSet *FOLLOW_7_in_enumAsID100;
     49 static const unsigned long long FOLLOW_7_in_enumAsID100_data[] = { 0x0000000000000002LL};
     50 
     51 
     52 #pragma mark Dynamic Global Scopes
     53 
     54 #pragma mark Dynamic Rule Scopes
     55 
     56 #pragma mark Rule Return Scopes start
     57 //#pragma mark Rule return scopes start
     58 //
     59 
     60 #pragma mark Rule return scopes start
     61 
     62 @implementation TParser  // line 637
     63 
     64 /* ObjC start of ruleAttributeScope */
     65 #pragma mark Dynamic Rule Scopes
     66 /* ObjC end of ruleAttributeScope */
     67 #pragma mark global Attribute Scopes
     68 /* ObjC start globalAttributeScope */
     69 /* ObjC end globalAttributeScope */
     70 /* ObjC start actions.(actionScope).synthesize */
     71 /* ObjC end actions.(actionScope).synthesize */
     72 /* ObjC start synthesize() */
     73 /* ObjC end synthesize() */
     74 
     75 + (void) initialize
     76 {
     77     #pragma mark Bitsets
     78     FOLLOW_identifier_in_stat34 = [[ANTLRBitSet newANTLRBitSetWithBits:(const unsigned long long *)FOLLOW_identifier_in_stat34_data Count:(NSUInteger)1] retain];
     79     FOLLOW_enumAsKeyword_in_stat47 = [[ANTLRBitSet newANTLRBitSetWithBits:(const unsigned long long *)FOLLOW_enumAsKeyword_in_stat47_data Count:(NSUInteger)1] retain];
     80     FOLLOW_ID_in_identifier66 = [[ANTLRBitSet newANTLRBitSetWithBits:(const unsigned long long *)FOLLOW_ID_in_identifier66_data Count:(NSUInteger)1] retain];
     81     FOLLOW_enumAsID_in_identifier74 = [[ANTLRBitSet newANTLRBitSetWithBits:(const unsigned long long *)FOLLOW_enumAsID_in_identifier74_data Count:(NSUInteger)1] retain];
     82     FOLLOW_7_in_enumAsKeyword89 = [[ANTLRBitSet newANTLRBitSetWithBits:(const unsigned long long *)FOLLOW_7_in_enumAsKeyword89_data Count:(NSUInteger)1] retain];
     83     FOLLOW_7_in_enumAsID100 = [[ANTLRBitSet newANTLRBitSetWithBits:(const unsigned long long *)FOLLOW_7_in_enumAsID100_data Count:(NSUInteger)1] retain];
     84 
     85     [ANTLRBaseRecognizer setTokenNames:[[AMutableArray arrayWithObjects:@"<invalid>", @"<EOR>", @"<DOWN>", @"<UP>",
     86  @"ID", @"INT", @"WS", @"'enum'", nil] retain]];
     87     [ANTLRBaseRecognizer setGrammarFileName:@"T.g"];
     88 }
     89 
     90 + (TParser *)newTParser:(id<ANTLRTokenStream>)aStream
     91 {
     92     return [[TParser alloc] initWithTokenStream:aStream];
     93 
     94 
     95 }
     96 
     97 - (id) initWithTokenStream:(id<ANTLRTokenStream>)aStream
     98 {
     99     self = [super initWithTokenStream:aStream State:[[ANTLRRecognizerSharedState newANTLRRecognizerSharedStateWithRuleLen:4+1] retain]];
    100     if ( self != nil ) {
    101 
    102 
    103         /* start of actions-actionScope-init */
    104 
    105         enableEnum = NO;
    106 
    107         /* start of init */
    108     }
    109     return self;
    110 }
    111 
    112 - (void) dealloc
    113 {
    114     [super dealloc];
    115 }
    116 
    117 /* ObjC start members */
    118 /* ObjC end members */
    119 /* ObjC start actions.(actionScope).methods */
    120 /* ObjC end actions.(actionScope).methods */
    121 /* ObjC start methods() */
    122 /* ObjC end methods() */
    123 /* ObjC start rules */
    124 /*
    125  * $ANTLR start stat
    126  * T.g:24:1: stat : ( identifier | enumAsKeyword );
    127  */
    128 - (void) stat
    129 {
    130     /* my ruleScopeSetUp */
    131     /* Terence's stuff */
    132 
    133     @try {
    134         // T.g:24:5: ( identifier | enumAsKeyword ) //ruleblock
    135         NSInteger alt1=2;
    136         NSInteger LA1_0 = [input LA:1];
    137 
    138         if ( (LA1_0==ID) ) {
    139             alt1=1;
    140         }
    141         else if ( (LA1_0==7) ) {
    142             NSInteger LA1_2 = [input LA:2];
    143 
    144             if ( ((!enableEnum)) ) {
    145                 alt1=1;
    146             }
    147             else if ( ((enableEnum)) ) {
    148                 alt1=2;
    149             }
    150             else {
    151                 ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException newException:1 state:2 stream:input];
    152                 nvae.c = LA1_2;
    153                 @throw nvae;
    154 
    155             }
    156         }
    157         else {
    158             ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException newException:1 state:0 stream:input];
    159             nvae.c = LA1_0;
    160             @throw nvae;
    161 
    162         }
    163         switch (alt1) {
    164             case 1 : ;
    165                 // T.g:24:7: identifier // alt
    166                 {
    167                 /* ruleRef */
    168                 [self pushFollow:FOLLOW_identifier_in_stat34];
    169                 [self identifier];
    170 
    171                 [self popFollow];
    172 
    173 
    174 
    175                 NSLog(@"enum is an ID");
    176 
    177 
    178                 }
    179                 break;
    180             case 2 : ;
    181                 // T.g:25:7: enumAsKeyword // alt
    182                 {
    183                 /* ruleRef */
    184                 [self pushFollow:FOLLOW_enumAsKeyword_in_stat47];
    185                 [self enumAsKeyword];
    186 
    187                 [self popFollow];
    188 
    189 
    190 
    191                 NSLog(@"enum is a keyword");
    192 
    193 
    194                 }
    195                 break;
    196 
    197         }
    198         // token+rule list labels
    199 
    200     }
    201     @catch (ANTLRRecognitionException *re) {
    202         [self reportError:re];
    203         [self recover:input Exception:re];
    204     }
    205 
    206     @finally {
    207         /* Terence's stuff */
    208 
    209     }
    210     return ;
    211 }
    212 /* $ANTLR end stat */
    213 
    214 /*
    215  * $ANTLR start identifier
    216  * T.g:28:1: identifier : ( ID | enumAsID );
    217  */
    218 - (void) identifier
    219 {
    220     /* my ruleScopeSetUp */
    221     /* Terence's stuff */
    222 
    223     @try {
    224         // 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             ANTLRNoViableAltException *nvae = [ANTLRNoViableAltException newException:2 state:0 stream:input];
    236             nvae.c = LA2_0;
    237             @throw nvae;
    238 
    239         }
    240         switch (alt2) {
    241             case 1 : ;
    242                 // T.g:29:7: ID // alt
    243                 {
    244                 [self match:input TokenType:ID Follow:FOLLOW_ID_in_identifier66];
    245 
    246                 }
    247                 break;
    248             case 2 : ;
    249                 // T.g:30:7: enumAsID // alt
    250                 {
    251                 /* ruleRef */
    252                 [self pushFollow:FOLLOW_enumAsID_in_identifier74];
    253                 [self enumAsID];
    254 
    255                 [self popFollow];
    256 
    257 
    258 
    259                 }
    260                 break;
    261 
    262         }
    263         // token+rule list labels
    264 
    265     }
    266     @catch (ANTLRRecognitionException *re) {
    267         [self reportError:re];
    268         [self recover:input Exception:re];
    269     }
    270 
    271     @finally {
    272         /* Terence's stuff */
    273 
    274     }
    275     return ;
    276 }
    277 /* $ANTLR end identifier */
    278 
    279 /*
    280  * $ANTLR start enumAsKeyword
    281  * T.g:33:1: enumAsKeyword :{...}? 'enum' ;
    282  */
    283 - (void) enumAsKeyword
    284 {
    285     /* my ruleScopeSetUp */
    286     /* Terence's stuff */
    287 
    288     @try {
    289         // T.g:33:15: ({...}? 'enum' ) // ruleBlockSingleAlt
    290         // T.g:33:17: {...}? 'enum' // alt
    291         {
    292         if ( !((enableEnum)) ) {
    293             @throw [ANTLRFailedPredicateException newException:@"enumAsKeyword" predicate:@"enableEnum" stream:input];
    294         }
    295 
    296         [self match:input TokenType:7 Follow:FOLLOW_7_in_enumAsKeyword89];
    297 
    298         }
    299 
    300         // token+rule list labels
    301 
    302     }
    303     @catch (ANTLRRecognitionException *re) {
    304         [self reportError:re];
    305         [self recover:input Exception:re];
    306     }
    307 
    308     @finally {
    309         /* Terence's stuff */
    310 
    311     }
    312     return ;
    313 }
    314 /* $ANTLR end enumAsKeyword */
    315 
    316 /*
    317  * $ANTLR start enumAsID
    318  * T.g:35:1: enumAsID :{...}? 'enum' ;
    319  */
    320 - (void) enumAsID
    321 {
    322     /* my ruleScopeSetUp */
    323     /* Terence's stuff */
    324 
    325     @try {
    326         // T.g:35:10: ({...}? 'enum' ) // ruleBlockSingleAlt
    327         // T.g:35:12: {...}? 'enum' // alt
    328         {
    329         if ( !((!enableEnum)) ) {
    330             @throw [ANTLRFailedPredicateException newException:@"enumAsID" predicate:@"!enableEnum" stream:input];
    331         }
    332 
    333         [self match:input TokenType:7 Follow:FOLLOW_7_in_enumAsID100];
    334 
    335         }
    336 
    337         // token+rule list labels
    338 
    339     }
    340     @catch (ANTLRRecognitionException *re) {
    341         [self reportError:re];
    342         [self recover:input Exception:re];
    343     }
    344 
    345     @finally {
    346         /* Terence's stuff */
    347 
    348     }
    349     return ;
    350 }
    351 /* $ANTLR end enumAsID */
    352 /* ObjC end rules */
    353 
    354 @end /* end of TParser implementation line 692 */
    355