ECC: CParser add 'EFIAPI' as function modifier.
authorjlin16 <jlin16@7335b38e-4728-0410-8992-fb3ffe349368>
Wed, 30 Jan 2008 06:29:59 +0000 (06:29 +0000)
committerjlin16 <jlin16@7335b38e-4728-0410-8992-fb3ffe349368>
Wed, 30 Jan 2008 06:29:59 +0000 (06:29 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@994 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/Ecc/C.g
Source/Python/Ecc/CLexer.py
Source/Python/Ecc/CParser.py

index 6da139e..a9e173c 100644 (file)
@@ -227,17 +227,20 @@ type_qualifier
        | 'UNALIGNED'\r
        | 'VOLATILE'\r
        | 'GLOBAL_REMOVE_IF_UNREFERENCED'\r
+       | 'EFIAPI'\r
+       | 'EFI_BOOTSERVICE'\r
+       | 'EFI_RUNTIMESERVICE'\r
        ;\r
 \r
 declarator\r
        : pointer? ('EFIAPI')? ('EFI_BOOTSERVICE')? ('EFI_RUNTIMESERVICE')? direct_declarator\r
-       | ('EFIAPI')? ('EFI_BOOTSERVICE')? ('EFI_RUNTIMESERVICE')? pointer? direct_declarator\r
+//     | ('EFIAPI')? ('EFI_BOOTSERVICE')? ('EFI_RUNTIMESERVICE')? pointer? direct_declarator\r
        | pointer\r
        ;\r
 \r
 direct_declarator\r
        : IDENTIFIER declarator_suffix*\r
-       | '(' declarator ')' declarator_suffix+\r
+       | '(' ('EFIAPI')? declarator ')' declarator_suffix+\r
        ;\r
 \r
 declarator_suffix\r
index 166ef1d..81a4ded 100644 (file)
@@ -1,4 +1,4 @@
-# $ANTLR 3.0.1 C.g 2008-01-29 19:00:50
+# $ANTLR 3.0.1 C.g 2008-01-30 14:26:38
 
 from antlr3 import *
 from antlr3.compat import set, frozenset
@@ -2182,11 +2182,11 @@ class CLexer(Lexer):
         try:
             self.type = IDENTIFIER
 
-            # C.g:501:2: ( LETTER ( LETTER | '0' .. '9' )* )
-            # C.g:501:4: LETTER ( LETTER | '0' .. '9' )*
+            # C.g:504:2: ( LETTER ( LETTER | '0' .. '9' )* )
+            # C.g:504:4: LETTER ( LETTER | '0' .. '9' )*
             self.mLETTER()
 
-            # C.g:501:11: ( LETTER | '0' .. '9' )*
+            # C.g:504:11: ( LETTER | '0' .. '9' )*
             while True: #loop1
                 alt1 = 2
                 LA1_0 = self.input.LA(1)
@@ -2228,7 +2228,7 @@ class CLexer(Lexer):
     def mLETTER(self, ):
 
         try:
-            # C.g:506:2: ( '$' | 'A' .. 'Z' | 'a' .. 'z' | '_' )
+            # C.g:509:2: ( '$' | 'A' .. 'Z' | 'a' .. 'z' | '_' )
             # C.g:
             if self.input.LA(1) == u'$' or (u'A' <= self.input.LA(1) <= u'Z') or self.input.LA(1) == u'_' or (u'a' <= self.input.LA(1) <= u'z'):
                 self.input.consume();
@@ -2257,16 +2257,16 @@ class CLexer(Lexer):
         try:
             self.type = CHARACTER_LITERAL
 
-            # C.g:513:5: ( ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' )
-            # C.g:513:9: ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\''
-            # C.g:513:9: ( 'L' )?
+            # C.g:516:5: ( ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' )
+            # C.g:516:9: ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\''
+            # C.g:516:9: ( 'L' )?
             alt2 = 2
             LA2_0 = self.input.LA(1)
 
             if (LA2_0 == u'L') :
                 alt2 = 1
             if alt2 == 1:
-                # C.g:513:10: 'L'
+                # C.g:516:10: 'L'
                 self.match(u'L')
 
 
@@ -2274,7 +2274,7 @@ class CLexer(Lexer):
 
             self.match(u'\'')
 
-            # C.g:513:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )
+            # C.g:516:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )
             alt3 = 2
             LA3_0 = self.input.LA(1)
 
@@ -2283,18 +2283,18 @@ class CLexer(Lexer):
             elif ((u'\u0000' <= LA3_0 <= u'&') or (u'(' <= LA3_0 <= u'[') or (u']' <= LA3_0 <= u'\uFFFE')) :
                 alt3 = 2
             else:
-                nvae = NoViableAltException("513:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 3, 0, self.input)
+                nvae = NoViableAltException("516:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 3, 0, self.input)
 
                 raise nvae
 
             if alt3 == 1:
-                # C.g:513:23: EscapeSequence
+                # C.g:516:23: EscapeSequence
                 self.mEscapeSequence()
 
 
 
             elif alt3 == 2:
-                # C.g:513:40: ~ ( '\\'' | '\\\\' )
+                # C.g:516:40: ~ ( '\\'' | '\\\\' )
                 if (u'\u0000' <= self.input.LA(1) <= u'&') or (u'(' <= self.input.LA(1) <= u'[') or (u']' <= self.input.LA(1) <= u'\uFFFE'):
                     self.input.consume();
 
@@ -2327,16 +2327,16 @@ class CLexer(Lexer):
         try:
             self.type = STRING_LITERAL
 
-            # C.g:517:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-            # C.g:517:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
-            # C.g:517:8: ( 'L' )?
+            # C.g:520:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+            # C.g:520:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+            # C.g:520:8: ( 'L' )?
             alt4 = 2
             LA4_0 = self.input.LA(1)
 
             if (LA4_0 == u'L') :
                 alt4 = 1
             if alt4 == 1:
-                # C.g:517:9: 'L'
+                # C.g:520:9: 'L'
                 self.match(u'L')
 
 
@@ -2344,7 +2344,7 @@ class CLexer(Lexer):
 
             self.match(u'"')
 
-            # C.g:517:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+            # C.g:520:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
             while True: #loop5
                 alt5 = 3
                 LA5_0 = self.input.LA(1)
@@ -2356,13 +2356,13 @@ class CLexer(Lexer):
 
 
                 if alt5 == 1:
-                    # C.g:517:21: EscapeSequence
+                    # C.g:520:21: EscapeSequence
                     self.mEscapeSequence()
 
 
 
                 elif alt5 == 2:
-                    # C.g:517:38: ~ ( '\\\\' | '\"' )
+                    # C.g:520:38: ~ ( '\\\\' | '\"' )
                     if (u'\u0000' <= self.input.LA(1) <= u'!') or (u'#' <= self.input.LA(1) <= u'[') or (u']' <= self.input.LA(1) <= u'\uFFFE'):
                         self.input.consume();
 
@@ -2398,8 +2398,8 @@ class CLexer(Lexer):
         try:
             self.type = HEX_LITERAL
 
-            # C.g:520:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? )
-            # C.g:520:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )?
+            # C.g:523:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? )
+            # C.g:523:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )?
             self.match(u'0')
 
             if self.input.LA(1) == u'X' or self.input.LA(1) == u'x':
@@ -2411,7 +2411,7 @@ class CLexer(Lexer):
                 raise mse
 
 
-            # C.g:520:29: ( HexDigit )+
+            # C.g:523:29: ( HexDigit )+
             cnt6 = 0
             while True: #loop6
                 alt6 = 2
@@ -2422,7 +2422,7 @@ class CLexer(Lexer):
 
 
                 if alt6 == 1:
-                    # C.g:520:29: HexDigit
+                    # C.g:523:29: HexDigit
                     self.mHexDigit()
 
 
@@ -2437,14 +2437,14 @@ class CLexer(Lexer):
                 cnt6 += 1
 
 
-            # C.g:520:39: ( IntegerTypeSuffix )?
+            # C.g:523:39: ( IntegerTypeSuffix )?
             alt7 = 2
             LA7_0 = self.input.LA(1)
 
             if (LA7_0 == u'L' or LA7_0 == u'U' or LA7_0 == u'l' or LA7_0 == u'u') :
                 alt7 = 1
             if alt7 == 1:
-                # C.g:520:39: IntegerTypeSuffix
+                # C.g:523:39: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2468,9 +2468,9 @@ class CLexer(Lexer):
         try:
             self.type = DECIMAL_LITERAL
 
-            # C.g:522:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? )
-            # C.g:522:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )?
-            # C.g:522:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )
+            # C.g:525:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? )
+            # C.g:525:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )?
+            # C.g:525:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )
             alt9 = 2
             LA9_0 = self.input.LA(1)
 
@@ -2479,21 +2479,21 @@ class CLexer(Lexer):
             elif ((u'1' <= LA9_0 <= u'9')) :
                 alt9 = 2
             else:
-                nvae = NoViableAltException("522:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 9, 0, self.input)
+                nvae = NoViableAltException("525:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 9, 0, self.input)
 
                 raise nvae
 
             if alt9 == 1:
-                # C.g:522:20: '0'
+                # C.g:525:20: '0'
                 self.match(u'0')
 
 
 
             elif alt9 == 2:
-                # C.g:522:26: '1' .. '9' ( '0' .. '9' )*
+                # C.g:525:26: '1' .. '9' ( '0' .. '9' )*
                 self.matchRange(u'1', u'9')
 
-                # C.g:522:35: ( '0' .. '9' )*
+                # C.g:525:35: ( '0' .. '9' )*
                 while True: #loop8
                     alt8 = 2
                     LA8_0 = self.input.LA(1)
@@ -2503,7 +2503,7 @@ class CLexer(Lexer):
 
 
                     if alt8 == 1:
-                        # C.g:522:35: '0' .. '9'
+                        # C.g:525:35: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2515,14 +2515,14 @@ class CLexer(Lexer):
 
 
 
-            # C.g:522:46: ( IntegerTypeSuffix )?
+            # C.g:525:46: ( IntegerTypeSuffix )?
             alt10 = 2
             LA10_0 = self.input.LA(1)
 
             if (LA10_0 == u'L' or LA10_0 == u'U' or LA10_0 == u'l' or LA10_0 == u'u') :
                 alt10 = 1
             if alt10 == 1:
-                # C.g:522:46: IntegerTypeSuffix
+                # C.g:525:46: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2546,11 +2546,11 @@ class CLexer(Lexer):
         try:
             self.type = OCTAL_LITERAL
 
-            # C.g:524:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? )
-            # C.g:524:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )?
+            # C.g:527:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? )
+            # C.g:527:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )?
             self.match(u'0')
 
-            # C.g:524:21: ( '0' .. '7' )+
+            # C.g:527:21: ( '0' .. '7' )+
             cnt11 = 0
             while True: #loop11
                 alt11 = 2
@@ -2561,7 +2561,7 @@ class CLexer(Lexer):
 
 
                 if alt11 == 1:
-                    # C.g:524:22: '0' .. '7'
+                    # C.g:527:22: '0' .. '7'
                     self.matchRange(u'0', u'7')
 
 
@@ -2576,14 +2576,14 @@ class CLexer(Lexer):
                 cnt11 += 1
 
 
-            # C.g:524:33: ( IntegerTypeSuffix )?
+            # C.g:527:33: ( IntegerTypeSuffix )?
             alt12 = 2
             LA12_0 = self.input.LA(1)
 
             if (LA12_0 == u'L' or LA12_0 == u'U' or LA12_0 == u'l' or LA12_0 == u'u') :
                 alt12 = 1
             if alt12 == 1:
-                # C.g:524:33: IntegerTypeSuffix
+                # C.g:527:33: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2605,8 +2605,8 @@ class CLexer(Lexer):
     def mHexDigit(self, ):
 
         try:
-            # C.g:527:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            # C.g:527:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            # C.g:530:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            # C.g:530:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
             if (u'0' <= self.input.LA(1) <= u'9') or (u'A' <= self.input.LA(1) <= u'F') or (u'a' <= self.input.LA(1) <= u'f'):
                 self.input.consume();
 
@@ -2632,7 +2632,7 @@ class CLexer(Lexer):
     def mIntegerTypeSuffix(self, ):
 
         try:
-            # C.g:531:2: ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) )
+            # C.g:534:2: ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) )
             alt13 = 4
             LA13_0 = self.input.LA(1)
 
@@ -2651,12 +2651,12 @@ class CLexer(Lexer):
             elif (LA13_0 == u'L' or LA13_0 == u'l') :
                 alt13 = 2
             else:
-                nvae = NoViableAltException("529:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) );", 13, 0, self.input)
+                nvae = NoViableAltException("532:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) );", 13, 0, self.input)
 
                 raise nvae
 
             if alt13 == 1:
-                # C.g:531:4: ( 'u' | 'U' )
+                # C.g:534:4: ( 'u' | 'U' )
                 if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':
                     self.input.consume();
 
@@ -2669,7 +2669,7 @@ class CLexer(Lexer):
 
 
             elif alt13 == 2:
-                # C.g:532:4: ( 'l' | 'L' )
+                # C.g:535:4: ( 'l' | 'L' )
                 if self.input.LA(1) == u'L' or self.input.LA(1) == u'l':
                     self.input.consume();
 
@@ -2682,7 +2682,7 @@ class CLexer(Lexer):
 
 
             elif alt13 == 3:
-                # C.g:533:4: ( 'u' | 'U' ) ( 'l' | 'L' )
+                # C.g:536:4: ( 'u' | 'U' ) ( 'l' | 'L' )
                 if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':
                     self.input.consume();
 
@@ -2704,7 +2704,7 @@ class CLexer(Lexer):
 
 
             elif alt13 == 4:
-                # C.g:534:4: ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' )
+                # C.g:537:4: ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' )
                 if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':
                     self.input.consume();
 
@@ -2749,12 +2749,12 @@ class CLexer(Lexer):
         try:
             self.type = FLOATING_POINT_LITERAL
 
-            # C.g:538:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? | '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? | ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? | ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix )
+            # C.g:541:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? | '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? | ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? | ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix )
             alt25 = 4
             alt25 = self.dfa25.predict(self.input)
             if alt25 == 1:
-                # C.g:538:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )?
-                # C.g:538:9: ( '0' .. '9' )+
+                # C.g:541:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )?
+                # C.g:541:9: ( '0' .. '9' )+
                 cnt14 = 0
                 while True: #loop14
                     alt14 = 2
@@ -2765,7 +2765,7 @@ class CLexer(Lexer):
 
 
                     if alt14 == 1:
-                        # C.g:538:10: '0' .. '9'
+                        # C.g:541:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2782,7 +2782,7 @@ class CLexer(Lexer):
 
                 self.match(u'.')
 
-                # C.g:538:25: ( '0' .. '9' )*
+                # C.g:541:25: ( '0' .. '9' )*
                 while True: #loop15
                     alt15 = 2
                     LA15_0 = self.input.LA(1)
@@ -2792,7 +2792,7 @@ class CLexer(Lexer):
 
 
                     if alt15 == 1:
-                        # C.g:538:26: '0' .. '9'
+                        # C.g:541:26: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2801,27 +2801,27 @@ class CLexer(Lexer):
                         break #loop15
 
 
-                # C.g:538:37: ( Exponent )?
+                # C.g:541:37: ( Exponent )?
                 alt16 = 2
                 LA16_0 = self.input.LA(1)
 
                 if (LA16_0 == u'E' or LA16_0 == u'e') :
                     alt16 = 1
                 if alt16 == 1:
-                    # C.g:538:37: Exponent
+                    # C.g:541:37: Exponent
                     self.mExponent()
 
 
 
 
-                # C.g:538:47: ( FloatTypeSuffix )?
+                # C.g:541:47: ( FloatTypeSuffix )?
                 alt17 = 2
                 LA17_0 = self.input.LA(1)
 
                 if (LA17_0 == u'D' or LA17_0 == u'F' or LA17_0 == u'd' or LA17_0 == u'f') :
                     alt17 = 1
                 if alt17 == 1:
-                    # C.g:538:47: FloatTypeSuffix
+                    # C.g:541:47: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2830,10 +2830,10 @@ class CLexer(Lexer):
 
 
             elif alt25 == 2:
-                # C.g:539:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )?
+                # C.g:542:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )?
                 self.match(u'.')
 
-                # C.g:539:13: ( '0' .. '9' )+
+                # C.g:542:13: ( '0' .. '9' )+
                 cnt18 = 0
                 while True: #loop18
                     alt18 = 2
@@ -2844,7 +2844,7 @@ class CLexer(Lexer):
 
 
                     if alt18 == 1:
-                        # C.g:539:14: '0' .. '9'
+                        # C.g:542:14: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2859,27 +2859,27 @@ class CLexer(Lexer):
                     cnt18 += 1
 
 
-                # C.g:539:25: ( Exponent )?
+                # C.g:542:25: ( Exponent )?
                 alt19 = 2
                 LA19_0 = self.input.LA(1)
 
                 if (LA19_0 == u'E' or LA19_0 == u'e') :
                     alt19 = 1
                 if alt19 == 1:
-                    # C.g:539:25: Exponent
+                    # C.g:542:25: Exponent
                     self.mExponent()
 
 
 
 
-                # C.g:539:35: ( FloatTypeSuffix )?
+                # C.g:542:35: ( FloatTypeSuffix )?
                 alt20 = 2
                 LA20_0 = self.input.LA(1)
 
                 if (LA20_0 == u'D' or LA20_0 == u'F' or LA20_0 == u'd' or LA20_0 == u'f') :
                     alt20 = 1
                 if alt20 == 1:
-                    # C.g:539:35: FloatTypeSuffix
+                    # C.g:542:35: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2888,8 +2888,8 @@ class CLexer(Lexer):
 
 
             elif alt25 == 3:
-                # C.g:540:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )?
-                # C.g:540:9: ( '0' .. '9' )+
+                # C.g:543:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )?
+                # C.g:543:9: ( '0' .. '9' )+
                 cnt21 = 0
                 while True: #loop21
                     alt21 = 2
@@ -2900,7 +2900,7 @@ class CLexer(Lexer):
 
 
                     if alt21 == 1:
-                        # C.g:540:10: '0' .. '9'
+                        # C.g:543:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2917,14 +2917,14 @@ class CLexer(Lexer):
 
                 self.mExponent()
 
-                # C.g:540:30: ( FloatTypeSuffix )?
+                # C.g:543:30: ( FloatTypeSuffix )?
                 alt22 = 2
                 LA22_0 = self.input.LA(1)
 
                 if (LA22_0 == u'D' or LA22_0 == u'F' or LA22_0 == u'd' or LA22_0 == u'f') :
                     alt22 = 1
                 if alt22 == 1:
-                    # C.g:540:30: FloatTypeSuffix
+                    # C.g:543:30: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2933,8 +2933,8 @@ class CLexer(Lexer):
 
 
             elif alt25 == 4:
-                # C.g:541:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix
-                # C.g:541:9: ( '0' .. '9' )+
+                # C.g:544:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix
+                # C.g:544:9: ( '0' .. '9' )+
                 cnt23 = 0
                 while True: #loop23
                     alt23 = 2
@@ -2945,7 +2945,7 @@ class CLexer(Lexer):
 
 
                     if alt23 == 1:
-                        # C.g:541:10: '0' .. '9'
+                        # C.g:544:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2960,14 +2960,14 @@ class CLexer(Lexer):
                     cnt23 += 1
 
 
-                # C.g:541:21: ( Exponent )?
+                # C.g:544:21: ( Exponent )?
                 alt24 = 2
                 LA24_0 = self.input.LA(1)
 
                 if (LA24_0 == u'E' or LA24_0 == u'e') :
                     alt24 = 1
                 if alt24 == 1:
-                    # C.g:541:21: Exponent
+                    # C.g:544:21: Exponent
                     self.mExponent()
 
 
@@ -2990,8 +2990,8 @@ class CLexer(Lexer):
     def mExponent(self, ):
 
         try:
-            # C.g:545:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )
-            # C.g:545:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
+            # C.g:548:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )
+            # C.g:548:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
             if self.input.LA(1) == u'E' or self.input.LA(1) == u'e':
                 self.input.consume();
 
@@ -3001,7 +3001,7 @@ class CLexer(Lexer):
                 raise mse
 
 
-            # C.g:545:22: ( '+' | '-' )?
+            # C.g:548:22: ( '+' | '-' )?
             alt26 = 2
             LA26_0 = self.input.LA(1)
 
@@ -3021,7 +3021,7 @@ class CLexer(Lexer):
 
 
 
-            # C.g:545:33: ( '0' .. '9' )+
+            # C.g:548:33: ( '0' .. '9' )+
             cnt27 = 0
             while True: #loop27
                 alt27 = 2
@@ -3032,7 +3032,7 @@ class CLexer(Lexer):
 
 
                 if alt27 == 1:
-                    # C.g:545:34: '0' .. '9'
+                    # C.g:548:34: '0' .. '9'
                     self.matchRange(u'0', u'9')
 
 
@@ -3063,8 +3063,8 @@ class CLexer(Lexer):
     def mFloatTypeSuffix(self, ):
 
         try:
-            # C.g:548:17: ( ( 'f' | 'F' | 'd' | 'D' ) )
-            # C.g:548:19: ( 'f' | 'F' | 'd' | 'D' )
+            # C.g:551:17: ( ( 'f' | 'F' | 'd' | 'D' ) )
+            # C.g:551:19: ( 'f' | 'F' | 'd' | 'D' )
             if self.input.LA(1) == u'D' or self.input.LA(1) == u'F' or self.input.LA(1) == u'd' or self.input.LA(1) == u'f':
                 self.input.consume();
 
@@ -3090,7 +3090,7 @@ class CLexer(Lexer):
     def mEscapeSequence(self, ):
 
         try:
-            # C.g:552:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape )
+            # C.g:555:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape )
             alt28 = 2
             LA28_0 = self.input.LA(1)
 
@@ -3102,17 +3102,17 @@ class CLexer(Lexer):
                 elif ((u'0' <= LA28_1 <= u'7')) :
                     alt28 = 2
                 else:
-                    nvae = NoViableAltException("550:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 1, self.input)
+                    nvae = NoViableAltException("553:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 1, self.input)
 
                     raise nvae
 
             else:
-                nvae = NoViableAltException("550:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 0, self.input)
+                nvae = NoViableAltException("553:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 0, self.input)
 
                 raise nvae
 
             if alt28 == 1:
-                # C.g:552:8: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' )
+                # C.g:555:8: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' )
                 self.match(u'\\')
 
                 if self.input.LA(1) == u'"' or self.input.LA(1) == u'\'' or self.input.LA(1) == u'\\' or self.input.LA(1) == u'b' or self.input.LA(1) == u'f' or self.input.LA(1) == u'n' or self.input.LA(1) == u'r' or self.input.LA(1) == u't':
@@ -3127,7 +3127,7 @@ class CLexer(Lexer):
 
 
             elif alt28 == 2:
-                # C.g:553:9: OctalEscape
+                # C.g:556:9: OctalEscape
                 self.mOctalEscape()
 
 
@@ -3145,7 +3145,7 @@ class CLexer(Lexer):
     def mOctalEscape(self, ):
 
         try:
-            # C.g:558:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            # C.g:561:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             alt29 = 3
             LA29_0 = self.input.LA(1)
 
@@ -3172,35 +3172,35 @@ class CLexer(Lexer):
                     else:
                         alt29 = 3
                 else:
-                    nvae = NoViableAltException("556:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 1, self.input)
+                    nvae = NoViableAltException("559:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 1, self.input)
 
                     raise nvae
 
             else:
-                nvae = NoViableAltException("556:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 0, self.input)
+                nvae = NoViableAltException("559:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 0, self.input)
 
                 raise nvae
 
             if alt29 == 1:
-                # C.g:558:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                # C.g:561:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:558:14: ( '0' .. '3' )
-                # C.g:558:15: '0' .. '3'
+                # C.g:561:14: ( '0' .. '3' )
+                # C.g:561:15: '0' .. '3'
                 self.matchRange(u'0', u'3')
 
 
 
 
-                # C.g:558:25: ( '0' .. '7' )
-                # C.g:558:26: '0' .. '7'
+                # C.g:561:25: ( '0' .. '7' )
+                # C.g:561:26: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
 
 
-                # C.g:558:36: ( '0' .. '7' )
-                # C.g:558:37: '0' .. '7'
+                # C.g:561:36: ( '0' .. '7' )
+                # C.g:561:37: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -3209,18 +3209,18 @@ class CLexer(Lexer):
 
 
             elif alt29 == 2:
-                # C.g:559:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                # C.g:562:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:559:14: ( '0' .. '7' )
-                # C.g:559:15: '0' .. '7'
+                # C.g:562:14: ( '0' .. '7' )
+                # C.g:562:15: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
 
 
-                # C.g:559:25: ( '0' .. '7' )
-                # C.g:559:26: '0' .. '7'
+                # C.g:562:25: ( '0' .. '7' )
+                # C.g:562:26: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -3229,11 +3229,11 @@ class CLexer(Lexer):
 
 
             elif alt29 == 3:
-                # C.g:560:9: '\\\\' ( '0' .. '7' )
+                # C.g:563:9: '\\\\' ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:560:14: ( '0' .. '7' )
-                # C.g:560:15: '0' .. '7'
+                # C.g:563:14: ( '0' .. '7' )
+                # C.g:563:15: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -3254,8 +3254,8 @@ class CLexer(Lexer):
     def mUnicodeEscape(self, ):
 
         try:
-            # C.g:565:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            # C.g:565:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            # C.g:568:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            # C.g:568:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             self.match(u'\\')
 
             self.match(u'u')
@@ -3286,8 +3286,8 @@ class CLexer(Lexer):
         try:
             self.type = WS
 
-            # C.g:568:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) )
-            # C.g:568:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' )
+            # C.g:571:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) )
+            # C.g:571:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' )
             if (u'\t' <= self.input.LA(1) <= u'\n') or (u'\f' <= self.input.LA(1) <= u'\r') or self.input.LA(1) == u' ':
                 self.input.consume();
 
@@ -3318,10 +3318,10 @@ class CLexer(Lexer):
         try:
             self.type = BS
 
-            # C.g:572:5: ( ( '\\\\' ) )
-            # C.g:572:7: ( '\\\\' )
-            # C.g:572:7: ( '\\\\' )
-            # C.g:572:8: '\\\\'
+            # C.g:575:5: ( ( '\\\\' ) )
+            # C.g:575:7: ( '\\\\' )
+            # C.g:575:7: ( '\\\\' )
+            # C.g:575:8: '\\\\'
             self.match(u'\\')
 
 
@@ -3348,8 +3348,8 @@ class CLexer(Lexer):
         try:
             self.type = UnicodeVocabulary
 
-            # C.g:580:5: ( '\\u0003' .. '\\uFFFE' )
-            # C.g:580:7: '\\u0003' .. '\\uFFFE'
+            # C.g:583:5: ( '\\u0003' .. '\\uFFFE' )
+            # C.g:583:7: '\\u0003' .. '\\uFFFE'
             self.matchRange(u'\u0003', u'\uFFFE')
 
 
@@ -3370,12 +3370,12 @@ class CLexer(Lexer):
         try:
             self.type = COMMENT
 
-            # C.g:583:5: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            # C.g:583:9: '/*' ( options {greedy=false; } : . )* '*/'
+            # C.g:586:5: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            # C.g:586:9: '/*' ( options {greedy=false; } : . )* '*/'
             self.match("/*")
 
 
-            # C.g:583:14: ( options {greedy=false; } : . )*
+            # C.g:586:14: ( options {greedy=false; } : . )*
             while True: #loop30
                 alt30 = 2
                 LA30_0 = self.input.LA(1)
@@ -3394,7 +3394,7 @@ class CLexer(Lexer):
 
 
                 if alt30 == 1:
-                    # C.g:583:42: .
+                    # C.g:586:42: .
                     self.matchAny()
 
 
@@ -3427,12 +3427,12 @@ class CLexer(Lexer):
         try:
             self.type = LINE_COMMENT
 
-            # C.g:588:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
-            # C.g:588:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
+            # C.g:591:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
+            # C.g:591:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
             self.match("//")
 
 
-            # C.g:588:12: (~ ( '\\n' | '\\r' ) )*
+            # C.g:591:12: (~ ( '\\n' | '\\r' ) )*
             while True: #loop31
                 alt31 = 2
                 LA31_0 = self.input.LA(1)
@@ -3442,7 +3442,7 @@ class CLexer(Lexer):
 
 
                 if alt31 == 1:
-                    # C.g:588:12: ~ ( '\\n' | '\\r' )
+                    # C.g:591:12: ~ ( '\\n' | '\\r' )
                     if (u'\u0000' <= self.input.LA(1) <= u'\t') or (u'\u000B' <= self.input.LA(1) <= u'\f') or (u'\u000E' <= self.input.LA(1) <= u'\uFFFE'):
                         self.input.consume();
 
@@ -3458,14 +3458,14 @@ class CLexer(Lexer):
                     break #loop31
 
 
-            # C.g:588:26: ( '\\r' )?
+            # C.g:591:26: ( '\\r' )?
             alt32 = 2
             LA32_0 = self.input.LA(1)
 
             if (LA32_0 == u'\r') :
                 alt32 = 1
             if alt32 == 1:
-                # C.g:588:26: '\\r'
+                # C.g:591:26: '\\r'
                 self.match(u'\r')
 
 
@@ -3494,11 +3494,11 @@ class CLexer(Lexer):
         try:
             self.type = LINE_COMMAND
 
-            # C.g:593:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
-            # C.g:593:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
+            # C.g:596:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
+            # C.g:596:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
             self.match(u'#')
 
-            # C.g:593:11: (~ ( '\\n' | '\\r' ) )*
+            # C.g:596:11: (~ ( '\\n' | '\\r' ) )*
             while True: #loop33
                 alt33 = 2
                 LA33_0 = self.input.LA(1)
@@ -3508,7 +3508,7 @@ class CLexer(Lexer):
 
 
                 if alt33 == 1:
-                    # C.g:593:11: ~ ( '\\n' | '\\r' )
+                    # C.g:596:11: ~ ( '\\n' | '\\r' )
                     if (u'\u0000' <= self.input.LA(1) <= u'\t') or (u'\u000B' <= self.input.LA(1) <= u'\f') or (u'\u000E' <= self.input.LA(1) <= u'\uFFFE'):
                         self.input.consume();
 
@@ -3524,14 +3524,14 @@ class CLexer(Lexer):
                     break #loop33
 
 
-            # C.g:593:25: ( '\\r' )?
+            # C.g:596:25: ( '\\r' )?
             alt34 = 2
             LA34_0 = self.input.LA(1)
 
             if (LA34_0 == u'\r') :
                 alt34 = 1
             if alt34 == 1:
-                # C.g:593:25: '\\r'
+                # C.g:596:25: '\\r'
                 self.match(u'\r')
 
 
index 874d6f4..d9bca13 100644 (file)
@@ -1,4 +1,4 @@
-# $ANTLR 3.0.1 C.g 2008-01-29 19:00:49
+# $ANTLR 3.0.1 C.g 2008-01-30 14:26:37
 
 from antlr3 import *
 from antlr3.compat import set, frozenset
@@ -394,7 +394,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif ((49 <= LA3_0 <= 57)) :
+                elif (LA3_0 == 58) :
                     LA3_14 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -412,12 +412,54 @@ class CParser(Parser):
 
                 elif (LA3_0 == 65) and (self.synpred4()):
                     alt3 = 1
-                elif (LA3_0 == 58) and (self.synpred4()):
-                    alt3 = 1
-                elif (LA3_0 == 59) and (self.synpred4()):
-                    alt3 = 1
-                elif (LA3_0 == 60) and (self.synpred4()):
-                    alt3 = 1
+                elif (LA3_0 == 59) :
+                    LA3_16 = self.input.LA(2)
+
+                    if (self.synpred4()) :
+                        alt3 = 1
+                    elif (self.synpred5()) :
+                        alt3 = 2
+                    else:
+                        if self.backtracking > 0:
+                            self.failed = True
+                            return 
+
+                        nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 16, self.input)
+
+                        raise nvae
+
+                elif (LA3_0 == 60) :
+                    LA3_17 = self.input.LA(2)
+
+                    if (self.synpred4()) :
+                        alt3 = 1
+                    elif (self.synpred5()) :
+                        alt3 = 2
+                    else:
+                        if self.backtracking > 0:
+                            self.failed = True
+                            return 
+
+                        nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 17, self.input)
+
+                        raise nvae
+
+                elif ((49 <= LA3_0 <= 57)) :
+                    LA3_18 = self.input.LA(2)
+
+                    if (self.synpred4()) :
+                        alt3 = 1
+                    elif (self.synpred5()) :
+                        alt3 = 2
+                    else:
+                        if self.backtracking > 0:
+                            self.failed = True
+                            return 
+
+                        nvae = NoViableAltException("62:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement ( ';' )? );", 3, 18, self.input)
+
+                        raise nvae
+
                 elif (LA3_0 == 61) and (self.synpred4()):
                     alt3 = 1
                 elif (LA3_0 == 26) :
@@ -526,11 +568,10 @@ class CParser(Parser):
                 # C.g:94:4: (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement )
                 # C.g:94:5: (d= declaration_specifiers )?
                 alt4 = 2
-                LA4_0 = self.input.LA(1)
-
-                if ((29 <= LA4_0 <= 42) or (45 <= LA4_0 <= 46) or (48 <= LA4_0 <= 57)) :
+                LA4 = self.input.LA(1)
+                if LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33 or LA4 == 34 or LA4 == 35 or LA4 == 36 or LA4 == 37 or LA4 == 38 or LA4 == 39 or LA4 == 40 or LA4 == 41 or LA4 == 42 or LA4 == 45 or LA4 == 46 or LA4 == 48 or LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57:
                     alt4 = 1
-                elif (LA4_0 == IDENTIFIER) :
+                elif LA4 == IDENTIFIER:
                     LA4 = self.input.LA(2)
                     if LA4 == 61:
                         LA4_21 = self.input.LA(3)
@@ -602,12 +643,42 @@ class CParser(Parser):
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57:
+                    elif LA4 == 58:
                         LA4_36 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 58 or LA4 == 59 or LA4 == 60 or LA4 == 65:
+                    elif LA4 == 65:
+                        alt4 = 1
+                    elif LA4 == 59:
+                        LA4_39 = self.input.LA(3)
+
+                        if (self.synpred7()) :
+                            alt4 = 1
+                    elif LA4 == 60:
+                        LA4_40 = self.input.LA(3)
+
+                        if (self.synpred7()) :
+                            alt4 = 1
+                    elif LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53 or LA4 == 54 or LA4 == 55 or LA4 == 56 or LA4 == 57:
+                        LA4_41 = self.input.LA(3)
+
+                        if (self.synpred7()) :
+                            alt4 = 1
+                elif LA4 == 58:
+                    LA4_14 = self.input.LA(2)
+
+                    if (self.synpred7()) :
+                        alt4 = 1
+                elif LA4 == 59:
+                    LA4_16 = self.input.LA(2)
+
+                    if (self.synpred7()) :
+                        alt4 = 1
+                elif LA4 == 60:
+                    LA4_17 = self.input.LA(2)
+
+                    if (self.synpred7()) :
                         alt4 = 1
                 if alt4 == 1:
                     # C.g:0:0: d= declaration_specifiers
@@ -628,7 +699,7 @@ class CParser(Parser):
                 alt6 = 2
                 LA6_0 = self.input.LA(1)
 
-                if (LA6_0 == IDENTIFIER or LA6_0 == 26 or (29 <= LA6_0 <= 42) or (45 <= LA6_0 <= 46) or (48 <= LA6_0 <= 57)) :
+                if (LA6_0 == IDENTIFIER or LA6_0 == 26 or (29 <= LA6_0 <= 42) or (45 <= LA6_0 <= 46) or (48 <= LA6_0 <= 60)) :
                     alt6 = 1
                 elif (LA6_0 == 43) :
                     alt6 = 2
@@ -649,7 +720,7 @@ class CParser(Parser):
                         alt5 = 2
                         LA5_0 = self.input.LA(1)
 
-                        if (LA5_0 == IDENTIFIER or LA5_0 == 26 or (29 <= LA5_0 <= 42) or (45 <= LA5_0 <= 46) or (48 <= LA5_0 <= 57)) :
+                        if (LA5_0 == IDENTIFIER or LA5_0 == 26 or (29 <= LA5_0 <= 42) or (45 <= LA5_0 <= 46) or (48 <= LA5_0 <= 60)) :
                             alt5 = 1
 
 
@@ -764,7 +835,7 @@ class CParser(Parser):
 
                 if (LA9_0 == 26) :
                     alt9 = 1
-                elif (LA9_0 == IDENTIFIER or (29 <= LA9_0 <= 42) or (45 <= LA9_0 <= 46) or (48 <= LA9_0 <= 57)) :
+                elif (LA9_0 == IDENTIFIER or (29 <= LA9_0 <= 42) or (45 <= LA9_0 <= 46) or (48 <= LA9_0 <= 60)) :
                     alt9 = 2
                 else:
                     if self.backtracking > 0:
@@ -783,11 +854,10 @@ class CParser(Parser):
                         return 
                     # C.g:115:17: (b= declaration_specifiers )?
                     alt7 = 2
-                    LA7_0 = self.input.LA(1)
-
-                    if ((29 <= LA7_0 <= 42) or (45 <= LA7_0 <= 46) or (48 <= LA7_0 <= 57)) :
+                    LA7 = self.input.LA(1)
+                    if LA7 == 29 or LA7 == 30 or LA7 == 31 or LA7 == 32 or LA7 == 33 or LA7 == 34 or LA7 == 35 or LA7 == 36 or LA7 == 37 or LA7 == 38 or LA7 == 39 or LA7 == 40 or LA7 == 41 or LA7 == 42 or LA7 == 45 or LA7 == 46 or LA7 == 48 or LA7 == 49 or LA7 == 50 or LA7 == 51 or LA7 == 52 or LA7 == 53 or LA7 == 54 or LA7 == 55 or LA7 == 56 or LA7 == 57:
                         alt7 = 1
-                    elif (LA7_0 == IDENTIFIER) :
+                    elif LA7 == IDENTIFIER:
                         LA7_13 = self.input.LA(2)
 
                         if (LA7_13 == 61) :
@@ -797,6 +867,21 @@ class CParser(Parser):
                                 alt7 = 1
                         elif (LA7_13 == IDENTIFIER or (29 <= LA7_13 <= 42) or (45 <= LA7_13 <= 46) or (48 <= LA7_13 <= 60) or LA7_13 == 65) :
                             alt7 = 1
+                    elif LA7 == 58:
+                        LA7_14 = self.input.LA(2)
+
+                        if (self.synpred10()) :
+                            alt7 = 1
+                    elif LA7 == 59:
+                        LA7_16 = self.input.LA(2)
+
+                        if (self.synpred10()) :
+                            alt7 = 1
+                    elif LA7 == 60:
+                        LA7_17 = self.input.LA(2)
+
+                        if (self.synpred10()) :
+                            alt7 = 1
                     if alt7 == 1:
                         # C.g:0:0: b= declaration_specifiers
                         self.following.append(self.FOLLOW_declaration_specifiers_in_declaration197)
@@ -901,7 +986,28 @@ class CParser(Parser):
                 while True: #loop10
                     alt10 = 4
                     LA10 = self.input.LA(1)
-                    if LA10 == IDENTIFIER:
+                    if LA10 == 58:
+                        LA10_2 = self.input.LA(2)
+
+                        if (self.synpred15()) :
+                            alt10 = 3
+
+
+                    elif LA10 == 59:
+                        LA10_3 = self.input.LA(2)
+
+                        if (self.synpred15()) :
+                            alt10 = 3
+
+
+                    elif LA10 == 60:
+                        LA10_4 = self.input.LA(2)
+
+                        if (self.synpred15()) :
+                            alt10 = 3
+
+
+                    elif LA10 == IDENTIFIER:
                         LA10_5 = self.input.LA(2)
 
                         if (self.synpred14()) :
@@ -1539,7 +1645,7 @@ class CParser(Parser):
                     alt16 = 2
                     LA16_0 = self.input.LA(1)
 
-                    if (LA16_0 == IDENTIFIER or (34 <= LA16_0 <= 42) or (45 <= LA16_0 <= 46) or (48 <= LA16_0 <= 57)) :
+                    if (LA16_0 == IDENTIFIER or (34 <= LA16_0 <= 42) or (45 <= LA16_0 <= 46) or (48 <= LA16_0 <= 60)) :
                         alt16 = 1
 
 
@@ -1644,24 +1750,45 @@ class CParser(Parser):
                 while True: #loop17
                     alt17 = 3
                     LA17 = self.input.LA(1)
-                    if LA17 == IDENTIFIER:
+                    if LA17 == 58:
+                        LA17_2 = self.input.LA(2)
+
+                        if (self.synpred39()) :
+                            alt17 = 1
+
+
+                    elif LA17 == 59:
+                        LA17_3 = self.input.LA(2)
+
+                        if (self.synpred39()) :
+                            alt17 = 1
+
+
+                    elif LA17 == 60:
+                        LA17_4 = self.input.LA(2)
+
+                        if (self.synpred39()) :
+                            alt17 = 1
+
+
+                    elif LA17 == IDENTIFIER:
                         LA17 = self.input.LA(2)
                         if LA17 == 63:
-                            LA17_23 = self.input.LA(3)
+                            LA17_89 = self.input.LA(3)
 
                             if (self.synpred40()) :
                                 alt17 = 2
 
 
                         elif LA17 == 61:
-                            LA17_24 = self.input.LA(3)
+                            LA17_90 = self.input.LA(3)
 
                             if (self.synpred40()) :
                                 alt17 = 2
 
 
                         elif LA17 == 47:
-                            LA17_25 = self.input.LA(3)
+                            LA17_91 = self.input.LA(3)
 
                             if (self.synpred40()) :
                                 alt17 = 2
@@ -2140,7 +2267,7 @@ class CParser(Parser):
 
 
     # $ANTLR start type_qualifier
-    # C.g:220:1: type_qualifier : ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' );
+    # C.g:220:1: type_qualifier : ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' );
     def type_qualifier(self, ):
 
         type_qualifier_StartIndex = self.input.index()
@@ -2149,9 +2276,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 21):
                     return 
 
-                # C.g:221:2: ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' )
+                # C.g:221:2: ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' | 'CONST' | 'UNALIGNED' | 'VOLATILE' | 'GLOBAL_REMOVE_IF_UNREFERENCED' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' )
                 # C.g:
-                if (49 <= self.input.LA(1) <= 57):
+                if (49 <= self.input.LA(1) <= 60):
                     self.input.consume();
                     self.errorRecovery = False
                     self.failed = False
@@ -2193,7 +2320,7 @@ class CParser(Parser):
 
 
     # $ANTLR start declarator
-    # C.g:232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );
+    # C.g:235:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );
     def declarator(self, ):
 
         retval = self.declarator_return()
@@ -2204,753 +2331,402 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 22):
                     return retval
 
-                # C.g:233:2: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer )
-                alt34 = 3
-                LA34 = self.input.LA(1)
-                if LA34 == 65:
-                    LA34_1 = self.input.LA(2)
+                # C.g:236:2: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer )
+                alt30 = 2
+                LA30_0 = self.input.LA(1)
+
+                if (LA30_0 == 65) :
+                    LA30_1 = self.input.LA(2)
 
-                    if (self.synpred62()) :
-                        alt34 = 1
-                    elif (self.synpred67()) :
-                        alt34 = 2
+                    if (self.synpred65()) :
+                        alt30 = 1
                     elif (True) :
-                        alt34 = 3
+                        alt30 = 2
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return retval
 
-                        nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 1, self.input)
+                        nvae = NoViableAltException("235:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 1, self.input)
 
                         raise nvae
 
-                elif LA34 == 58:
-                    LA34 = self.input.LA(2)
-                    if LA34 == 59:
-                        LA34_39 = self.input.LA(3)
+                elif (LA30_0 == IDENTIFIER or (58 <= LA30_0 <= 61)) :
+                    alt30 = 1
+                else:
+                    if self.backtracking > 0:
+                        self.failed = True
+                        return retval
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
+                    nvae = NoViableAltException("235:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 0, self.input)
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 39, self.input)
+                    raise nvae
 
-                            raise nvae
+                if alt30 == 1:
+                    # C.g:236:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator
+                    # C.g:236:4: ( pointer )?
+                    alt26 = 2
+                    LA26_0 = self.input.LA(1)
 
-                    elif LA34 == 60:
-                        LA34_40 = self.input.LA(3)
+                    if (LA26_0 == 65) :
+                        alt26 = 1
+                    if alt26 == 1:
+                        # C.g:0:0: pointer
+                        self.following.append(self.FOLLOW_pointer_in_declarator767)
+                        self.pointer()
+                        self.following.pop()
+                        if self.failed:
+                            return retval
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 40, self.input)
 
-                            raise nvae
+                    # C.g:236:13: ( 'EFIAPI' )?
+                    alt27 = 2
+                    LA27_0 = self.input.LA(1)
 
-                    elif LA34 == 65:
-                        alt34 = 2
-                    elif LA34 == IDENTIFIER:
-                        LA34_42 = self.input.LA(3)
+                    if (LA27_0 == 58) :
+                        alt27 = 1
+                    if alt27 == 1:
+                        # C.g:236:14: 'EFIAPI'
+                        self.match(self.input, 58, self.FOLLOW_58_in_declarator771)
+                        if self.failed:
+                            return retval
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 42, self.input)
 
-                            raise nvae
+                    # C.g:236:25: ( 'EFI_BOOTSERVICE' )?
+                    alt28 = 2
+                    LA28_0 = self.input.LA(1)
 
-                    elif LA34 == 61:
-                        LA34_43 = self.input.LA(3)
+                    if (LA28_0 == 59) :
+                        alt28 = 1
+                    if alt28 == 1:
+                        # C.g:236:26: 'EFI_BOOTSERVICE'
+                        self.match(self.input, 59, self.FOLLOW_59_in_declarator776)
+                        if self.failed:
+                            return retval
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 43, self.input)
 
-                            raise nvae
+                    # C.g:236:46: ( 'EFI_RUNTIMESERVICE' )?
+                    alt29 = 2
+                    LA29_0 = self.input.LA(1)
 
-                    else:
-                        if self.backtracking > 0:
-                            self.failed = True
+                    if (LA29_0 == 60) :
+                        alt29 = 1
+                    if alt29 == 1:
+                        # C.g:236:47: 'EFI_RUNTIMESERVICE'
+                        self.match(self.input, 60, self.FOLLOW_60_in_declarator781)
+                        if self.failed:
                             return retval
 
-                        nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 2, self.input)
 
-                        raise nvae
 
-                elif LA34 == 59:
-                    LA34 = self.input.LA(2)
-                    if LA34 == 60:
-                        LA34_44 = self.input.LA(3)
+                    self.following.append(self.FOLLOW_direct_declarator_in_declarator785)
+                    self.direct_declarator()
+                    self.following.pop()
+                    if self.failed:
+                        return retval
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 44, self.input)
+                elif alt30 == 2:
+                    # C.g:238:4: pointer
+                    self.following.append(self.FOLLOW_pointer_in_declarator791)
+                    self.pointer()
+                    self.following.pop()
+                    if self.failed:
+                        return retval
 
-                            raise nvae
 
-                    elif LA34 == IDENTIFIER:
-                        LA34_45 = self.input.LA(3)
+                retval.stop = self.input.LT(-1)
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 45, self.input)
+            except RecognitionException, re:
+                self.reportError(re)
+                self.recover(self.input, re)
+        finally:
+            if self.backtracking > 0:
+                self.memoize(self.input, 22, declarator_StartIndex)
 
-                            raise nvae
+            pass
 
-                    elif LA34 == 61:
-                        LA34_46 = self.input.LA(3)
+        return retval
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
+    # $ANTLR end declarator
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 46, self.input)
 
-                            raise nvae
+    # $ANTLR start direct_declarator
+    # C.g:241:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );
+    def direct_declarator(self, ):
 
-                    elif LA34 == 65:
-                        alt34 = 2
-                    else:
-                        if self.backtracking > 0:
-                            self.failed = True
-                            return retval
+        direct_declarator_StartIndex = self.input.index()
+        try:
+            try:
+                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 23):
+                    return 
 
-                        nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 3, self.input)
+                # C.g:242:2: ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ )
+                alt34 = 2
+                LA34_0 = self.input.LA(1)
 
-                        raise nvae
+                if (LA34_0 == IDENTIFIER) :
+                    alt34 = 1
+                elif (LA34_0 == 61) :
+                    alt34 = 2
+                else:
+                    if self.backtracking > 0:
+                        self.failed = True
+                        return 
 
-                elif LA34 == 60:
-                    LA34 = self.input.LA(2)
-                    if LA34 == IDENTIFIER:
-                        LA34_48 = self.input.LA(3)
+                    nvae = NoViableAltException("241:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );", 34, 0, self.input)
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
+                    raise nvae
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 48, self.input)
+                if alt34 == 1:
+                    # C.g:242:4: IDENTIFIER ( declarator_suffix )*
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator802)
+                    if self.failed:
+                        return 
+                    # C.g:242:15: ( declarator_suffix )*
+                    while True: #loop31
+                        alt31 = 2
+                        LA31_0 = self.input.LA(1)
 
-                            raise nvae
+                        if (LA31_0 == 61) :
+                            LA31 = self.input.LA(2)
+                            if LA31 == 62:
+                                LA31_30 = self.input.LA(3)
 
-                    elif LA34 == 61:
-                        LA34_49 = self.input.LA(3)
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 49, self.input)
+                            elif LA31 == 29 or LA31 == 30 or LA31 == 31 or LA31 == 32 or LA31 == 33:
+                                LA31_31 = self.input.LA(3)
 
-                            raise nvae
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                    elif LA34 == 65:
-                        alt34 = 2
-                    else:
-                        if self.backtracking > 0:
-                            self.failed = True
-                            return retval
 
-                        nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 4, self.input)
+                            elif LA31 == 34:
+                                LA31_32 = self.input.LA(3)
 
-                        raise nvae
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                elif LA34 == IDENTIFIER:
-                    LA34_5 = self.input.LA(2)
 
-                    if (self.synpred62()) :
-                        alt34 = 1
-                    elif (self.synpred67()) :
-                        alt34 = 2
-                    else:
-                        if self.backtracking > 0:
-                            self.failed = True
-                            return retval
+                            elif LA31 == 35:
+                                LA31_33 = self.input.LA(3)
 
-                        nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 5, self.input)
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                        raise nvae
 
-                elif LA34 == 61:
-                    LA34 = self.input.LA(2)
-                    if LA34 == 65:
-                        LA34_81 = self.input.LA(3)
+                            elif LA31 == 36:
+                                LA31_34 = self.input.LA(3)
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 81, self.input)
 
-                            raise nvae
+                            elif LA31 == 37:
+                                LA31_35 = self.input.LA(3)
 
-                    elif LA34 == 58:
-                        LA34_82 = self.input.LA(3)
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 82, self.input)
+                            elif LA31 == 38:
+                                LA31_36 = self.input.LA(3)
 
-                            raise nvae
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                    elif LA34 == 59:
-                        LA34_83 = self.input.LA(3)
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
+                            elif LA31 == 39:
+                                LA31_37 = self.input.LA(3)
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 83, self.input)
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                            raise nvae
 
-                    elif LA34 == 60:
-                        LA34_84 = self.input.LA(3)
+                            elif LA31 == 40:
+                                LA31_38 = self.input.LA(3)
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 84, self.input)
 
-                            raise nvae
+                            elif LA31 == 41:
+                                LA31_39 = self.input.LA(3)
 
-                    elif LA34 == IDENTIFIER:
-                        LA34_85 = self.input.LA(3)
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 85, self.input)
+                            elif LA31 == 42:
+                                LA31_40 = self.input.LA(3)
 
-                            raise nvae
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                    elif LA34 == 61:
-                        LA34_86 = self.input.LA(3)
 
-                        if (self.synpred62()) :
-                            alt34 = 1
-                        elif (self.synpred67()) :
-                            alt34 = 2
-                        else:
-                            if self.backtracking > 0:
-                                self.failed = True
-                                return retval
+                            elif LA31 == 45 or LA31 == 46:
+                                LA31_41 = self.input.LA(3)
 
-                            nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 86, self.input)
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                            raise nvae
-
-                    else:
-                        if self.backtracking > 0:
-                            self.failed = True
-                            return retval
-
-                        nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 6, self.input)
-
-                        raise nvae
-
-                else:
-                    if self.backtracking > 0:
-                        self.failed = True
-                        return retval
-
-                    nvae = NoViableAltException("232:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator | pointer );", 34, 0, self.input)
-
-                    raise nvae
-
-                if alt34 == 1:
-                    # C.g:233:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator
-                    # C.g:233:4: ( pointer )?
-                    alt26 = 2
-                    LA26_0 = self.input.LA(1)
-
-                    if (LA26_0 == 65) :
-                        alt26 = 1
-                    if alt26 == 1:
-                        # C.g:0:0: pointer
-                        self.following.append(self.FOLLOW_pointer_in_declarator752)
-                        self.pointer()
-                        self.following.pop()
-                        if self.failed:
-                            return retval
-
-
-
-                    # C.g:233:13: ( 'EFIAPI' )?
-                    alt27 = 2
-                    LA27_0 = self.input.LA(1)
 
-                    if (LA27_0 == 58) :
-                        alt27 = 1
-                    if alt27 == 1:
-                        # C.g:233:14: 'EFIAPI'
-                        self.match(self.input, 58, self.FOLLOW_58_in_declarator756)
-                        if self.failed:
-                            return retval
-
-
-
-                    # C.g:233:25: ( 'EFI_BOOTSERVICE' )?
-                    alt28 = 2
-                    LA28_0 = self.input.LA(1)
-
-                    if (LA28_0 == 59) :
-                        alt28 = 1
-                    if alt28 == 1:
-                        # C.g:233:26: 'EFI_BOOTSERVICE'
-                        self.match(self.input, 59, self.FOLLOW_59_in_declarator761)
-                        if self.failed:
-                            return retval
-
-
-
-                    # C.g:233:46: ( 'EFI_RUNTIMESERVICE' )?
-                    alt29 = 2
-                    LA29_0 = self.input.LA(1)
-
-                    if (LA29_0 == 60) :
-                        alt29 = 1
-                    if alt29 == 1:
-                        # C.g:233:47: 'EFI_RUNTIMESERVICE'
-                        self.match(self.input, 60, self.FOLLOW_60_in_declarator766)
-                        if self.failed:
-                            return retval
+                            elif LA31 == 48:
+                                LA31_42 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
 
-                    self.following.append(self.FOLLOW_direct_declarator_in_declarator770)
-                    self.direct_declarator()
-                    self.following.pop()
-                    if self.failed:
-                        return retval
+                            elif LA31 == IDENTIFIER:
+                                LA31_43 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                elif alt34 == 2:
-                    # C.g:234:4: ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? ( pointer )? direct_declarator
-                    # C.g:234:4: ( 'EFIAPI' )?
-                    alt30 = 2
-                    LA30_0 = self.input.LA(1)
 
-                    if (LA30_0 == 58) :
-                        alt30 = 1
-                    if alt30 == 1:
-                        # C.g:234:5: 'EFIAPI'
-                        self.match(self.input, 58, self.FOLLOW_58_in_declarator776)
-                        if self.failed:
-                            return retval
+                            elif LA31 == 58:
+                                LA31_44 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
 
-                    # C.g:234:16: ( 'EFI_BOOTSERVICE' )?
-                    alt31 = 2
-                    LA31_0 = self.input.LA(1)
+                            elif LA31 == 65:
+                                LA31_45 = self.input.LA(3)
 
-                    if (LA31_0 == 59) :
-                        alt31 = 1
-                    if alt31 == 1:
-                        # C.g:234:17: 'EFI_BOOTSERVICE'
-                        self.match(self.input, 59, self.FOLLOW_59_in_declarator781)
-                        if self.failed:
-                            return retval
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
 
+                            elif LA31 == 59:
+                                LA31_48 = self.input.LA(3)
 
-                    # C.g:234:37: ( 'EFI_RUNTIMESERVICE' )?
-                    alt32 = 2
-                    LA32_0 = self.input.LA(1)
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                    if (LA32_0 == 60) :
-                        alt32 = 1
-                    if alt32 == 1:
-                        # C.g:234:38: 'EFI_RUNTIMESERVICE'
-                        self.match(self.input, 60, self.FOLLOW_60_in_declarator786)
-                        if self.failed:
-                            return retval
 
+                            elif LA31 == 60:
+                                LA31_49 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                    # C.g:234:61: ( pointer )?
-                    alt33 = 2
-                    LA33_0 = self.input.LA(1)
 
-                    if (LA33_0 == 65) :
-                        alt33 = 1
-                    if alt33 == 1:
-                        # C.g:0:0: pointer
-                        self.following.append(self.FOLLOW_pointer_in_declarator790)
-                        self.pointer()
-                        self.following.pop()
-                        if self.failed:
-                            return retval
+                            elif LA31 == 49 or LA31 == 50 or LA31 == 51 or LA31 == 52 or LA31 == 53 or LA31 == 54 or LA31 == 55 or LA31 == 56 or LA31 == 57:
+                                LA31_50 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
 
-                    self.following.append(self.FOLLOW_direct_declarator_in_declarator793)
-                    self.direct_declarator()
-                    self.following.pop()
-                    if self.failed:
-                        return retval
 
+                        elif (LA31_0 == 63) :
+                            LA31 = self.input.LA(2)
+                            if LA31 == 64:
+                                LA31_51 = self.input.LA(3)
 
-                elif alt34 == 3:
-                    # C.g:235:4: pointer
-                    self.following.append(self.FOLLOW_pointer_in_declarator798)
-                    self.pointer()
-                    self.following.pop()
-                    if self.failed:
-                        return retval
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
 
-                retval.stop = self.input.LT(-1)
+                            elif LA31 == 61:
+                                LA31_52 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-            except RecognitionException, re:
-                self.reportError(re)
-                self.recover(self.input, re)
-        finally:
-            if self.backtracking > 0:
-                self.memoize(self.input, 22, declarator_StartIndex)
 
-            pass
+                            elif LA31 == IDENTIFIER:
+                                LA31_53 = self.input.LA(3)
 
-        return retval
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-    # $ANTLR end declarator
 
+                            elif LA31 == HEX_LITERAL:
+                                LA31_54 = self.input.LA(3)
 
-    # $ANTLR start direct_declarator
-    # C.g:238:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ );
-    def direct_declarator(self, ):
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-        direct_declarator_StartIndex = self.input.index()
-        try:
-            try:
-                if self.backtracking > 0 and self.alreadyParsedRule(self.input, 23):
-                    return 
 
-                # C.g:239:2: ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ )
-                alt37 = 2
-                LA37_0 = self.input.LA(1)
+                            elif LA31 == OCTAL_LITERAL:
+                                LA31_55 = self.input.LA(3)
 
-                if (LA37_0 == IDENTIFIER) :
-                    alt37 = 1
-                elif (LA37_0 == 61) :
-                    alt37 = 2
-                else:
-                    if self.backtracking > 0:
-                        self.failed = True
-                        return 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                    nvae = NoViableAltException("238:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ );", 37, 0, self.input)
 
-                    raise nvae
+                            elif LA31 == DECIMAL_LITERAL:
+                                LA31_56 = self.input.LA(3)
 
-                if alt37 == 1:
-                    # C.g:239:4: IDENTIFIER ( declarator_suffix )*
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator809)
-                    if self.failed:
-                        return 
-                    # C.g:239:15: ( declarator_suffix )*
-                    while True: #loop35
-                        alt35 = 2
-                        LA35_0 = self.input.LA(1)
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                        if (LA35_0 == 61) :
-                            LA35 = self.input.LA(2)
-                            if LA35 == 62:
-                                LA35_30 = self.input.LA(3)
 
-                                if (self.synpred68()) :
-                                    alt35 = 1
+                            elif LA31 == CHARACTER_LITERAL:
+                                LA31_57 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                            elif LA35 == 65:
-                                LA35_31 = self.input.LA(3)
 
-                                if (self.synpred68()) :
-                                    alt35 = 1
+                            elif LA31 == STRING_LITERAL:
+                                LA31_58 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                            elif LA35 == 29 or LA35 == 30 or LA35 == 31 or LA35 == 32 or LA35 == 33:
-                                LA35_34 = self.input.LA(3)
 
-                                if (self.synpred68()) :
-                                    alt35 = 1
+                            elif LA31 == FLOATING_POINT_LITERAL:
+                                LA31_59 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                            elif LA35 == 34:
-                                LA35_35 = self.input.LA(3)
 
-                                if (self.synpred68()) :
-                                    alt35 = 1
+                            elif LA31 == 71:
+                                LA31_60 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                            elif LA35 == 35:
-                                LA35_36 = self.input.LA(3)
 
-                                if (self.synpred68()) :
-                                    alt35 = 1
+                            elif LA31 == 72:
+                                LA31_61 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                            elif LA35 == 36:
-                                LA35_37 = self.input.LA(3)
 
-                                if (self.synpred68()) :
-                                    alt35 = 1
+                            elif LA31 == 65 or LA31 == 67 or LA31 == 68 or LA31 == 76 or LA31 == 77 or LA31 == 78:
+                                LA31_62 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                            elif LA35 == 37:
-                                LA35_38 = self.input.LA(3)
 
-                                if (self.synpred68()) :
-                                    alt35 = 1
+                            elif LA31 == 73:
+                                LA31_63 = self.input.LA(3)
 
+                                if (self.synpred66()) :
+                                    alt31 = 1
 
-                            elif LA35 == 38:
-                                LA35_39 = self.input.LA(3)
 
-                                if (self.synpred68()) :
-                                    alt35 = 1
 
 
-                            elif LA35 == 39:
-                                LA35_40 = self.input.LA(3)
 
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == 40:
-                                LA35_41 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == 41:
-                                LA35_42 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == 42:
-                                LA35_43 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == 45 or LA35 == 46:
-                                LA35_44 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == 48:
-                                LA35_45 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == IDENTIFIER:
-                                LA35_46 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == 49 or LA35 == 50 or LA35 == 51 or LA35 == 52 or LA35 == 53 or LA35 == 54 or LA35 == 55 or LA35 == 56 or LA35 == 57:
-                                LA35_47 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-
-                        elif (LA35_0 == 63) :
-                            LA35 = self.input.LA(2)
-                            if LA35 == 64:
-                                LA35_51 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == 61:
-                                LA35_52 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == IDENTIFIER:
-                                LA35_53 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == HEX_LITERAL:
-                                LA35_54 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == OCTAL_LITERAL:
-                                LA35_55 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == DECIMAL_LITERAL:
-                                LA35_56 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == CHARACTER_LITERAL:
-                                LA35_57 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == STRING_LITERAL:
-                                LA35_58 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == FLOATING_POINT_LITERAL:
-                                LA35_59 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == 71:
-                                LA35_60 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == 72:
-                                LA35_61 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == 65 or LA35 == 67 or LA35 == 68 or LA35 == 76 or LA35 == 77 or LA35 == 78:
-                                LA35_62 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-                            elif LA35 == 73:
-                                LA35_63 = self.input.LA(3)
-
-                                if (self.synpred68()) :
-                                    alt35 = 1
-
-
-
-
-
-                        if alt35 == 1:
+                        if alt31 == 1:
                             # C.g:0:0: declarator_suffix
-                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator811)
+                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator804)
                             self.declarator_suffix()
                             self.following.pop()
                             if self.failed:
@@ -2958,244 +2734,282 @@ class CParser(Parser):
 
 
                         else:
-                            break #loop35
+                            break #loop31
 
 
 
 
-                elif alt37 == 2:
-                    # C.g:240:4: '(' declarator ')' ( declarator_suffix )+
-                    self.match(self.input, 61, self.FOLLOW_61_in_direct_declarator817)
+                elif alt34 == 2:
+                    # C.g:243:4: '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+
+                    self.match(self.input, 61, self.FOLLOW_61_in_direct_declarator810)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_declarator_in_direct_declarator819)
+                    # C.g:243:8: ( 'EFIAPI' )?
+                    alt32 = 2
+                    LA32_0 = self.input.LA(1)
+
+                    if (LA32_0 == 58) :
+                        LA32_1 = self.input.LA(2)
+
+                        if (self.synpred68()) :
+                            alt32 = 1
+                    if alt32 == 1:
+                        # C.g:243:9: 'EFIAPI'
+                        self.match(self.input, 58, self.FOLLOW_58_in_direct_declarator813)
+                        if self.failed:
+                            return 
+
+
+
+                    self.following.append(self.FOLLOW_declarator_in_direct_declarator817)
                     self.declarator()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_direct_declarator821)
+                    self.match(self.input, 62, self.FOLLOW_62_in_direct_declarator819)
                     if self.failed:
                         return 
-                    # C.g:240:23: ( declarator_suffix )+
-                    cnt36 = 0
-                    while True: #loop36
-                        alt36 = 2
-                        LA36_0 = self.input.LA(1)
+                    # C.g:243:35: ( declarator_suffix )+
+                    cnt33 = 0
+                    while True: #loop33
+                        alt33 = 2
+                        LA33_0 = self.input.LA(1)
 
-                        if (LA36_0 == 61) :
-                            LA36 = self.input.LA(2)
-                            if LA36 == 62:
-                                LA36_30 = self.input.LA(3)
+                        if (LA33_0 == 61) :
+                            LA33 = self.input.LA(2)
+                            if LA33 == 62:
+                                LA33_30 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 65:
-                                LA36_31 = self.input.LA(3)
+                            elif LA33 == 29 or LA33 == 30 or LA33 == 31 or LA33 == 32 or LA33 == 33:
+                                LA33_31 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 29 or LA36 == 30 or LA36 == 31 or LA36 == 32 or LA36 == 33:
-                                LA36_34 = self.input.LA(3)
+                            elif LA33 == 34:
+                                LA33_32 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 34:
-                                LA36_35 = self.input.LA(3)
+                            elif LA33 == 35:
+                                LA33_33 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 35:
-                                LA36_36 = self.input.LA(3)
+                            elif LA33 == 36:
+                                LA33_34 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 36:
-                                LA36_37 = self.input.LA(3)
+                            elif LA33 == 37:
+                                LA33_35 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 37:
-                                LA36_38 = self.input.LA(3)
+                            elif LA33 == 38:
+                                LA33_36 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 38:
-                                LA36_39 = self.input.LA(3)
+                            elif LA33 == 39:
+                                LA33_37 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 39:
-                                LA36_40 = self.input.LA(3)
+                            elif LA33 == 40:
+                                LA33_38 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 40:
-                                LA36_41 = self.input.LA(3)
+                            elif LA33 == 41:
+                                LA33_39 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 41:
-                                LA36_42 = self.input.LA(3)
+                            elif LA33 == 42:
+                                LA33_40 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 42:
-                                LA36_43 = self.input.LA(3)
+                            elif LA33 == 45 or LA33 == 46:
+                                LA33_41 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 45 or LA36 == 46:
-                                LA36_44 = self.input.LA(3)
+                            elif LA33 == 48:
+                                LA33_42 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 48:
-                                LA36_45 = self.input.LA(3)
+                            elif LA33 == IDENTIFIER:
+                                LA33_43 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == IDENTIFIER:
-                                LA36_46 = self.input.LA(3)
+                            elif LA33 == 58:
+                                LA33_44 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 49 or LA36 == 50 or LA36 == 51 or LA36 == 52 or LA36 == 53 or LA36 == 54 or LA36 == 55 or LA36 == 56 or LA36 == 57:
-                                LA36_47 = self.input.LA(3)
+                            elif LA33 == 65:
+                                LA33_45 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
+                            elif LA33 == 59:
+                                LA33_48 = self.input.LA(3)
 
-                        elif (LA36_0 == 63) :
-                            LA36 = self.input.LA(2)
-                            if LA36 == 64:
-                                LA36_51 = self.input.LA(3)
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
 
+                            elif LA33 == 60:
+                                LA33_49 = self.input.LA(3)
 
-                            elif LA36 == 61:
-                                LA36_52 = self.input.LA(3)
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
 
+                            elif LA33 == 49 or LA33 == 50 or LA33 == 51 or LA33 == 52 or LA33 == 53 or LA33 == 54 or LA33 == 55 or LA33 == 56 or LA33 == 57:
+                                LA33_50 = self.input.LA(3)
 
-                            elif LA36 == IDENTIFIER:
-                                LA36_53 = self.input.LA(3)
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
 
 
-                            elif LA36 == HEX_LITERAL:
-                                LA36_54 = self.input.LA(3)
+                        elif (LA33_0 == 63) :
+                            LA33 = self.input.LA(2)
+                            if LA33 == 64:
+                                LA33_51 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == OCTAL_LITERAL:
-                                LA36_55 = self.input.LA(3)
+                            elif LA33 == 61:
+                                LA33_52 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == DECIMAL_LITERAL:
-                                LA36_56 = self.input.LA(3)
+                            elif LA33 == IDENTIFIER:
+                                LA33_53 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == CHARACTER_LITERAL:
-                                LA36_57 = self.input.LA(3)
+                            elif LA33 == HEX_LITERAL:
+                                LA33_54 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == STRING_LITERAL:
-                                LA36_58 = self.input.LA(3)
+                            elif LA33 == OCTAL_LITERAL:
+                                LA33_55 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == FLOATING_POINT_LITERAL:
-                                LA36_59 = self.input.LA(3)
+                            elif LA33 == DECIMAL_LITERAL:
+                                LA33_56 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 71:
-                                LA36_60 = self.input.LA(3)
+                            elif LA33 == CHARACTER_LITERAL:
+                                LA33_57 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 72:
-                                LA36_61 = self.input.LA(3)
+                            elif LA33 == STRING_LITERAL:
+                                LA33_58 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 65 or LA36 == 67 or LA36 == 68 or LA36 == 76 or LA36 == 77 or LA36 == 78:
-                                LA36_62 = self.input.LA(3)
+                            elif LA33 == FLOATING_POINT_LITERAL:
+                                LA33_59 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                            elif LA36 == 73:
-                                LA36_63 = self.input.LA(3)
+                            elif LA33 == 71:
+                                LA33_60 = self.input.LA(3)
 
-                                if (self.synpred70()) :
-                                    alt36 = 1
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
+                            elif LA33 == 72:
+                                LA33_61 = self.input.LA(3)
 
+                                if (self.synpred69()) :
+                                    alt33 = 1
 
 
-                        if alt36 == 1:
+                            elif LA33 == 65 or LA33 == 67 or LA33 == 68 or LA33 == 76 or LA33 == 77 or LA33 == 78:
+                                LA33_62 = self.input.LA(3)
+
+                                if (self.synpred69()) :
+                                    alt33 = 1
+
+
+                            elif LA33 == 73:
+                                LA33_63 = self.input.LA(3)
+
+                                if (self.synpred69()) :
+                                    alt33 = 1
+
+
+
+
+
+                        if alt33 == 1:
                             # C.g:0:0: declarator_suffix
-                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator823)
+                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator821)
                             self.declarator_suffix()
                             self.following.pop()
                             if self.failed:
@@ -3203,17 +3017,17 @@ class CParser(Parser):
 
 
                         else:
-                            if cnt36 >= 1:
-                                break #loop36
+                            if cnt33 >= 1:
+                                break #loop33
 
                             if self.backtracking > 0:
                                 self.failed = True
                                 return 
 
-                            eee = EarlyExitException(36, self.input)
+                            eee = EarlyExitException(33, self.input)
                             raise eee
 
-                        cnt36 += 1
+                        cnt33 += 1
 
 
 
@@ -3234,7 +3048,7 @@ class CParser(Parser):
 
 
     # $ANTLR start declarator_suffix
-    # C.g:243:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );
+    # C.g:246:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );
     def declarator_suffix(self, ):
 
         declarator_suffix_StartIndex = self.input.index()
@@ -3243,54 +3057,54 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 24):
                     return 
 
-                # C.g:244:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )
-                alt38 = 5
-                LA38_0 = self.input.LA(1)
+                # C.g:247:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )
+                alt35 = 5
+                LA35_0 = self.input.LA(1)
 
-                if (LA38_0 == 63) :
-                    LA38_1 = self.input.LA(2)
+                if (LA35_0 == 63) :
+                    LA35_1 = self.input.LA(2)
 
-                    if (LA38_1 == 64) :
-                        alt38 = 2
-                    elif ((IDENTIFIER <= LA38_1 <= FLOATING_POINT_LITERAL) or LA38_1 == 61 or LA38_1 == 65 or (67 <= LA38_1 <= 68) or (71 <= LA38_1 <= 73) or (76 <= LA38_1 <= 78)) :
-                        alt38 = 1
+                    if (LA35_1 == 64) :
+                        alt35 = 2
+                    elif ((IDENTIFIER <= LA35_1 <= FLOATING_POINT_LITERAL) or LA35_1 == 61 or LA35_1 == 65 or (67 <= LA35_1 <= 68) or (71 <= LA35_1 <= 73) or (76 <= LA35_1 <= 78)) :
+                        alt35 = 1
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("243:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 38, 1, self.input)
+                        nvae = NoViableAltException("246:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 1, self.input)
 
                         raise nvae
 
-                elif (LA38_0 == 61) :
-                    LA38 = self.input.LA(2)
-                    if LA38 == 62:
-                        alt38 = 5
-                    elif LA38 == IDENTIFIER:
-                        LA38_17 = self.input.LA(3)
-
-                        if (self.synpred73()) :
-                            alt38 = 3
-                        elif (self.synpred74()) :
-                            alt38 = 4
+                elif (LA35_0 == 61) :
+                    LA35 = self.input.LA(2)
+                    if LA35 == 62:
+                        alt35 = 5
+                    elif LA35 == IDENTIFIER:
+                        LA35_17 = self.input.LA(3)
+
+                        if (self.synpred72()) :
+                            alt35 = 3
+                        elif (self.synpred73()) :
+                            alt35 = 4
                         else:
                             if self.backtracking > 0:
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("243:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 38, 17, self.input)
+                            nvae = NoViableAltException("246:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 17, self.input)
 
                             raise nvae
 
-                    elif LA38 == 29 or LA38 == 30 or LA38 == 31 or LA38 == 32 or LA38 == 33 or LA38 == 34 or LA38 == 35 or LA38 == 36 or LA38 == 37 or LA38 == 38 or LA38 == 39 or LA38 == 40 or LA38 == 41 or LA38 == 42 or LA38 == 45 or LA38 == 46 or LA38 == 48 or LA38 == 49 or LA38 == 50 or LA38 == 51 or LA38 == 52 or LA38 == 53 or LA38 == 54 or LA38 == 55 or LA38 == 56 or LA38 == 57 or LA38 == 65:
-                        alt38 = 3
+                    elif LA35 == 29 or LA35 == 30 or LA35 == 31 or LA35 == 32 or LA35 == 33 or LA35 == 34 or LA35 == 35 or LA35 == 36 or LA35 == 37 or LA35 == 38 or LA35 == 39 or LA35 == 40 or LA35 == 41 or LA35 == 42 or LA35 == 45 or LA35 == 46 or LA35 == 48 or LA35 == 49 or LA35 == 50 or LA35 == 51 or LA35 == 52 or LA35 == 53 or LA35 == 54 or LA35 == 55 or LA35 == 56 or LA35 == 57 or LA35 == 58 or LA35 == 59 or LA35 == 60 or LA35 == 65:
+                        alt35 = 3
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("243:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 38, 2, self.input)
+                        nvae = NoViableAltException("246:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 2, self.input)
 
                         raise nvae
 
@@ -3299,71 +3113,71 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("243:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 38, 0, self.input)
+                    nvae = NoViableAltException("246:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 0, self.input)
 
                     raise nvae
 
-                if alt38 == 1:
-                    # C.g:244:6: '[' constant_expression ']'
-                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix837)
+                if alt35 == 1:
+                    # C.g:247:6: '[' constant_expression ']'
+                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix835)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_constant_expression_in_declarator_suffix839)
+                    self.following.append(self.FOLLOW_constant_expression_in_declarator_suffix837)
                     self.constant_expression()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix841)
+                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix839)
                     if self.failed:
                         return 
 
 
-                elif alt38 == 2:
-                    # C.g:245:9: '[' ']'
-                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix851)
+                elif alt35 == 2:
+                    # C.g:248:9: '[' ']'
+                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix849)
                     if self.failed:
                         return 
-                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix853)
+                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix851)
                     if self.failed:
                         return 
 
 
-                elif alt38 == 3:
-                    # C.g:246:9: '(' parameter_type_list ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix863)
+                elif alt35 == 3:
+                    # C.g:249:9: '(' parameter_type_list ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix861)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_parameter_type_list_in_declarator_suffix865)
+                    self.following.append(self.FOLLOW_parameter_type_list_in_declarator_suffix863)
                     self.parameter_type_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix867)
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix865)
                     if self.failed:
                         return 
 
 
-                elif alt38 == 4:
-                    # C.g:247:9: '(' identifier_list ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix877)
+                elif alt35 == 4:
+                    # C.g:250:9: '(' identifier_list ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix875)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_identifier_list_in_declarator_suffix879)
+                    self.following.append(self.FOLLOW_identifier_list_in_declarator_suffix877)
                     self.identifier_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix881)
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix879)
                     if self.failed:
                         return 
 
 
-                elif alt38 == 5:
-                    # C.g:248:9: '(' ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix891)
+                elif alt35 == 5:
+                    # C.g:251:9: '(' ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix889)
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix893)
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix891)
                     if self.failed:
                         return 
 
@@ -3384,7 +3198,7 @@ class CParser(Parser):
 
 
     # $ANTLR start pointer
-    # C.g:251:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );
+    # C.g:254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );
     def pointer(self, ):
 
         pointer_StartIndex = self.input.index()
@@ -3393,59 +3207,107 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 25):
                     return 
 
-                # C.g:252:2: ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' )
-                alt41 = 3
-                LA41_0 = self.input.LA(1)
+                # C.g:255:2: ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' )
+                alt38 = 3
+                LA38_0 = self.input.LA(1)
 
-                if (LA41_0 == 65) :
-                    LA41 = self.input.LA(2)
-                    if LA41 == EOF or LA41 == IDENTIFIER or LA41 == 25 or LA41 == 26 or LA41 == 27 or LA41 == 28 or LA41 == 29 or LA41 == 30 or LA41 == 31 or LA41 == 32 or LA41 == 33 or LA41 == 34 or LA41 == 35 or LA41 == 36 or LA41 == 37 or LA41 == 38 or LA41 == 39 or LA41 == 40 or LA41 == 41 or LA41 == 42 or LA41 == 43 or LA41 == 45 or LA41 == 46 or LA41 == 47 or LA41 == 48 or LA41 == 58 or LA41 == 59 or LA41 == 60 or LA41 == 61 or LA41 == 62 or LA41 == 63:
-                        alt41 = 3
-                    elif LA41 == 53:
-                        LA41_20 = self.input.LA(3)
+                if (LA38_0 == 65) :
+                    LA38 = self.input.LA(2)
+                    if LA38 == 58:
+                        LA38_2 = self.input.LA(3)
 
-                        if (self.synpred77()) :
-                            alt41 = 1
+                        if (self.synpred76()) :
+                            alt38 = 1
                         elif (True) :
-                            alt41 = 3
+                            alt38 = 3
                         else:
                             if self.backtracking > 0:
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("251:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 41, 20, self.input)
+                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 2, self.input)
 
                             raise nvae
 
-                    elif LA41 == 49 or LA41 == 50 or LA41 == 51 or LA41 == 52 or LA41 == 54 or LA41 == 55 or LA41 == 56 or LA41 == 57:
-                        LA41_28 = self.input.LA(3)
+                    elif LA38 == 65:
+                        LA38_3 = self.input.LA(3)
 
                         if (self.synpred77()) :
-                            alt41 = 1
+                            alt38 = 2
+                        elif (True) :
+                            alt38 = 3
+                        else:
+                            if self.backtracking > 0:
+                                self.failed = True
+                                return 
+
+                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 3, self.input)
+
+                            raise nvae
+
+                    elif LA38 == 59:
+                        LA38_4 = self.input.LA(3)
+
+                        if (self.synpred76()) :
+                            alt38 = 1
+                        elif (True) :
+                            alt38 = 3
+                        else:
+                            if self.backtracking > 0:
+                                self.failed = True
+                                return 
+
+                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 4, self.input)
+
+                            raise nvae
+
+                    elif LA38 == 60:
+                        LA38_5 = self.input.LA(3)
+
+                        if (self.synpred76()) :
+                            alt38 = 1
+                        elif (True) :
+                            alt38 = 3
+                        else:
+                            if self.backtracking > 0:
+                                self.failed = True
+                                return 
+
+                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 5, self.input)
+
+                            raise nvae
+
+                    elif LA38 == 53:
+                        LA38_6 = self.input.LA(3)
+
+                        if (self.synpred76()) :
+                            alt38 = 1
                         elif (True) :
-                            alt41 = 3
+                            alt38 = 3
                         else:
                             if self.backtracking > 0:
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("251:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 41, 28, self.input)
+                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 6, self.input)
 
                             raise nvae
 
-                    elif LA41 == 65:
-                        LA41_29 = self.input.LA(3)
+                    elif LA38 == EOF or LA38 == IDENTIFIER or LA38 == 25 or LA38 == 26 or LA38 == 27 or LA38 == 28 or LA38 == 29 or LA38 == 30 or LA38 == 31 or LA38 == 32 or LA38 == 33 or LA38 == 34 or LA38 == 35 or LA38 == 36 or LA38 == 37 or LA38 == 38 or LA38 == 39 or LA38 == 40 or LA38 == 41 or LA38 == 42 or LA38 == 43 or LA38 == 45 or LA38 == 46 or LA38 == 47 or LA38 == 48 or LA38 == 61 or LA38 == 62 or LA38 == 63:
+                        alt38 = 3
+                    elif LA38 == 49 or LA38 == 50 or LA38 == 51 or LA38 == 52 or LA38 == 54 or LA38 == 55 or LA38 == 56 or LA38 == 57:
+                        LA38_29 = self.input.LA(3)
 
-                        if (self.synpred78()) :
-                            alt41 = 2
+                        if (self.synpred76()) :
+                            alt38 = 1
                         elif (True) :
-                            alt41 = 3
+                            alt38 = 3
                         else:
                             if self.backtracking > 0:
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("251:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 41, 29, self.input)
+                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 29, self.input)
 
                             raise nvae
 
@@ -3454,7 +3316,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("251:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 41, 1, self.input)
+                        nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 1, self.input)
 
                         raise nvae
 
@@ -3463,40 +3325,59 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("251:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 41, 0, self.input)
+                    nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 0, self.input)
 
                     raise nvae
 
-                if alt41 == 1:
-                    # C.g:252:4: '*' ( type_qualifier )+ ( pointer )?
-                    self.match(self.input, 65, self.FOLLOW_65_in_pointer904)
+                if alt38 == 1:
+                    # C.g:255:4: '*' ( type_qualifier )+ ( pointer )?
+                    self.match(self.input, 65, self.FOLLOW_65_in_pointer902)
                     if self.failed:
                         return 
-                    # C.g:252:8: ( type_qualifier )+
-                    cnt39 = 0
-                    while True: #loop39
-                        alt39 = 2
-                        LA39_0 = self.input.LA(1)
+                    # C.g:255:8: ( type_qualifier )+
+                    cnt36 = 0
+                    while True: #loop36
+                        alt36 = 2
+                        LA36 = self.input.LA(1)
+                        if LA36 == 58:
+                            LA36_2 = self.input.LA(2)
+
+                            if (self.synpred74()) :
+                                alt36 = 1
+
+
+                        elif LA36 == 59:
+                            LA36_3 = self.input.LA(2)
+
+                            if (self.synpred74()) :
+                                alt36 = 1
+
+
+                        elif LA36 == 60:
+                            LA36_4 = self.input.LA(2)
+
+                            if (self.synpred74()) :
+                                alt36 = 1
 
-                        if (LA39_0 == 53) :
-                            LA39_20 = self.input.LA(2)
 
-                            if (self.synpred75()) :
-                                alt39 = 1
+                        elif LA36 == 53:
+                            LA36_20 = self.input.LA(2)
 
+                            if (self.synpred74()) :
+                                alt36 = 1
 
-                        elif ((49 <= LA39_0 <= 52) or (54 <= LA39_0 <= 57)) :
-                            LA39_28 = self.input.LA(2)
 
-                            if (self.synpred75()) :
-                                alt39 = 1
+                        elif LA36 == 49 or LA36 == 50 or LA36 == 51 or LA36 == 52 or LA36 == 54 or LA36 == 55 or LA36 == 56 or LA36 == 57:
+                            LA36_28 = self.input.LA(2)
 
+                            if (self.synpred74()) :
+                                alt36 = 1
 
 
 
-                        if alt39 == 1:
+                        if alt36 == 1:
                             # C.g:0:0: type_qualifier
-                            self.following.append(self.FOLLOW_type_qualifier_in_pointer906)
+                            self.following.append(self.FOLLOW_type_qualifier_in_pointer904)
                             self.type_qualifier()
                             self.following.pop()
                             if self.failed:
@@ -3504,31 +3385,31 @@ class CParser(Parser):
 
 
                         else:
-                            if cnt39 >= 1:
-                                break #loop39
+                            if cnt36 >= 1:
+                                break #loop36
 
                             if self.backtracking > 0:
                                 self.failed = True
                                 return 
 
-                            eee = EarlyExitException(39, self.input)
+                            eee = EarlyExitException(36, self.input)
                             raise eee
 
-                        cnt39 += 1
+                        cnt36 += 1
 
 
-                    # C.g:252:24: ( pointer )?
-                    alt40 = 2
-                    LA40_0 = self.input.LA(1)
+                    # C.g:255:24: ( pointer )?
+                    alt37 = 2
+                    LA37_0 = self.input.LA(1)
 
-                    if (LA40_0 == 65) :
-                        LA40_1 = self.input.LA(2)
+                    if (LA37_0 == 65) :
+                        LA37_1 = self.input.LA(2)
 
-                        if (self.synpred76()) :
-                            alt40 = 1
-                    if alt40 == 1:
+                        if (self.synpred75()) :
+                            alt37 = 1
+                    if alt37 == 1:
                         # C.g:0:0: pointer
-                        self.following.append(self.FOLLOW_pointer_in_pointer909)
+                        self.following.append(self.FOLLOW_pointer_in_pointer907)
                         self.pointer()
                         self.following.pop()
                         if self.failed:
@@ -3538,21 +3419,21 @@ class CParser(Parser):
 
 
 
-                elif alt41 == 2:
-                    # C.g:253:4: '*' pointer
-                    self.match(self.input, 65, self.FOLLOW_65_in_pointer915)
+                elif alt38 == 2:
+                    # C.g:256:4: '*' pointer
+                    self.match(self.input, 65, self.FOLLOW_65_in_pointer913)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_pointer_in_pointer917)
+                    self.following.append(self.FOLLOW_pointer_in_pointer915)
                     self.pointer()
                     self.following.pop()
                     if self.failed:
                         return 
 
 
-                elif alt41 == 3:
-                    # C.g:254:4: '*'
-                    self.match(self.input, 65, self.FOLLOW_65_in_pointer922)
+                elif alt38 == 3:
+                    # C.g:257:4: '*'
+                    self.match(self.input, 65, self.FOLLOW_65_in_pointer920)
                     if self.failed:
                         return 
 
@@ -3573,7 +3454,7 @@ class CParser(Parser):
 
 
     # $ANTLR start parameter_type_list
-    # C.g:257:1: parameter_type_list : parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ;
+    # C.g:260:1: parameter_type_list : parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ;
     def parameter_type_list(self, ):
 
         parameter_type_list_StartIndex = self.input.index()
@@ -3582,39 +3463,39 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 26):
                     return 
 
-                # C.g:258:2: ( parameter_list ( ',' ( 'OPTIONAL' )? '...' )? )
-                # C.g:258:4: parameter_list ( ',' ( 'OPTIONAL' )? '...' )?
-                self.following.append(self.FOLLOW_parameter_list_in_parameter_type_list933)
+                # C.g:261:2: ( parameter_list ( ',' ( 'OPTIONAL' )? '...' )? )
+                # C.g:261:4: parameter_list ( ',' ( 'OPTIONAL' )? '...' )?
+                self.following.append(self.FOLLOW_parameter_list_in_parameter_type_list931)
                 self.parameter_list()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:258:19: ( ',' ( 'OPTIONAL' )? '...' )?
-                alt43 = 2
-                LA43_0 = self.input.LA(1)
-
-                if (LA43_0 == 27) :
-                    alt43 = 1
-                if alt43 == 1:
-                    # C.g:258:20: ',' ( 'OPTIONAL' )? '...'
-                    self.match(self.input, 27, self.FOLLOW_27_in_parameter_type_list936)
+                # C.g:261:19: ( ',' ( 'OPTIONAL' )? '...' )?
+                alt40 = 2
+                LA40_0 = self.input.LA(1)
+
+                if (LA40_0 == 27) :
+                    alt40 = 1
+                if alt40 == 1:
+                    # C.g:261:20: ',' ( 'OPTIONAL' )? '...'
+                    self.match(self.input, 27, self.FOLLOW_27_in_parameter_type_list934)
                     if self.failed:
                         return 
-                    # C.g:258:24: ( 'OPTIONAL' )?
-                    alt42 = 2
-                    LA42_0 = self.input.LA(1)
-
-                    if (LA42_0 == 53) :
-                        alt42 = 1
-                    if alt42 == 1:
-                        # C.g:258:25: 'OPTIONAL'
-                        self.match(self.input, 53, self.FOLLOW_53_in_parameter_type_list939)
+                    # C.g:261:24: ( 'OPTIONAL' )?
+                    alt39 = 2
+                    LA39_0 = self.input.LA(1)
+
+                    if (LA39_0 == 53) :
+                        alt39 = 1
+                    if alt39 == 1:
+                        # C.g:261:25: 'OPTIONAL'
+                        self.match(self.input, 53, self.FOLLOW_53_in_parameter_type_list937)
                         if self.failed:
                             return 
 
 
 
-                    self.match(self.input, 66, self.FOLLOW_66_in_parameter_type_list943)
+                    self.match(self.input, 66, self.FOLLOW_66_in_parameter_type_list941)
                     if self.failed:
                         return 
 
@@ -3639,7 +3520,7 @@ class CParser(Parser):
 
 
     # $ANTLR start parameter_list
-    # C.g:261:1: parameter_list : parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ;
+    # C.g:264:1: parameter_list : parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ;
     def parameter_list(self, ):
 
         parameter_list_StartIndex = self.input.index()
@@ -3648,57 +3529,57 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 27):
                     return 
 
-                # C.g:262:2: ( parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* )
-                # C.g:262:4: parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )*
-                self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list956)
+                # C.g:265:2: ( parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* )
+                # C.g:265:4: parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )*
+                self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list954)
                 self.parameter_declaration()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:262:26: ( ',' ( 'OPTIONAL' )? parameter_declaration )*
-                while True: #loop45
-                    alt45 = 2
-                    LA45_0 = self.input.LA(1)
+                # C.g:265:26: ( ',' ( 'OPTIONAL' )? parameter_declaration )*
+                while True: #loop42
+                    alt42 = 2
+                    LA42_0 = self.input.LA(1)
 
-                    if (LA45_0 == 27) :
-                        LA45_1 = self.input.LA(2)
+                    if (LA42_0 == 27) :
+                        LA42_1 = self.input.LA(2)
 
-                        if (LA45_1 == 53) :
-                            LA45_3 = self.input.LA(3)
+                        if (LA42_1 == 53) :
+                            LA42_3 = self.input.LA(3)
 
-                            if (self.synpred82()) :
-                                alt45 = 1
+                            if (self.synpred81()) :
+                                alt42 = 1
 
 
-                        elif (LA45_1 == IDENTIFIER or (29 <= LA45_1 <= 42) or (45 <= LA45_1 <= 46) or (48 <= LA45_1 <= 52) or (54 <= LA45_1 <= 57) or LA45_1 == 65) :
-                            alt45 = 1
+                        elif (LA42_1 == IDENTIFIER or (29 <= LA42_1 <= 42) or (45 <= LA42_1 <= 46) or (48 <= LA42_1 <= 52) or (54 <= LA42_1 <= 60) or LA42_1 == 65) :
+                            alt42 = 1
 
 
 
 
-                    if alt45 == 1:
-                        # C.g:262:27: ',' ( 'OPTIONAL' )? parameter_declaration
-                        self.match(self.input, 27, self.FOLLOW_27_in_parameter_list959)
+                    if alt42 == 1:
+                        # C.g:265:27: ',' ( 'OPTIONAL' )? parameter_declaration
+                        self.match(self.input, 27, self.FOLLOW_27_in_parameter_list957)
                         if self.failed:
                             return 
-                        # C.g:262:31: ( 'OPTIONAL' )?
-                        alt44 = 2
-                        LA44_0 = self.input.LA(1)
-
-                        if (LA44_0 == 53) :
-                            LA44_1 = self.input.LA(2)
-
-                            if (self.synpred81()) :
-                                alt44 = 1
-                        if alt44 == 1:
-                            # C.g:262:32: 'OPTIONAL'
-                            self.match(self.input, 53, self.FOLLOW_53_in_parameter_list962)
+                        # C.g:265:31: ( 'OPTIONAL' )?
+                        alt41 = 2
+                        LA41_0 = self.input.LA(1)
+
+                        if (LA41_0 == 53) :
+                            LA41_1 = self.input.LA(2)
+
+                            if (self.synpred80()) :
+                                alt41 = 1
+                        if alt41 == 1:
+                            # C.g:265:32: 'OPTIONAL'
+                            self.match(self.input, 53, self.FOLLOW_53_in_parameter_list960)
                             if self.failed:
                                 return 
 
 
 
-                        self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list966)
+                        self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list964)
                         self.parameter_declaration()
                         self.following.pop()
                         if self.failed:
@@ -3706,7 +3587,7 @@ class CParser(Parser):
 
 
                     else:
-                        break #loop45
+                        break #loop42
 
 
 
@@ -3728,7 +3609,7 @@ class CParser(Parser):
 
 
     # $ANTLR start parameter_declaration
-    # C.g:265:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );
+    # C.g:268:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );
     def parameter_declaration(self, ):
 
         parameter_declaration_StartIndex = self.input.index()
@@ -3737,109 +3618,134 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 28):
                     return 
 
-                # C.g:266:2: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER )
-                alt49 = 2
-                LA49 = self.input.LA(1)
-                if LA49 == 29 or LA49 == 30 or LA49 == 31 or LA49 == 32 or LA49 == 33 or LA49 == 34 or LA49 == 35 or LA49 == 36 or LA49 == 37 or LA49 == 38 or LA49 == 39 or LA49 == 40 or LA49 == 41 or LA49 == 42 or LA49 == 45 or LA49 == 46 or LA49 == 48 or LA49 == 49 or LA49 == 50 or LA49 == 51 or LA49 == 52 or LA49 == 53 or LA49 == 54 or LA49 == 55 or LA49 == 56 or LA49 == 57:
-                    alt49 = 1
-                elif LA49 == IDENTIFIER:
-                    LA49_13 = self.input.LA(2)
+                # C.g:269:2: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER )
+                alt46 = 2
+                LA46 = self.input.LA(1)
+                if LA46 == 29 or LA46 == 30 or LA46 == 31 or LA46 == 32 or LA46 == 33 or LA46 == 34 or LA46 == 35 or LA46 == 36 or LA46 == 37 or LA46 == 38 or LA46 == 39 or LA46 == 40 or LA46 == 41 or LA46 == 42 or LA46 == 45 or LA46 == 46 or LA46 == 48 or LA46 == 49 or LA46 == 50 or LA46 == 51 or LA46 == 52 or LA46 == 53 or LA46 == 54 or LA46 == 55 or LA46 == 56 or LA46 == 57 or LA46 == 58 or LA46 == 59 or LA46 == 60:
+                    alt46 = 1
+                elif LA46 == IDENTIFIER:
+                    LA46_13 = self.input.LA(2)
 
-                    if (self.synpred86()) :
-                        alt49 = 1
+                    if (self.synpred85()) :
+                        alt46 = 1
                     elif (True) :
-                        alt49 = 2
+                        alt46 = 2
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("265:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 49, 13, self.input)
+                        nvae = NoViableAltException("268:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 13, self.input)
 
                         raise nvae
 
-                elif LA49 == 65:
-                    alt49 = 2
+                elif LA46 == 65:
+                    alt46 = 2
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("265:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 49, 0, self.input)
+                    nvae = NoViableAltException("268:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 0, self.input)
 
                     raise nvae
 
-                if alt49 == 1:
-                    # C.g:266:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )?
-                    self.following.append(self.FOLLOW_declaration_specifiers_in_parameter_declaration979)
+                if alt46 == 1:
+                    # C.g:269:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )?
+                    self.following.append(self.FOLLOW_declaration_specifiers_in_parameter_declaration977)
                     self.declaration_specifiers()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:266:27: ( declarator | abstract_declarator )*
-                    while True: #loop46
-                        alt46 = 3
-                        LA46 = self.input.LA(1)
-                        if LA46 == 65:
-                            LA46_5 = self.input.LA(2)
+                    # C.g:269:27: ( declarator | abstract_declarator )*
+                    while True: #loop43
+                        alt43 = 3
+                        LA43 = self.input.LA(1)
+                        if LA43 == 65:
+                            LA43_5 = self.input.LA(2)
 
-                            if (self.synpred83()) :
-                                alt46 = 1
-                            elif (self.synpred84()) :
-                                alt46 = 2
+                            if (self.synpred82()) :
+                                alt43 = 1
+                            elif (self.synpred83()) :
+                                alt43 = 2
 
 
-                        elif LA46 == IDENTIFIER or LA46 == 58 or LA46 == 59 or LA46 == 60:
-                            alt46 = 1
-                        elif LA46 == 61:
-                            LA46 = self.input.LA(2)
-                            if LA46 == 29 or LA46 == 30 or LA46 == 31 or LA46 == 32 or LA46 == 33 or LA46 == 34 or LA46 == 35 or LA46 == 36 or LA46 == 37 or LA46 == 38 or LA46 == 39 or LA46 == 40 or LA46 == 41 or LA46 == 42 or LA46 == 45 or LA46 == 46 or LA46 == 48 or LA46 == 49 or LA46 == 50 or LA46 == 51 or LA46 == 52 or LA46 == 53 or LA46 == 54 or LA46 == 55 or LA46 == 56 or LA46 == 57 or LA46 == 62 or LA46 == 63:
-                                alt46 = 2
-                            elif LA46 == IDENTIFIER:
-                                LA46_37 = self.input.LA(3)
+                        elif LA43 == IDENTIFIER or LA43 == 58 or LA43 == 59 or LA43 == 60:
+                            alt43 = 1
+                        elif LA43 == 61:
+                            LA43 = self.input.LA(2)
+                            if LA43 == 29 or LA43 == 30 or LA43 == 31 or LA43 == 32 or LA43 == 33 or LA43 == 34 or LA43 == 35 or LA43 == 36 or LA43 == 37 or LA43 == 38 or LA43 == 39 or LA43 == 40 or LA43 == 41 or LA43 == 42 or LA43 == 45 or LA43 == 46 or LA43 == 48 or LA43 == 49 or LA43 == 50 or LA43 == 51 or LA43 == 52 or LA43 == 53 or LA43 == 54 or LA43 == 55 or LA43 == 56 or LA43 == 57 or LA43 == 62 or LA43 == 63:
+                                alt43 = 2
+                            elif LA43 == IDENTIFIER:
+                                LA43_37 = self.input.LA(3)
 
-                                if (self.synpred83()) :
-                                    alt46 = 1
-                                elif (self.synpred84()) :
-                                    alt46 = 2
+                                if (self.synpred82()) :
+                                    alt43 = 1
+                                elif (self.synpred83()) :
+                                    alt43 = 2
 
 
-                            elif LA46 == 65:
-                                LA46_39 = self.input.LA(3)
+                            elif LA43 == 58:
+                                LA43_38 = self.input.LA(3)
 
-                                if (self.synpred83()) :
-                                    alt46 = 1
-                                elif (self.synpred84()) :
-                                    alt46 = 2
+                                if (self.synpred82()) :
+                                    alt43 = 1
+                                elif (self.synpred83()) :
+                                    alt43 = 2
 
 
-                            elif LA46 == 58 or LA46 == 59 or LA46 == 60:
-                                alt46 = 1
-                            elif LA46 == 61:
-                                LA46_43 = self.input.LA(3)
+                            elif LA43 == 65:
+                                LA43_39 = self.input.LA(3)
 
-                                if (self.synpred83()) :
-                                    alt46 = 1
-                                elif (self.synpred84()) :
-                                    alt46 = 2
+                                if (self.synpred82()) :
+                                    alt43 = 1
+                                elif (self.synpred83()) :
+                                    alt43 = 2
 
 
+                            elif LA43 == 61:
+                                LA43_40 = self.input.LA(3)
 
-                        elif LA46 == 63:
-                            alt46 = 2
+                                if (self.synpred82()) :
+                                    alt43 = 1
+                                elif (self.synpred83()) :
+                                    alt43 = 2
 
-                        if alt46 == 1:
-                            # C.g:266:28: declarator
-                            self.following.append(self.FOLLOW_declarator_in_parameter_declaration982)
+
+                            elif LA43 == 59:
+                                LA43_42 = self.input.LA(3)
+
+                                if (self.synpred82()) :
+                                    alt43 = 1
+                                elif (self.synpred83()) :
+                                    alt43 = 2
+
+
+                            elif LA43 == 60:
+                                LA43_43 = self.input.LA(3)
+
+                                if (self.synpred82()) :
+                                    alt43 = 1
+                                elif (self.synpred83()) :
+                                    alt43 = 2
+
+
+
+                        elif LA43 == 63:
+                            alt43 = 2
+
+                        if alt43 == 1:
+                            # C.g:269:28: declarator
+                            self.following.append(self.FOLLOW_declarator_in_parameter_declaration980)
                             self.declarator()
                             self.following.pop()
                             if self.failed:
                                 return 
 
 
-                        elif alt46 == 2:
-                            # C.g:266:39: abstract_declarator
-                            self.following.append(self.FOLLOW_abstract_declarator_in_parameter_declaration984)
+                        elif alt43 == 2:
+                            # C.g:269:39: abstract_declarator
+                            self.following.append(self.FOLLOW_abstract_declarator_in_parameter_declaration982)
                             self.abstract_declarator()
                             self.following.pop()
                             if self.failed:
@@ -3847,18 +3753,18 @@ class CParser(Parser):
 
 
                         else:
-                            break #loop46
+                            break #loop43
 
 
-                    # C.g:266:61: ( 'OPTIONAL' )?
-                    alt47 = 2
-                    LA47_0 = self.input.LA(1)
+                    # C.g:269:61: ( 'OPTIONAL' )?
+                    alt44 = 2
+                    LA44_0 = self.input.LA(1)
 
-                    if (LA47_0 == 53) :
-                        alt47 = 1
-                    if alt47 == 1:
-                        # C.g:266:62: 'OPTIONAL'
-                        self.match(self.input, 53, self.FOLLOW_53_in_parameter_declaration989)
+                    if (LA44_0 == 53) :
+                        alt44 = 1
+                    if alt44 == 1:
+                        # C.g:269:62: 'OPTIONAL'
+                        self.match(self.input, 53, self.FOLLOW_53_in_parameter_declaration987)
                         if self.failed:
                             return 
 
@@ -3866,20 +3772,20 @@ class CParser(Parser):
 
 
 
-                elif alt49 == 2:
-                    # C.g:268:4: ( pointer )* IDENTIFIER
-                    # C.g:268:4: ( pointer )*
-                    while True: #loop48
-                        alt48 = 2
-                        LA48_0 = self.input.LA(1)
+                elif alt46 == 2:
+                    # C.g:271:4: ( pointer )* IDENTIFIER
+                    # C.g:271:4: ( pointer )*
+                    while True: #loop45
+                        alt45 = 2
+                        LA45_0 = self.input.LA(1)
 
-                        if (LA48_0 == 65) :
-                            alt48 = 1
+                        if (LA45_0 == 65) :
+                            alt45 = 1
 
 
-                        if alt48 == 1:
+                        if alt45 == 1:
                             # C.g:0:0: pointer
-                            self.following.append(self.FOLLOW_pointer_in_parameter_declaration998)
+                            self.following.append(self.FOLLOW_pointer_in_parameter_declaration996)
                             self.pointer()
                             self.following.pop()
                             if self.failed:
@@ -3887,10 +3793,10 @@ class CParser(Parser):
 
 
                         else:
-                            break #loop48
+                            break #loop45
 
 
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_parameter_declaration1001)
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_parameter_declaration999)
                     if self.failed:
                         return 
 
@@ -3911,7 +3817,7 @@ class CParser(Parser):
 
 
     # $ANTLR start identifier_list
-    # C.g:271:1: identifier_list : IDENTIFIER ( ',' IDENTIFIER )* ;
+    # C.g:274:1: identifier_list : IDENTIFIER ( ',' IDENTIFIER )* ;
     def identifier_list(self, ):
 
         identifier_list_StartIndex = self.input.index()
@@ -3920,32 +3826,32 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 29):
                     return 
 
-                # C.g:272:2: ( IDENTIFIER ( ',' IDENTIFIER )* )
-                # C.g:272:4: IDENTIFIER ( ',' IDENTIFIER )*
-                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1012)
+                # C.g:275:2: ( IDENTIFIER ( ',' IDENTIFIER )* )
+                # C.g:275:4: IDENTIFIER ( ',' IDENTIFIER )*
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1010)
                 if self.failed:
                     return 
-                # C.g:273:2: ( ',' IDENTIFIER )*
-                while True: #loop50
-                    alt50 = 2
-                    LA50_0 = self.input.LA(1)
+                # C.g:276:2: ( ',' IDENTIFIER )*
+                while True: #loop47
+                    alt47 = 2
+                    LA47_0 = self.input.LA(1)
 
-                    if (LA50_0 == 27) :
-                        alt50 = 1
+                    if (LA47_0 == 27) :
+                        alt47 = 1
 
 
-                    if alt50 == 1:
-                        # C.g:273:3: ',' IDENTIFIER
-                        self.match(self.input, 27, self.FOLLOW_27_in_identifier_list1016)
+                    if alt47 == 1:
+                        # C.g:276:3: ',' IDENTIFIER
+                        self.match(self.input, 27, self.FOLLOW_27_in_identifier_list1014)
                         if self.failed:
                             return 
-                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1018)
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1016)
                         if self.failed:
                             return 
 
 
                     else:
-                        break #loop50
+                        break #loop47
 
 
 
@@ -3967,7 +3873,7 @@ class CParser(Parser):
 
 
     # $ANTLR start type_name
-    # C.g:276:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );
+    # C.g:279:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );
     def type_name(self, ):
 
         type_name_StartIndex = self.input.index()
@@ -3976,25 +3882,25 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 30):
                     return 
 
-                # C.g:277:2: ( specifier_qualifier_list ( abstract_declarator )? | type_id )
-                alt52 = 2
-                LA52_0 = self.input.LA(1)
+                # C.g:280:2: ( specifier_qualifier_list ( abstract_declarator )? | type_id )
+                alt49 = 2
+                LA49_0 = self.input.LA(1)
 
-                if ((34 <= LA52_0 <= 42) or (45 <= LA52_0 <= 46) or (48 <= LA52_0 <= 57)) :
-                    alt52 = 1
-                elif (LA52_0 == IDENTIFIER) :
-                    LA52_13 = self.input.LA(2)
+                if ((34 <= LA49_0 <= 42) or (45 <= LA49_0 <= 46) or (48 <= LA49_0 <= 60)) :
+                    alt49 = 1
+                elif (LA49_0 == IDENTIFIER) :
+                    LA49_13 = self.input.LA(2)
 
-                    if (self.synpred90()) :
-                        alt52 = 1
+                    if (self.synpred89()) :
+                        alt49 = 1
                     elif (True) :
-                        alt52 = 2
+                        alt49 = 2
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("276:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 52, 13, self.input)
+                        nvae = NoViableAltException("279:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 13, self.input)
 
                         raise nvae
 
@@ -4003,26 +3909,26 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("276:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 52, 0, self.input)
+                    nvae = NoViableAltException("279:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 0, self.input)
 
                     raise nvae
 
-                if alt52 == 1:
-                    # C.g:277:4: specifier_qualifier_list ( abstract_declarator )?
-                    self.following.append(self.FOLLOW_specifier_qualifier_list_in_type_name1031)
+                if alt49 == 1:
+                    # C.g:280:4: specifier_qualifier_list ( abstract_declarator )?
+                    self.following.append(self.FOLLOW_specifier_qualifier_list_in_type_name1029)
                     self.specifier_qualifier_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:277:29: ( abstract_declarator )?
-                    alt51 = 2
-                    LA51_0 = self.input.LA(1)
+                    # C.g:280:29: ( abstract_declarator )?
+                    alt48 = 2
+                    LA48_0 = self.input.LA(1)
 
-                    if (LA51_0 == 61 or LA51_0 == 63 or LA51_0 == 65) :
-                        alt51 = 1
-                    if alt51 == 1:
+                    if (LA48_0 == 61 or LA48_0 == 63 or LA48_0 == 65) :
+                        alt48 = 1
+                    if alt48 == 1:
                         # C.g:0:0: abstract_declarator
-                        self.following.append(self.FOLLOW_abstract_declarator_in_type_name1033)
+                        self.following.append(self.FOLLOW_abstract_declarator_in_type_name1031)
                         self.abstract_declarator()
                         self.following.pop()
                         if self.failed:
@@ -4032,9 +3938,9 @@ class CParser(Parser):
 
 
 
-                elif alt52 == 2:
-                    # C.g:278:4: type_id
-                    self.following.append(self.FOLLOW_type_id_in_type_name1039)
+                elif alt49 == 2:
+                    # C.g:281:4: type_id
+                    self.following.append(self.FOLLOW_type_id_in_type_name1037)
                     self.type_id()
                     self.following.pop()
                     if self.failed:
@@ -4057,7 +3963,7 @@ class CParser(Parser):
 
 
     # $ANTLR start abstract_declarator
-    # C.g:281:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );
+    # C.g:284:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );
     def abstract_declarator(self, ):
 
         abstract_declarator_StartIndex = self.input.index()
@@ -4066,196 +3972,211 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 31):
                     return 
 
-                # C.g:282:2: ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator )
-                alt54 = 2
-                LA54_0 = self.input.LA(1)
-
-                if (LA54_0 == 65) :
-                    alt54 = 1
-                elif (LA54_0 == 61 or LA54_0 == 63) :
-                    alt54 = 2
-                else:
-                    if self.backtracking > 0:
-                        self.failed = True
-                        return 
-
-                    nvae = NoViableAltException("281:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );", 54, 0, self.input)
-
-                    raise nvae
-
-                if alt54 == 1:
-                    # C.g:282:4: pointer ( direct_abstract_declarator )?
-                    self.following.append(self.FOLLOW_pointer_in_abstract_declarator1050)
-                    self.pointer()
-                    self.following.pop()
-                    if self.failed:
-                        return 
-                    # C.g:282:12: ( direct_abstract_declarator )?
-                    alt53 = 2
-                    LA53_0 = self.input.LA(1)
-
-                    if (LA53_0 == 61) :
-                        LA53 = self.input.LA(2)
-                        if LA53 == 62:
-                            LA53_12 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 29 or LA53 == 30 or LA53 == 31 or LA53 == 32 or LA53 == 33:
-                            LA53_13 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 34:
-                            LA53_14 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 35:
-                            LA53_15 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 36:
-                            LA53_16 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 37:
-                            LA53_17 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 38:
-                            LA53_18 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 39:
-                            LA53_19 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 40:
-                            LA53_20 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 41:
-                            LA53_21 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 42:
-                            LA53_22 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 45 or LA53 == 46:
-                            LA53_23 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 48:
-                            LA53_24 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == IDENTIFIER:
-                            LA53_25 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 49 or LA53 == 50 or LA53 == 51 or LA53 == 52 or LA53 == 53 or LA53 == 54 or LA53 == 55 or LA53 == 56 or LA53 == 57:
-                            LA53_26 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 65:
-                            LA53_27 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 61:
-                            LA53_28 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 63:
-                            LA53_29 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                    elif (LA53_0 == 63) :
-                        LA53 = self.input.LA(2)
-                        if LA53 == 64:
-                            LA53_33 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 61:
-                            LA53_34 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == IDENTIFIER:
-                            LA53_35 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == HEX_LITERAL:
-                            LA53_36 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == OCTAL_LITERAL:
-                            LA53_37 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == DECIMAL_LITERAL:
-                            LA53_38 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == CHARACTER_LITERAL:
-                            LA53_39 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == STRING_LITERAL:
-                            LA53_40 = self.input.LA(3)
-
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == FLOATING_POINT_LITERAL:
-                            LA53_41 = self.input.LA(3)
+                # C.g:285:2: ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator )
+                alt51 = 2
+                LA51_0 = self.input.LA(1)
 
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 71:
-                            LA53_42 = self.input.LA(3)
+                if (LA51_0 == 65) :
+                    alt51 = 1
+                elif (LA51_0 == 61 or LA51_0 == 63) :
+                    alt51 = 2
+                else:
+                    if self.backtracking > 0:
+                        self.failed = True
+                        return 
 
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 72:
-                            LA53_43 = self.input.LA(3)
+                    nvae = NoViableAltException("284:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );", 51, 0, self.input)
 
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 65 or LA53 == 67 or LA53 == 68 or LA53 == 76 or LA53 == 77 or LA53 == 78:
-                            LA53_44 = self.input.LA(3)
+                    raise nvae
 
-                            if (self.synpred91()) :
-                                alt53 = 1
-                        elif LA53 == 73:
-                            LA53_45 = self.input.LA(3)
+                if alt51 == 1:
+                    # C.g:285:4: pointer ( direct_abstract_declarator )?
+                    self.following.append(self.FOLLOW_pointer_in_abstract_declarator1048)
+                    self.pointer()
+                    self.following.pop()
+                    if self.failed:
+                        return 
+                    # C.g:285:12: ( direct_abstract_declarator )?
+                    alt50 = 2
+                    LA50_0 = self.input.LA(1)
 
-                            if (self.synpred91()) :
-                                alt53 = 1
-                    if alt53 == 1:
+                    if (LA50_0 == 61) :
+                        LA50 = self.input.LA(2)
+                        if LA50 == 62:
+                            LA50_12 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 29 or LA50 == 30 or LA50 == 31 or LA50 == 32 or LA50 == 33:
+                            LA50_13 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 34:
+                            LA50_14 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 35:
+                            LA50_15 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 36:
+                            LA50_16 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 37:
+                            LA50_17 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 38:
+                            LA50_18 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 39:
+                            LA50_19 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 40:
+                            LA50_20 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 41:
+                            LA50_21 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 42:
+                            LA50_22 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 45 or LA50 == 46:
+                            LA50_23 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 48:
+                            LA50_24 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == IDENTIFIER:
+                            LA50_25 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 58:
+                            LA50_26 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 65:
+                            LA50_27 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 61:
+                            LA50_28 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 63:
+                            LA50_29 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 59:
+                            LA50_30 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 60:
+                            LA50_31 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 49 or LA50 == 50 or LA50 == 51 or LA50 == 52 or LA50 == 53 or LA50 == 54 or LA50 == 55 or LA50 == 56 or LA50 == 57:
+                            LA50_32 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                    elif (LA50_0 == 63) :
+                        LA50 = self.input.LA(2)
+                        if LA50 == 64:
+                            LA50_33 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 61:
+                            LA50_34 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == IDENTIFIER:
+                            LA50_35 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == HEX_LITERAL:
+                            LA50_36 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == OCTAL_LITERAL:
+                            LA50_37 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == DECIMAL_LITERAL:
+                            LA50_38 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == CHARACTER_LITERAL:
+                            LA50_39 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == STRING_LITERAL:
+                            LA50_40 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == FLOATING_POINT_LITERAL:
+                            LA50_41 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 71:
+                            LA50_42 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 72:
+                            LA50_43 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 65 or LA50 == 67 or LA50 == 68 or LA50 == 76 or LA50 == 77 or LA50 == 78:
+                            LA50_44 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                        elif LA50 == 73:
+                            LA50_45 = self.input.LA(3)
+
+                            if (self.synpred90()) :
+                                alt50 = 1
+                    if alt50 == 1:
                         # C.g:0:0: direct_abstract_declarator
-                        self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1052)
+                        self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1050)
                         self.direct_abstract_declarator()
                         self.following.pop()
                         if self.failed:
@@ -4265,9 +4186,9 @@ class CParser(Parser):
 
 
 
-                elif alt54 == 2:
-                    # C.g:283:4: direct_abstract_declarator
-                    self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1058)
+                elif alt51 == 2:
+                    # C.g:286:4: direct_abstract_declarator
+                    self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1056)
                     self.direct_abstract_declarator()
                     self.following.pop()
                     if self.failed:
@@ -4290,7 +4211,7 @@ class CParser(Parser):
 
 
     # $ANTLR start direct_abstract_declarator
-    # C.g:286:1: direct_abstract_declarator : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ;
+    # C.g:289:1: direct_abstract_declarator : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ;
     def direct_abstract_declarator(self, ):
 
         direct_abstract_declarator_StartIndex = self.input.index()
@@ -4299,72 +4220,72 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 32):
                     return 
 
-                # C.g:287:2: ( ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* )
-                # C.g:287:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )*
-                # C.g:287:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )
-                alt55 = 2
-                LA55_0 = self.input.LA(1)
-
-                if (LA55_0 == 61) :
-                    LA55 = self.input.LA(2)
-                    if LA55 == IDENTIFIER or LA55 == 29 or LA55 == 30 or LA55 == 31 or LA55 == 32 or LA55 == 33 or LA55 == 34 or LA55 == 35 or LA55 == 36 or LA55 == 37 or LA55 == 38 or LA55 == 39 or LA55 == 40 or LA55 == 41 or LA55 == 42 or LA55 == 45 or LA55 == 46 or LA55 == 48 or LA55 == 49 or LA55 == 50 or LA55 == 51 or LA55 == 52 or LA55 == 53 or LA55 == 54 or LA55 == 55 or LA55 == 56 or LA55 == 57 or LA55 == 62:
-                        alt55 = 2
-                    elif LA55 == 65:
-                        LA55_18 = self.input.LA(3)
-
-                        if (self.synpred93()) :
-                            alt55 = 1
+                # C.g:290:2: ( ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* )
+                # C.g:290:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )*
+                # C.g:290:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )
+                alt52 = 2
+                LA52_0 = self.input.LA(1)
+
+                if (LA52_0 == 61) :
+                    LA52 = self.input.LA(2)
+                    if LA52 == IDENTIFIER or LA52 == 29 or LA52 == 30 or LA52 == 31 or LA52 == 32 or LA52 == 33 or LA52 == 34 or LA52 == 35 or LA52 == 36 or LA52 == 37 or LA52 == 38 or LA52 == 39 or LA52 == 40 or LA52 == 41 or LA52 == 42 or LA52 == 45 or LA52 == 46 or LA52 == 48 or LA52 == 49 or LA52 == 50 or LA52 == 51 or LA52 == 52 or LA52 == 53 or LA52 == 54 or LA52 == 55 or LA52 == 56 or LA52 == 57 or LA52 == 58 or LA52 == 59 or LA52 == 60 or LA52 == 62:
+                        alt52 = 2
+                    elif LA52 == 65:
+                        LA52_4 = self.input.LA(3)
+
+                        if (self.synpred92()) :
+                            alt52 = 1
                         elif (True) :
-                            alt55 = 2
+                            alt52 = 2
                         else:
                             if self.backtracking > 0:
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("287:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 55, 18, self.input)
+                            nvae = NoViableAltException("290:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 4, self.input)
 
                             raise nvae
 
-                    elif LA55 == 61 or LA55 == 63:
-                        alt55 = 1
+                    elif LA52 == 61 or LA52 == 63:
+                        alt52 = 1
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("287:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 55, 1, self.input)
+                        nvae = NoViableAltException("290:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 1, self.input)
 
                         raise nvae
 
-                elif (LA55_0 == 63) :
-                    alt55 = 2
+                elif (LA52_0 == 63) :
+                    alt52 = 2
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("287:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 55, 0, self.input)
+                    nvae = NoViableAltException("290:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 0, self.input)
 
                     raise nvae
 
-                if alt55 == 1:
-                    # C.g:287:6: '(' abstract_declarator ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_direct_abstract_declarator1071)
+                if alt52 == 1:
+                    # C.g:290:6: '(' abstract_declarator ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_direct_abstract_declarator1069)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_abstract_declarator_in_direct_abstract_declarator1073)
+                    self.following.append(self.FOLLOW_abstract_declarator_in_direct_abstract_declarator1071)
                     self.abstract_declarator()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_direct_abstract_declarator1075)
+                    self.match(self.input, 62, self.FOLLOW_62_in_direct_abstract_declarator1073)
                     if self.failed:
                         return 
 
 
-                elif alt55 == 2:
-                    # C.g:287:36: abstract_declarator_suffix
-                    self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1079)
+                elif alt52 == 2:
+                    # C.g:290:36: abstract_declarator_suffix
+                    self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1077)
                     self.abstract_declarator_suffix()
                     self.following.pop()
                     if self.failed:
@@ -4372,225 +4293,246 @@ class CParser(Parser):
 
 
 
-                # C.g:287:65: ( abstract_declarator_suffix )*
-                while True: #loop56
-                    alt56 = 2
-                    LA56_0 = self.input.LA(1)
+                # C.g:290:65: ( abstract_declarator_suffix )*
+                while True: #loop53
+                    alt53 = 2
+                    LA53_0 = self.input.LA(1)
+
+                    if (LA53_0 == 61) :
+                        LA53 = self.input.LA(2)
+                        if LA53 == 62:
+                            LA53_12 = self.input.LA(3)
+
+                            if (self.synpred93()) :
+                                alt53 = 1
+
+
+                        elif LA53 == 29 or LA53 == 30 or LA53 == 31 or LA53 == 32 or LA53 == 33:
+                            LA53_13 = self.input.LA(3)
+
+                            if (self.synpred93()) :
+                                alt53 = 1
+
+
+                        elif LA53 == 34:
+                            LA53_14 = self.input.LA(3)
+
+                            if (self.synpred93()) :
+                                alt53 = 1
+
 
-                    if (LA56_0 == 61) :
-                        LA56 = self.input.LA(2)
-                        if LA56 == 62:
-                            LA56_12 = self.input.LA(3)
+                        elif LA53 == 35:
+                            LA53_15 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 65:
-                            LA56_13 = self.input.LA(3)
+                        elif LA53 == 36:
+                            LA53_16 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == IDENTIFIER:
-                            LA56_17 = self.input.LA(3)
+                        elif LA53 == 37:
+                            LA53_17 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 29 or LA56 == 30 or LA56 == 31 or LA56 == 32 or LA56 == 33:
-                            LA56_19 = self.input.LA(3)
+                        elif LA53 == 38:
+                            LA53_18 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 34:
-                            LA56_20 = self.input.LA(3)
+                        elif LA53 == 39:
+                            LA53_19 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 35:
-                            LA56_21 = self.input.LA(3)
+                        elif LA53 == 40:
+                            LA53_20 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 36:
-                            LA56_22 = self.input.LA(3)
+                        elif LA53 == 41:
+                            LA53_21 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 37:
-                            LA56_23 = self.input.LA(3)
+                        elif LA53 == 42:
+                            LA53_22 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 38:
-                            LA56_24 = self.input.LA(3)
+                        elif LA53 == 45 or LA53 == 46:
+                            LA53_23 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 39:
-                            LA56_25 = self.input.LA(3)
+                        elif LA53 == 48:
+                            LA53_24 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 40:
-                            LA56_26 = self.input.LA(3)
+                        elif LA53 == IDENTIFIER:
+                            LA53_25 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 41:
-                            LA56_27 = self.input.LA(3)
+                        elif LA53 == 58:
+                            LA53_26 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 42:
-                            LA56_28 = self.input.LA(3)
+                        elif LA53 == 65:
+                            LA53_27 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 45 or LA56 == 46:
-                            LA56_29 = self.input.LA(3)
+                        elif LA53 == 59:
+                            LA53_30 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 48:
-                            LA56_30 = self.input.LA(3)
+                        elif LA53 == 60:
+                            LA53_31 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 49 or LA56 == 50 or LA56 == 51 or LA56 == 52 or LA56 == 53 or LA56 == 54 or LA56 == 55 or LA56 == 56 or LA56 == 57:
-                            LA56_31 = self.input.LA(3)
+                        elif LA53 == 49 or LA53 == 50 or LA53 == 51 or LA53 == 52 or LA53 == 53 or LA53 == 54 or LA53 == 55 or LA53 == 56 or LA53 == 57:
+                            LA53_32 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
 
-                    elif (LA56_0 == 63) :
-                        LA56 = self.input.LA(2)
-                        if LA56 == 64:
-                            LA56_33 = self.input.LA(3)
+                    elif (LA53_0 == 63) :
+                        LA53 = self.input.LA(2)
+                        if LA53 == 64:
+                            LA53_33 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 61:
-                            LA56_34 = self.input.LA(3)
+                        elif LA53 == 61:
+                            LA53_34 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == IDENTIFIER:
-                            LA56_35 = self.input.LA(3)
+                        elif LA53 == IDENTIFIER:
+                            LA53_35 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == HEX_LITERAL:
-                            LA56_36 = self.input.LA(3)
+                        elif LA53 == HEX_LITERAL:
+                            LA53_36 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == OCTAL_LITERAL:
-                            LA56_37 = self.input.LA(3)
+                        elif LA53 == OCTAL_LITERAL:
+                            LA53_37 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == DECIMAL_LITERAL:
-                            LA56_38 = self.input.LA(3)
+                        elif LA53 == DECIMAL_LITERAL:
+                            LA53_38 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == CHARACTER_LITERAL:
-                            LA56_39 = self.input.LA(3)
+                        elif LA53 == CHARACTER_LITERAL:
+                            LA53_39 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == STRING_LITERAL:
-                            LA56_40 = self.input.LA(3)
+                        elif LA53 == STRING_LITERAL:
+                            LA53_40 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == FLOATING_POINT_LITERAL:
-                            LA56_41 = self.input.LA(3)
+                        elif LA53 == FLOATING_POINT_LITERAL:
+                            LA53_41 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 71:
-                            LA56_42 = self.input.LA(3)
+                        elif LA53 == 71:
+                            LA53_42 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 72:
-                            LA56_43 = self.input.LA(3)
+                        elif LA53 == 72:
+                            LA53_43 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 65 or LA56 == 67 or LA56 == 68 or LA56 == 76 or LA56 == 77 or LA56 == 78:
-                            LA56_44 = self.input.LA(3)
+                        elif LA53 == 65 or LA53 == 67 or LA53 == 68 or LA53 == 76 or LA53 == 77 or LA53 == 78:
+                            LA53_44 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
-                        elif LA56 == 73:
-                            LA56_45 = self.input.LA(3)
+                        elif LA53 == 73:
+                            LA53_45 = self.input.LA(3)
 
-                            if (self.synpred94()) :
-                                alt56 = 1
+                            if (self.synpred93()) :
+                                alt53 = 1
 
 
 
 
 
-                    if alt56 == 1:
+                    if alt53 == 1:
                         # C.g:0:0: abstract_declarator_suffix
-                        self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1083)
+                        self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1081)
                         self.abstract_declarator_suffix()
                         self.following.pop()
                         if self.failed:
@@ -4598,7 +4540,7 @@ class CParser(Parser):
 
 
                     else:
-                        break #loop56
+                        break #loop53
 
 
 
@@ -4620,7 +4562,7 @@ class CParser(Parser):
 
 
     # $ANTLR start abstract_declarator_suffix
-    # C.g:290:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );
+    # C.g:293:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );
     def abstract_declarator_suffix(self, ):
 
         abstract_declarator_suffix_StartIndex = self.input.index()
@@ -4629,39 +4571,39 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 33):
                     return 
 
-                # C.g:291:2: ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' )
-                alt57 = 4
-                LA57_0 = self.input.LA(1)
+                # C.g:294:2: ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' )
+                alt54 = 4
+                LA54_0 = self.input.LA(1)
 
-                if (LA57_0 == 63) :
-                    LA57_1 = self.input.LA(2)
+                if (LA54_0 == 63) :
+                    LA54_1 = self.input.LA(2)
 
-                    if (LA57_1 == 64) :
-                        alt57 = 1
-                    elif ((IDENTIFIER <= LA57_1 <= FLOATING_POINT_LITERAL) or LA57_1 == 61 or LA57_1 == 65 or (67 <= LA57_1 <= 68) or (71 <= LA57_1 <= 73) or (76 <= LA57_1 <= 78)) :
-                        alt57 = 2
+                    if (LA54_1 == 64) :
+                        alt54 = 1
+                    elif ((IDENTIFIER <= LA54_1 <= FLOATING_POINT_LITERAL) or LA54_1 == 61 or LA54_1 == 65 or (67 <= LA54_1 <= 68) or (71 <= LA54_1 <= 73) or (76 <= LA54_1 <= 78)) :
+                        alt54 = 2
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("290:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 57, 1, self.input)
+                        nvae = NoViableAltException("293:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 1, self.input)
 
                         raise nvae
 
-                elif (LA57_0 == 61) :
-                    LA57_2 = self.input.LA(2)
+                elif (LA54_0 == 61) :
+                    LA54_2 = self.input.LA(2)
 
-                    if (LA57_2 == 62) :
-                        alt57 = 3
-                    elif (LA57_2 == IDENTIFIER or (29 <= LA57_2 <= 42) or (45 <= LA57_2 <= 46) or (48 <= LA57_2 <= 57) or LA57_2 == 65) :
-                        alt57 = 4
+                    if (LA54_2 == 62) :
+                        alt54 = 3
+                    elif (LA54_2 == IDENTIFIER or (29 <= LA54_2 <= 42) or (45 <= LA54_2 <= 46) or (48 <= LA54_2 <= 60) or LA54_2 == 65) :
+                        alt54 = 4
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("290:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 57, 2, self.input)
+                        nvae = NoViableAltException("293:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 2, self.input)
 
                         raise nvae
 
@@ -4670,56 +4612,56 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("290:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 57, 0, self.input)
+                    nvae = NoViableAltException("293:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 0, self.input)
 
                     raise nvae
 
-                if alt57 == 1:
-                    # C.g:291:4: '[' ']'
-                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1095)
+                if alt54 == 1:
+                    # C.g:294:4: '[' ']'
+                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1093)
                     if self.failed:
                         return 
-                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1097)
+                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1095)
                     if self.failed:
                         return 
 
 
-                elif alt57 == 2:
-                    # C.g:292:4: '[' constant_expression ']'
-                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1102)
+                elif alt54 == 2:
+                    # C.g:295:4: '[' constant_expression ']'
+                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1100)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_constant_expression_in_abstract_declarator_suffix1104)
+                    self.following.append(self.FOLLOW_constant_expression_in_abstract_declarator_suffix1102)
                     self.constant_expression()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1106)
+                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1104)
                     if self.failed:
                         return 
 
 
-                elif alt57 == 3:
-                    # C.g:293:4: '(' ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_abstract_declarator_suffix1111)
+                elif alt54 == 3:
+                    # C.g:296:4: '(' ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_abstract_declarator_suffix1109)
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1113)
+                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1111)
                     if self.failed:
                         return 
 
 
-                elif alt57 == 4:
-                    # C.g:294:4: '(' parameter_type_list ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_abstract_declarator_suffix1118)
+                elif alt54 == 4:
+                    # C.g:297:4: '(' parameter_type_list ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_abstract_declarator_suffix1116)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_parameter_type_list_in_abstract_declarator_suffix1120)
+                    self.following.append(self.FOLLOW_parameter_type_list_in_abstract_declarator_suffix1118)
                     self.parameter_type_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1122)
+                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1120)
                     if self.failed:
                         return 
 
@@ -4740,7 +4682,7 @@ class CParser(Parser):
 
 
     # $ANTLR start initializer
-    # C.g:297:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );
+    # C.g:300:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );
     def initializer(self, ):
 
         initializer_StartIndex = self.input.index()
@@ -4749,57 +4691,57 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 34):
                     return 
 
-                # C.g:299:2: ( assignment_expression | '{' initializer_list ( ',' )? '}' )
-                alt59 = 2
-                LA59_0 = self.input.LA(1)
+                # C.g:302:2: ( assignment_expression | '{' initializer_list ( ',' )? '}' )
+                alt56 = 2
+                LA56_0 = self.input.LA(1)
 
-                if ((IDENTIFIER <= LA59_0 <= FLOATING_POINT_LITERAL) or LA59_0 == 61 or LA59_0 == 65 or (67 <= LA59_0 <= 68) or (71 <= LA59_0 <= 73) or (76 <= LA59_0 <= 78)) :
-                    alt59 = 1
-                elif (LA59_0 == 43) :
-                    alt59 = 2
+                if ((IDENTIFIER <= LA56_0 <= FLOATING_POINT_LITERAL) or LA56_0 == 61 or LA56_0 == 65 or (67 <= LA56_0 <= 68) or (71 <= LA56_0 <= 73) or (76 <= LA56_0 <= 78)) :
+                    alt56 = 1
+                elif (LA56_0 == 43) :
+                    alt56 = 2
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("297:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );", 59, 0, self.input)
+                    nvae = NoViableAltException("300:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );", 56, 0, self.input)
 
                     raise nvae
 
-                if alt59 == 1:
-                    # C.g:299:4: assignment_expression
-                    self.following.append(self.FOLLOW_assignment_expression_in_initializer1135)
+                if alt56 == 1:
+                    # C.g:302:4: assignment_expression
+                    self.following.append(self.FOLLOW_assignment_expression_in_initializer1133)
                     self.assignment_expression()
                     self.following.pop()
                     if self.failed:
                         return 
 
 
-                elif alt59 == 2:
-                    # C.g:300:4: '{' initializer_list ( ',' )? '}'
-                    self.match(self.input, 43, self.FOLLOW_43_in_initializer1140)
+                elif alt56 == 2:
+                    # C.g:303:4: '{' initializer_list ( ',' )? '}'
+                    self.match(self.input, 43, self.FOLLOW_43_in_initializer1138)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_initializer_list_in_initializer1142)
+                    self.following.append(self.FOLLOW_initializer_list_in_initializer1140)
                     self.initializer_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:300:25: ( ',' )?
-                    alt58 = 2
-                    LA58_0 = self.input.LA(1)
+                    # C.g:303:25: ( ',' )?
+                    alt55 = 2
+                    LA55_0 = self.input.LA(1)
 
-                    if (LA58_0 == 27) :
-                        alt58 = 1
-                    if alt58 == 1:
+                    if (LA55_0 == 27) :
+                        alt55 = 1
+                    if alt55 == 1:
                         # C.g:0:0: ','
-                        self.match(self.input, 27, self.FOLLOW_27_in_initializer1144)
+                        self.match(self.input, 27, self.FOLLOW_27_in_initializer1142)
                         if self.failed:
                             return 
 
 
 
-                    self.match(self.input, 44, self.FOLLOW_44_in_initializer1147)
+                    self.match(self.input, 44, self.FOLLOW_44_in_initializer1145)
                     if self.failed:
                         return 
 
@@ -4820,7 +4762,7 @@ class CParser(Parser):
 
 
     # $ANTLR start initializer_list
-    # C.g:303:1: initializer_list : initializer ( ',' initializer )* ;
+    # C.g:306:1: initializer_list : initializer ( ',' initializer )* ;
     def initializer_list(self, ):
 
         initializer_list_StartIndex = self.input.index()
@@ -4829,33 +4771,33 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 35):
                     return 
 
-                # C.g:304:2: ( initializer ( ',' initializer )* )
-                # C.g:304:4: initializer ( ',' initializer )*
-                self.following.append(self.FOLLOW_initializer_in_initializer_list1158)
+                # C.g:307:2: ( initializer ( ',' initializer )* )
+                # C.g:307:4: initializer ( ',' initializer )*
+                self.following.append(self.FOLLOW_initializer_in_initializer_list1156)
                 self.initializer()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:304:16: ( ',' initializer )*
-                while True: #loop60
-                    alt60 = 2
-                    LA60_0 = self.input.LA(1)
+                # C.g:307:16: ( ',' initializer )*
+                while True: #loop57
+                    alt57 = 2
+                    LA57_0 = self.input.LA(1)
 
-                    if (LA60_0 == 27) :
-                        LA60_1 = self.input.LA(2)
+                    if (LA57_0 == 27) :
+                        LA57_1 = self.input.LA(2)
 
-                        if ((IDENTIFIER <= LA60_1 <= FLOATING_POINT_LITERAL) or LA60_1 == 43 or LA60_1 == 61 or LA60_1 == 65 or (67 <= LA60_1 <= 68) or (71 <= LA60_1 <= 73) or (76 <= LA60_1 <= 78)) :
-                            alt60 = 1
+                        if ((IDENTIFIER <= LA57_1 <= FLOATING_POINT_LITERAL) or LA57_1 == 43 or LA57_1 == 61 or LA57_1 == 65 or (67 <= LA57_1 <= 68) or (71 <= LA57_1 <= 73) or (76 <= LA57_1 <= 78)) :
+                            alt57 = 1
 
 
 
 
-                    if alt60 == 1:
-                        # C.g:304:17: ',' initializer
-                        self.match(self.input, 27, self.FOLLOW_27_in_initializer_list1161)
+                    if alt57 == 1:
+                        # C.g:307:17: ',' initializer
+                        self.match(self.input, 27, self.FOLLOW_27_in_initializer_list1159)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_initializer_in_initializer_list1163)
+                        self.following.append(self.FOLLOW_initializer_in_initializer_list1161)
                         self.initializer()
                         self.following.pop()
                         if self.failed:
@@ -4863,7 +4805,7 @@ class CParser(Parser):
 
 
                     else:
-                        break #loop60
+                        break #loop57
 
 
 
@@ -4891,7 +4833,7 @@ class CParser(Parser):
 
 
     # $ANTLR start argument_expression_list
-    # C.g:309:1: argument_expression_list : assignment_expression ( ',' assignment_expression )* ;
+    # C.g:312:1: argument_expression_list : assignment_expression ( ',' assignment_expression )* ;
     def argument_expression_list(self, ):
 
         retval = self.argument_expression_list_return()
@@ -4902,28 +4844,28 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 36):
                     return retval
 
-                # C.g:310:2: ( assignment_expression ( ',' assignment_expression )* )
-                # C.g:310:6: assignment_expression ( ',' assignment_expression )*
-                self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1181)
+                # C.g:313:2: ( assignment_expression ( ',' assignment_expression )* )
+                # C.g:313:6: assignment_expression ( ',' assignment_expression )*
+                self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1179)
                 self.assignment_expression()
                 self.following.pop()
                 if self.failed:
                     return retval
-                # C.g:310:28: ( ',' assignment_expression )*
-                while True: #loop61
-                    alt61 = 2
-                    LA61_0 = self.input.LA(1)
+                # C.g:313:28: ( ',' assignment_expression )*
+                while True: #loop58
+                    alt58 = 2
+                    LA58_0 = self.input.LA(1)
 
-                    if (LA61_0 == 27) :
-                        alt61 = 1
+                    if (LA58_0 == 27) :
+                        alt58 = 1
 
 
-                    if alt61 == 1:
-                        # C.g:310:29: ',' assignment_expression
-                        self.match(self.input, 27, self.FOLLOW_27_in_argument_expression_list1184)
+                    if alt58 == 1:
+                        # C.g:313:29: ',' assignment_expression
+                        self.match(self.input, 27, self.FOLLOW_27_in_argument_expression_list1182)
                         if self.failed:
                             return retval
-                        self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1186)
+                        self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1184)
                         self.assignment_expression()
                         self.following.pop()
                         if self.failed:
@@ -4931,7 +4873,7 @@ class CParser(Parser):
 
 
                     else:
-                        break #loop61
+                        break #loop58
 
 
 
@@ -4955,7 +4897,7 @@ class CParser(Parser):
 
 
     # $ANTLR start additive_expression
-    # C.g:313:1: additive_expression : ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ;
+    # C.g:316:1: additive_expression : ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ;
     def additive_expression(self, ):
 
         additive_expression_StartIndex = self.input.index()
@@ -4964,11 +4906,11 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 37):
                     return 
 
-                # C.g:314:2: ( ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* )
-                # C.g:314:4: ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )*
-                # C.g:314:4: ( multiplicative_expression )
-                # C.g:314:5: multiplicative_expression
-                self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1200)
+                # C.g:317:2: ( ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* )
+                # C.g:317:4: ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )*
+                # C.g:317:4: ( multiplicative_expression )
+                # C.g:317:5: multiplicative_expression
+                self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1198)
                 self.multiplicative_expression()
                 self.following.pop()
                 if self.failed:
@@ -4976,35 +4918,35 @@ class CParser(Parser):
 
 
 
-                # C.g:314:32: ( '+' multiplicative_expression | '-' multiplicative_expression )*
-                while True: #loop62
-                    alt62 = 3
-                    LA62_0 = self.input.LA(1)
+                # C.g:317:32: ( '+' multiplicative_expression | '-' multiplicative_expression )*
+                while True: #loop59
+                    alt59 = 3
+                    LA59_0 = self.input.LA(1)
 
-                    if (LA62_0 == 67) :
-                        alt62 = 1
-                    elif (LA62_0 == 68) :
-                        alt62 = 2
+                    if (LA59_0 == 67) :
+                        alt59 = 1
+                    elif (LA59_0 == 68) :
+                        alt59 = 2
 
 
-                    if alt62 == 1:
-                        # C.g:314:33: '+' multiplicative_expression
-                        self.match(self.input, 67, self.FOLLOW_67_in_additive_expression1204)
+                    if alt59 == 1:
+                        # C.g:317:33: '+' multiplicative_expression
+                        self.match(self.input, 67, self.FOLLOW_67_in_additive_expression1202)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1206)
+                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1204)
                         self.multiplicative_expression()
                         self.following.pop()
                         if self.failed:
                             return 
 
 
-                    elif alt62 == 2:
-                        # C.g:314:65: '-' multiplicative_expression
-                        self.match(self.input, 68, self.FOLLOW_68_in_additive_expression1210)
+                    elif alt59 == 2:
+                        # C.g:317:65: '-' multiplicative_expression
+                        self.match(self.input, 68, self.FOLLOW_68_in_additive_expression1208)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1212)
+                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1210)
                         self.multiplicative_expression()
                         self.following.pop()
                         if self.failed:
@@ -5012,7 +4954,7 @@ class CParser(Parser):
 
 
                     else:
-                        break #loop62
+                        break #loop59
 
 
 
@@ -5034,7 +4976,7 @@ class CParser(Parser):
 
 
     # $ANTLR start multiplicative_expression
-    # C.g:317:1: multiplicative_expression : ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ;
+    # C.g:320:1: multiplicative_expression : ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ;
     def multiplicative_expression(self, ):
 
         multiplicative_expression_StartIndex = self.input.index()
@@ -5043,11 +4985,11 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 38):
                     return 
 
-                # C.g:318:2: ( ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* )
-                # C.g:318:4: ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )*
-                # C.g:318:4: ( cast_expression )
-                # C.g:318:5: cast_expression
-                self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1226)
+                # C.g:321:2: ( ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* )
+                # C.g:321:4: ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )*
+                # C.g:321:4: ( cast_expression )
+                # C.g:321:5: cast_expression
+                self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1224)
                 self.cast_expression()
                 self.following.pop()
                 if self.failed:
@@ -5055,47 +4997,47 @@ class CParser(Parser):
 
 
 
-                # C.g:318:22: ( '*' cast_expression | '/' cast_expression | '%' cast_expression )*
-                while True: #loop63
-                    alt63 = 4
-                    LA63 = self.input.LA(1)
-                    if LA63 == 65:
-                        alt63 = 1
-                    elif LA63 == 69:
-                        alt63 = 2
-                    elif LA63 == 70:
-                        alt63 = 3
+                # C.g:321:22: ( '*' cast_expression | '/' cast_expression | '%' cast_expression )*
+                while True: #loop60
+                    alt60 = 4
+                    LA60 = self.input.LA(1)
+                    if LA60 == 65:
+                        alt60 = 1
+                    elif LA60 == 69:
+                        alt60 = 2
+                    elif LA60 == 70:
+                        alt60 = 3
 
-                    if alt63 == 1:
-                        # C.g:318:23: '*' cast_expression
-                        self.match(self.input, 65, self.FOLLOW_65_in_multiplicative_expression1230)
+                    if alt60 == 1:
+                        # C.g:321:23: '*' cast_expression
+                        self.match(self.input, 65, self.FOLLOW_65_in_multiplicative_expression1228)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1232)
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1230)
                         self.cast_expression()
                         self.following.pop()
                         if self.failed:
                             return 
 
 
-                    elif alt63 == 2:
-                        # C.g:318:45: '/' cast_expression
-                        self.match(self.input, 69, self.FOLLOW_69_in_multiplicative_expression1236)
+                    elif alt60 == 2:
+                        # C.g:321:45: '/' cast_expression
+                        self.match(self.input, 69, self.FOLLOW_69_in_multiplicative_expression1234)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1238)
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1236)
                         self.cast_expression()
                         self.following.pop()
                         if self.failed:
                             return 
 
 
-                    elif alt63 == 3:
-                        # C.g:318:67: '%' cast_expression
-                        self.match(self.input, 70, self.FOLLOW_70_in_multiplicative_expression1242)
+                    elif alt60 == 3:
+                        # C.g:321:67: '%' cast_expression
+                        self.match(self.input, 70, self.FOLLOW_70_in_multiplicative_expression1240)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1244)
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1242)
                         self.cast_expression()
                         self.following.pop()
                         if self.failed:
@@ -5103,7 +5045,7 @@ class CParser(Parser):
 
 
                     else:
-                        break #loop63
+                        break #loop60
 
 
 
@@ -5125,7 +5067,7 @@ class CParser(Parser):
 
 
     # $ANTLR start cast_expression
-    # C.g:321:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );
+    # C.g:324:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );
     def cast_expression(self, ):
 
         cast_expression_StartIndex = self.input.index()
@@ -5134,75 +5076,75 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 39):
                     return 
 
-                # C.g:322:2: ( '(' type_name ')' cast_expression | unary_expression )
-                alt64 = 2
-                LA64_0 = self.input.LA(1)
+                # C.g:325:2: ( '(' type_name ')' cast_expression | unary_expression )
+                alt61 = 2
+                LA61_0 = self.input.LA(1)
 
-                if (LA64_0 == 61) :
-                    LA64 = self.input.LA(2)
-                    if LA64 == IDENTIFIER:
-                        LA64_13 = self.input.LA(3)
+                if (LA61_0 == 61) :
+                    LA61 = self.input.LA(2)
+                    if LA61 == 34 or LA61 == 35 or LA61 == 36 or LA61 == 37 or LA61 == 38 or LA61 == 39 or LA61 == 40 or LA61 == 41 or LA61 == 42 or LA61 == 45 or LA61 == 46 or LA61 == 48 or LA61 == 49 or LA61 == 50 or LA61 == 51 or LA61 == 52 or LA61 == 53 or LA61 == 54 or LA61 == 55 or LA61 == 56 or LA61 == 57 or LA61 == 58 or LA61 == 59 or LA61 == 60:
+                        alt61 = 1
+                    elif LA61 == IDENTIFIER:
+                        LA61_25 = self.input.LA(3)
 
-                        if (self.synpred107()) :
-                            alt64 = 1
+                        if (self.synpred106()) :
+                            alt61 = 1
                         elif (True) :
-                            alt64 = 2
+                            alt61 = 2
                         else:
                             if self.backtracking > 0:
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("321:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 64, 13, self.input)
+                            nvae = NoViableAltException("324:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 61, 25, self.input)
 
                             raise nvae
 
-                    elif LA64 == HEX_LITERAL or LA64 == OCTAL_LITERAL or LA64 == DECIMAL_LITERAL or LA64 == CHARACTER_LITERAL or LA64 == STRING_LITERAL or LA64 == FLOATING_POINT_LITERAL or LA64 == 61 or LA64 == 65 or LA64 == 67 or LA64 == 68 or LA64 == 71 or LA64 == 72 or LA64 == 73 or LA64 == 76 or LA64 == 77 or LA64 == 78:
-                        alt64 = 2
-                    elif LA64 == 34 or LA64 == 35 or LA64 == 36 or LA64 == 37 or LA64 == 38 or LA64 == 39 or LA64 == 40 or LA64 == 41 or LA64 == 42 or LA64 == 45 or LA64 == 46 or LA64 == 48 or LA64 == 49 or LA64 == 50 or LA64 == 51 or LA64 == 52 or LA64 == 53 or LA64 == 54 or LA64 == 55 or LA64 == 56 or LA64 == 57:
-                        alt64 = 1
+                    elif LA61 == HEX_LITERAL or LA61 == OCTAL_LITERAL or LA61 == DECIMAL_LITERAL or LA61 == CHARACTER_LITERAL or LA61 == STRING_LITERAL or LA61 == FLOATING_POINT_LITERAL or LA61 == 61 o