ECC: modify C parser to deal with empty typedef caused by macro selection; modify...
authorjlin16 <jlin16@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 8 Apr 2008 04:19:27 +0000 (04:19 +0000)
committerjlin16 <jlin16@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 8 Apr 2008 04:19:27 +0000 (04:19 +0000)
GenFds: modify preprocessor to fix _EndOfFile logic error.

git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1130 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/Ecc/C.g
Source/Python/Ecc/CLexer.py
Source/Python/Ecc/CParser.py
Source/Python/Ecc/CodeFragmentCollector.py
Source/Python/GenFds/FdfParser.py

index a9e173c..435b7a8 100644 (file)
@@ -160,8 +160,16 @@ type_specifier
        | 'double'\r
        | 'signed'\r
        | 'unsigned'\r
-       | s=struct_or_union_specifier {self.StoreStructUnionDefinition($s.start.line, $s.start.charPositionInLine, $s.stop.line, $s.stop.charPositionInLine, $s.text)}\r
-       | e=enum_specifier {self.StoreEnumerationDefinition($e.start.line, $e.start.charPositionInLine, $e.stop.line, $e.stop.charPositionInLine, $e.text)}\r
+       | s=struct_or_union_specifier\r
+       {\r
+       if s.stop != None:\r
+         self.StoreStructUnionDefinition($s.start.line, $s.start.charPositionInLine, $s.stop.line, $s.stop.charPositionInLine, $s.text)\r
+       }\r
+       | e=enum_specifier\r
+       {\r
+       if e.stop != None:\r
+         self.StoreEnumerationDefinition($e.start.line, $e.start.charPositionInLine, $e.stop.line, $e.stop.charPositionInLine, $e.text)\r
+       }\r
        | (IDENTIFIER type_qualifier* declarator)=> type_id\r
        ;\r
 \r
@@ -336,14 +344,20 @@ unary_expression
        ;\r
 \r
 postfix_expression\r
-       :   p=primary_expression\r
+scope {\r
+  FuncCallText;\r
+}\r
+@init {\r
+  $postfix_expression::FuncCallText = '';\r
+}\r
+       :   p=primary_expression {$postfix_expression::FuncCallText += $p.text}\r
         (   '[' expression ']'\r
-        |   '(' a=')'{self.StoreFunctionCalling($p.start.line, $p.start.charPositionInLine, $a.line, $a.charPositionInLine, $p.text, '')}\r
-        |   '(' c=argument_expression_list b=')' {self.StoreFunctionCalling($p.start.line, $p.start.charPositionInLine, $b.line, $b.charPositionInLine, $p.text, $c.text)}\r
+        |   '(' a=')'{self.StoreFunctionCalling($p.start.line, $p.start.charPositionInLine, $a.line, $a.charPositionInLine, $postfix_expression::FuncCallText, '')}\r
+        |   '(' c=argument_expression_list b=')' {self.StoreFunctionCalling($p.start.line, $p.start.charPositionInLine, $b.line, $b.charPositionInLine, $postfix_expression::FuncCallText, $c.text)}\r
         |   '(' macro_parameter_list ')'\r
-        |   '.' IDENTIFIER\r
-        |   '*' IDENTIFIER\r
-        |   '->' IDENTIFIER\r
+        |   '.' x=IDENTIFIER {$postfix_expression::FuncCallText += '.' + $x.text}\r
+        |   '*' y=IDENTIFIER {$postfix_expression::FuncCallText = $y.text}\r
+        |   '->' z=IDENTIFIER {$postfix_expression::FuncCallText += '->' + $z.text}\r
         |   '++'\r
         |   '--'\r
         )*\r
index 81a4ded..4a4fb66 100644 (file)
@@ -1,4 +1,4 @@
-# $ANTLR 3.0.1 C.g 2008-01-30 14:26:38
+# $ANTLR 3.0.1 C.g 2008-04-08 11:34:28
 
 from antlr3 import *
 from antlr3.compat import set, frozenset
@@ -8,118 +8,118 @@ from antlr3.compat import set, frozenset
 HIDDEN = BaseRecognizer.HIDDEN
 
 # token types
+FloatTypeSuffix=16
+LETTER=11
 T29=29
-HexDigit=13
-T70=70
-T74=74
-T85=85
-T102=102
-T103=103
+T28=28
+T27=27
+T26=26
+T25=25
+EOF=-1
 STRING_LITERAL=9
+FLOATING_POINT_LITERAL=10
+T38=38
+T37=37
+T39=39
+T34=34
+COMMENT=22
+T33=33
+T36=36
+T35=35
+T30=30
 T32=32
-T81=81
+T31=31
+LINE_COMMENT=23
+IntegerTypeSuffix=14
+CHARACTER_LITERAL=8
+T49=49
+T48=48
+T100=100
+T43=43
+T42=42
+T102=102
 T41=41
-FloatTypeSuffix=16
-T113=113
-T62=62
+T101=101
+T40=40
+T47=47
+T46=46
+T45=45
+T44=44
 T109=109
+T107=107
+T108=108
+T105=105
+WS=19
+T106=106
+T103=103
+T104=104
+T50=50
+LINE_COMMAND=24
+T59=59
+T113=113
+T52=52
+T112=112
+T51=51
+T111=111
+T54=54
+T110=110
+EscapeSequence=12
 DECIMAL_LITERAL=7
-IntegerTypeSuffix=14
-T68=68
+T53=53
+T56=56
+T55=55
+T58=58
+T57=57
+T75=75
+T76=76
 T73=73
-T84=84
-T33=33
-UnicodeVocabulary=21
+T74=74
+T79=79
+T77=77
 T78=78
-WS=19
-LINE_COMMAND=24
-T42=42
-T96=96
-T71=71
-LINE_COMMENT=23
+Exponent=15
+HexDigit=13
 T72=72
-T94=94
-FLOATING_POINT_LITERAL=10
-T76=76
-UnicodeEscape=18
-T75=75
-T89=89
+T71=71
+T70=70
+T62=62
+T63=63
+T64=64
+T65=65
+T66=66
 T67=67
-T31=31
-T60=60
-T82=82
-T100=100
-T49=49
+T68=68
+T69=69
 IDENTIFIER=4
-T30=30
-CHARACTER_LITERAL=8
-T79=79
-T36=36
-T58=58
-T93=93
-T35=35
-T107=107
-OCTAL_LITERAL=6
-T83=83
-T61=61
+UnicodeVocabulary=21
 HEX_LITERAL=5
-T45=45
-T34=34
-T101=101
-T64=64
-T25=25
-T91=91
-T105=105
-T37=37
-T86=86
-EscapeSequence=12
-T26=26
-T51=51
-T111=111
-T46=46
-T77=77
-T38=38
-T106=106
-T112=112
-T69=69
-T39=39
-T44=44
-T55=55
-LETTER=11
-Exponent=15
-T95=95
-T50=50
-T110=110
-T108=108
+T61=61
+T60=60
+T99=99
+T97=97
 BS=20
+T98=98
+T95=95
+T96=96
+OCTAL_LITERAL=6
+T94=94
+Tokens=114
+T93=93
 T92=92
-T43=43
-T28=28
-T40=40
-T66=66
-COMMENT=22
+T91=91
+T90=90
 T88=88
-T63=63
-T57=57
-T65=65
-T98=98
-T56=56
+T89=89
+T84=84
+T85=85
+T86=86
 T87=87
+UnicodeEscape=18
+T81=81
 T80=80
-T59=59
-T97=97
-T48=48
-T54=54
-EOF=-1
-T104=104
-T47=47
-Tokens=114
-T53=53
+T83=83
 OctalEscape=17
-T99=99
-T27=27
-T52=52
-T90=90
+T82=82
 
 class CLexer(Lexer):
 
@@ -2182,11 +2182,11 @@ class CLexer(Lexer):
         try:
             self.type = IDENTIFIER
 
-            # C.g:504:2: ( LETTER ( LETTER | '0' .. '9' )* )
-            # C.g:504:4: LETTER ( LETTER | '0' .. '9' )*
+            # C.g:518:2: ( LETTER ( LETTER | '0' .. '9' )* )
+            # C.g:518:4: LETTER ( LETTER | '0' .. '9' )*
             self.mLETTER()
 
-            # C.g:504:11: ( LETTER | '0' .. '9' )*
+            # C.g:518: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:509:2: ( '$' | 'A' .. 'Z' | 'a' .. 'z' | '_' )
+            # C.g:523: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:516:5: ( ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' )
-            # C.g:516:9: ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\''
-            # C.g:516:9: ( 'L' )?
+            # C.g:530:5: ( ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' )
+            # C.g:530:9: ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\''
+            # C.g:530:9: ( 'L' )?
             alt2 = 2
             LA2_0 = self.input.LA(1)
 
             if (LA2_0 == u'L') :
                 alt2 = 1
             if alt2 == 1:
-                # C.g:516:10: 'L'
+                # C.g:530:10: 'L'
                 self.match(u'L')
 
 
@@ -2274,7 +2274,7 @@ class CLexer(Lexer):
 
             self.match(u'\'')
 
-            # C.g:516:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )
+            # C.g:530: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("516:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 3, 0, self.input)
+                nvae = NoViableAltException("530:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 3, 0, self.input)
 
                 raise nvae
 
             if alt3 == 1:
-                # C.g:516:23: EscapeSequence
+                # C.g:530:23: EscapeSequence
                 self.mEscapeSequence()
 
 
 
             elif alt3 == 2:
-                # C.g:516:40: ~ ( '\\'' | '\\\\' )
+                # C.g:530: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:520:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-            # C.g:520:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
-            # C.g:520:8: ( 'L' )?
+            # C.g:534:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+            # C.g:534:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+            # C.g:534:8: ( 'L' )?
             alt4 = 2
             LA4_0 = self.input.LA(1)
 
             if (LA4_0 == u'L') :
                 alt4 = 1
             if alt4 == 1:
-                # C.g:520:9: 'L'
+                # C.g:534:9: 'L'
                 self.match(u'L')
 
 
@@ -2344,7 +2344,7 @@ class CLexer(Lexer):
 
             self.match(u'"')
 
-            # C.g:520:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+            # C.g:534: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:520:21: EscapeSequence
+                    # C.g:534:21: EscapeSequence
                     self.mEscapeSequence()
 
 
 
                 elif alt5 == 2:
-                    # C.g:520:38: ~ ( '\\\\' | '\"' )
+                    # C.g:534: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:523:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? )
-            # C.g:523:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )?
+            # C.g:537:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? )
+            # C.g:537: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:523:29: ( HexDigit )+
+            # C.g:537:29: ( HexDigit )+
             cnt6 = 0
             while True: #loop6
                 alt6 = 2
@@ -2422,7 +2422,7 @@ class CLexer(Lexer):
 
 
                 if alt6 == 1:
-                    # C.g:523:29: HexDigit
+                    # C.g:537:29: HexDigit
                     self.mHexDigit()
 
 
@@ -2437,14 +2437,14 @@ class CLexer(Lexer):
                 cnt6 += 1
 
 
-            # C.g:523:39: ( IntegerTypeSuffix )?
+            # C.g:537: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:523:39: IntegerTypeSuffix
+                # C.g:537:39: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2468,9 +2468,9 @@ class CLexer(Lexer):
         try:
             self.type = DECIMAL_LITERAL
 
-            # 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' )* )
+            # C.g:539:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? )
+            # C.g:539:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )?
+            # C.g:539: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("525:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 9, 0, self.input)
+                nvae = NoViableAltException("539:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 9, 0, self.input)
 
                 raise nvae
 
             if alt9 == 1:
-                # C.g:525:20: '0'
+                # C.g:539:20: '0'
                 self.match(u'0')
 
 
 
             elif alt9 == 2:
-                # C.g:525:26: '1' .. '9' ( '0' .. '9' )*
+                # C.g:539:26: '1' .. '9' ( '0' .. '9' )*
                 self.matchRange(u'1', u'9')
 
-                # C.g:525:35: ( '0' .. '9' )*
+                # C.g:539: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:525:35: '0' .. '9'
+                        # C.g:539:35: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2515,14 +2515,14 @@ class CLexer(Lexer):
 
 
 
-            # C.g:525:46: ( IntegerTypeSuffix )?
+            # C.g:539: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:525:46: IntegerTypeSuffix
+                # C.g:539:46: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2546,11 +2546,11 @@ class CLexer(Lexer):
         try:
             self.type = OCTAL_LITERAL
 
-            # C.g:527:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? )
-            # C.g:527:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )?
+            # C.g:541:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? )
+            # C.g:541:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )?
             self.match(u'0')
 
-            # C.g:527:21: ( '0' .. '7' )+
+            # C.g:541:21: ( '0' .. '7' )+
             cnt11 = 0
             while True: #loop11
                 alt11 = 2
@@ -2561,7 +2561,7 @@ class CLexer(Lexer):
 
 
                 if alt11 == 1:
-                    # C.g:527:22: '0' .. '7'
+                    # C.g:541:22: '0' .. '7'
                     self.matchRange(u'0', u'7')
 
 
@@ -2576,14 +2576,14 @@ class CLexer(Lexer):
                 cnt11 += 1
 
 
-            # C.g:527:33: ( IntegerTypeSuffix )?
+            # C.g:541: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:527:33: IntegerTypeSuffix
+                # C.g:541:33: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2605,8 +2605,8 @@ class CLexer(Lexer):
     def mHexDigit(self, ):
 
         try:
-            # C.g:530:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            # C.g:530:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            # C.g:544:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            # C.g:544: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:534:2: ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) )
+            # C.g:548: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("532:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' ) | ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' ) );", 13, 0, self.input)
+                nvae = NoViableAltException("546: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:534:4: ( 'u' | 'U' )
+                # C.g:548: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:535:4: ( 'l' | 'L' )
+                # C.g:549: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:536:4: ( 'u' | 'U' ) ( 'l' | 'L' )
+                # C.g:550: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:537:4: ( 'u' | 'U' ) ( 'l' | 'L' ) ( 'l' | 'L' )
+                # C.g:551: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:541:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? | '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? | ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? | ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix )
+            # C.g:555: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:541:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )?
-                # C.g:541:9: ( '0' .. '9' )+
+                # C.g:555:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )?
+                # C.g:555:9: ( '0' .. '9' )+
                 cnt14 = 0
                 while True: #loop14
                     alt14 = 2
@@ -2765,7 +2765,7 @@ class CLexer(Lexer):
 
 
                     if alt14 == 1:
-                        # C.g:541:10: '0' .. '9'
+                        # C.g:555:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2782,7 +2782,7 @@ class CLexer(Lexer):
 
                 self.match(u'.')
 
-                # C.g:541:25: ( '0' .. '9' )*
+                # C.g:555: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:541:26: '0' .. '9'
+                        # C.g:555:26: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2801,27 +2801,27 @@ class CLexer(Lexer):
                         break #loop15
 
 
-                # C.g:541:37: ( Exponent )?
+                # C.g:555: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:541:37: Exponent
+                    # C.g:555:37: Exponent
                     self.mExponent()
 
 
 
 
-                # C.g:541:47: ( FloatTypeSuffix )?
+                # C.g:555: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:541:47: FloatTypeSuffix
+                    # C.g:555:47: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2830,10 +2830,10 @@ class CLexer(Lexer):
 
 
             elif alt25 == 2:
-                # C.g:542:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )?
+                # C.g:556:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )?
                 self.match(u'.')
 
-                # C.g:542:13: ( '0' .. '9' )+
+                # C.g:556:13: ( '0' .. '9' )+
                 cnt18 = 0
                 while True: #loop18
                     alt18 = 2
@@ -2844,7 +2844,7 @@ class CLexer(Lexer):
 
 
                     if alt18 == 1:
-                        # C.g:542:14: '0' .. '9'
+                        # C.g:556:14: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2859,27 +2859,27 @@ class CLexer(Lexer):
                     cnt18 += 1
 
 
-                # C.g:542:25: ( Exponent )?
+                # C.g:556: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:542:25: Exponent
+                    # C.g:556:25: Exponent
                     self.mExponent()
 
 
 
 
-                # C.g:542:35: ( FloatTypeSuffix )?
+                # C.g:556: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:542:35: FloatTypeSuffix
+                    # C.g:556:35: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2888,8 +2888,8 @@ class CLexer(Lexer):
 
 
             elif alt25 == 3:
-                # C.g:543:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )?
-                # C.g:543:9: ( '0' .. '9' )+
+                # C.g:557:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )?
+                # C.g:557:9: ( '0' .. '9' )+
                 cnt21 = 0
                 while True: #loop21
                     alt21 = 2
@@ -2900,7 +2900,7 @@ class CLexer(Lexer):
 
 
                     if alt21 == 1:
-                        # C.g:543:10: '0' .. '9'
+                        # C.g:557:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2917,14 +2917,14 @@ class CLexer(Lexer):
 
                 self.mExponent()
 
-                # C.g:543:30: ( FloatTypeSuffix )?
+                # C.g:557: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:543:30: FloatTypeSuffix
+                    # C.g:557:30: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2933,8 +2933,8 @@ class CLexer(Lexer):
 
 
             elif alt25 == 4:
-                # C.g:544:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix
-                # C.g:544:9: ( '0' .. '9' )+
+                # C.g:558:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix
+                # C.g:558:9: ( '0' .. '9' )+
                 cnt23 = 0
                 while True: #loop23
                     alt23 = 2
@@ -2945,7 +2945,7 @@ class CLexer(Lexer):
 
 
                     if alt23 == 1:
-                        # C.g:544:10: '0' .. '9'
+                        # C.g:558:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2960,14 +2960,14 @@ class CLexer(Lexer):
                     cnt23 += 1
 
 
-                # C.g:544:21: ( Exponent )?
+                # C.g:558: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:544:21: Exponent
+                    # C.g:558:21: Exponent
                     self.mExponent()
 
 
@@ -2990,8 +2990,8 @@ class CLexer(Lexer):
     def mExponent(self, ):
 
         try:
-            # C.g:548:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )
-            # C.g:548:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
+            # C.g:562:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )
+            # C.g:562: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:548:22: ( '+' | '-' )?
+            # C.g:562:22: ( '+' | '-' )?
             alt26 = 2
             LA26_0 = self.input.LA(1)
 
@@ -3021,7 +3021,7 @@ class CLexer(Lexer):
 
 
 
-            # C.g:548:33: ( '0' .. '9' )+
+            # C.g:562:33: ( '0' .. '9' )+
             cnt27 = 0
             while True: #loop27
                 alt27 = 2
@@ -3032,7 +3032,7 @@ class CLexer(Lexer):
 
 
                 if alt27 == 1:
-                    # C.g:548:34: '0' .. '9'
+                    # C.g:562:34: '0' .. '9'
                     self.matchRange(u'0', u'9')
 
 
@@ -3063,8 +3063,8 @@ class CLexer(Lexer):
     def mFloatTypeSuffix(self, ):
 
         try:
-            # C.g:551:17: ( ( 'f' | 'F' | 'd' | 'D' ) )
-            # C.g:551:19: ( 'f' | 'F' | 'd' | 'D' )
+            # C.g:565:17: ( ( 'f' | 'F' | 'd' | 'D' ) )
+            # C.g:565: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:555:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape )
+            # C.g:569: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("553:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 1, self.input)
+                    nvae = NoViableAltException("567:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 1, self.input)
 
                     raise nvae
 
             else:
-                nvae = NoViableAltException("553:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 0, self.input)
+                nvae = NoViableAltException("567:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 28, 0, self.input)
 
                 raise nvae
 
             if alt28 == 1:
-                # C.g:555:8: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' )
+                # C.g:569: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:556:9: OctalEscape
+                # C.g:570:9: OctalEscape
                 self.mOctalEscape()
 
 
@@ -3145,7 +3145,7 @@ class CLexer(Lexer):
     def mOctalEscape(self, ):
 
         try:
-            # C.g:561:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            # C.g:575: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("559:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 1, self.input)
+                    nvae = NoViableAltException("573:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 1, self.input)
 
                     raise nvae
 
             else:
-                nvae = NoViableAltException("559:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 29, 0, self.input)
+                nvae = NoViableAltException("573: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:561:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                # C.g:575:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:561:14: ( '0' .. '3' )
-                # C.g:561:15: '0' .. '3'
+                # C.g:575:14: ( '0' .. '3' )
+                # C.g:575:15: '0' .. '3'
                 self.matchRange(u'0', u'3')
 
 
 
 
-                # C.g:561:25: ( '0' .. '7' )
-                # C.g:561:26: '0' .. '7'
+                # C.g:575:25: ( '0' .. '7' )
+                # C.g:575:26: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
 
 
-                # C.g:561:36: ( '0' .. '7' )
-                # C.g:561:37: '0' .. '7'
+                # C.g:575:36: ( '0' .. '7' )
+                # C.g:575:37: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -3209,18 +3209,18 @@ class CLexer(Lexer):
 
 
             elif alt29 == 2:
-                # C.g:562:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                # C.g:576:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:562:14: ( '0' .. '7' )
-                # C.g:562:15: '0' .. '7'
+                # C.g:576:14: ( '0' .. '7' )
+                # C.g:576:15: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
 
 
-                # C.g:562:25: ( '0' .. '7' )
-                # C.g:562:26: '0' .. '7'
+                # C.g:576:25: ( '0' .. '7' )
+                # C.g:576:26: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -3229,11 +3229,11 @@ class CLexer(Lexer):
 
 
             elif alt29 == 3:
-                # C.g:563:9: '\\\\' ( '0' .. '7' )
+                # C.g:577:9: '\\\\' ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:563:14: ( '0' .. '7' )
-                # C.g:563:15: '0' .. '7'
+                # C.g:577:14: ( '0' .. '7' )
+                # C.g:577:15: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -3254,8 +3254,8 @@ class CLexer(Lexer):
     def mUnicodeEscape(self, ):
 
         try:
-            # C.g:568:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            # C.g:568:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            # C.g:582:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            # C.g:582: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:571:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) )
-            # C.g:571:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' )
+            # C.g:585:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) )
+            # C.g:585: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:575:5: ( ( '\\\\' ) )
-            # C.g:575:7: ( '\\\\' )
-            # C.g:575:7: ( '\\\\' )
-            # C.g:575:8: '\\\\'
+            # C.g:589:5: ( ( '\\\\' ) )
+            # C.g:589:7: ( '\\\\' )
+            # C.g:589:7: ( '\\\\' )
+            # C.g:589:8: '\\\\'
             self.match(u'\\')
 
 
@@ -3348,8 +3348,8 @@ class CLexer(Lexer):
         try:
             self.type = UnicodeVocabulary
 
-            # C.g:583:5: ( '\\u0003' .. '\\uFFFE' )
-            # C.g:583:7: '\\u0003' .. '\\uFFFE'
+            # C.g:597:5: ( '\\u0003' .. '\\uFFFE' )
+            # C.g:597:7: '\\u0003' .. '\\uFFFE'
             self.matchRange(u'\u0003', u'\uFFFE')
 
 
@@ -3370,12 +3370,12 @@ class CLexer(Lexer):
         try:
             self.type = COMMENT
 
-            # C.g:586:5: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            # C.g:586:9: '/*' ( options {greedy=false; } : . )* '*/'
+            # C.g:600:5: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            # C.g:600:9: '/*' ( options {greedy=false; } : . )* '*/'
             self.match("/*")
 
 
-            # C.g:586:14: ( options {greedy=false; } : . )*
+            # C.g:600: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:586:42: .
+                    # C.g:600:42: .
                     self.matchAny()
 
 
@@ -3427,12 +3427,12 @@ class CLexer(Lexer):
         try:
             self.type = LINE_COMMENT
 
-            # C.g:591:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
-            # C.g:591:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
+            # C.g:605:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
+            # C.g:605:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
             self.match("//")
 
 
-            # C.g:591:12: (~ ( '\\n' | '\\r' ) )*
+            # C.g:605: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:591:12: ~ ( '\\n' | '\\r' )
+                    # C.g:605: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:591:26: ( '\\r' )?
+            # C.g:605:26: ( '\\r' )?
             alt32 = 2
             LA32_0 = self.input.LA(1)
 
             if (LA32_0 == u'\r') :
                 alt32 = 1
             if alt32 == 1:
-                # C.g:591:26: '\\r'
+                # C.g:605:26: '\\r'
                 self.match(u'\r')
 
 
@@ -3494,11 +3494,11 @@ class CLexer(Lexer):
         try:
             self.type = LINE_COMMAND
 
-            # C.g:596:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
-            # C.g:596:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
+            # C.g:610:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
+            # C.g:610:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
             self.match(u'#')
 
-            # C.g:596:11: (~ ( '\\n' | '\\r' ) )*
+            # C.g:610: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:596:11: ~ ( '\\n' | '\\r' )
+                    # C.g:610: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:596:25: ( '\\r' )?
+            # C.g:610:25: ( '\\r' )?
             alt34 = 2
             LA34_0 = self.input.LA(1)
 
             if (LA34_0 == u'\r') :
                 alt34 = 1
             if alt34 == 1:
-                # C.g:596:25: '\\r'
+                # C.g:610:25: '\\r'
                 self.match(u'\r')
 
 
@@ -4223,24 +4223,24 @@ class CLexer(Lexer):
     # lookup tables for DFA #35
 
     DFA35_eot = DFA.unpack(
-        u"\2\uffff\1\74\1\uffff\1\77\14\74\3\uffff\7\74\4\uffff\1\146\1\151"
+        u"\2\uffff\1\74\1\uffff\1\77\14\74\3\uffff\7\74\4\uffff\1\146\1\150"
         u"\1\154\1\160\1\164\1\166\1\171\1\uffff\1\174\1\177\1\u0082\1\u0084"
         u"\1\u0087\1\uffff\4\74\1\uffff\2\71\2\u0090\2\uffff\1\71\2\uffff"
         u"\1\74\4\uffff\17\74\1\u00a9\3\74\1\u00ae\2\74\3\uffff\1\u00b2\7"
         u"\74\34\uffff\1\u00bb\2\uffff\1\u00bd\10\uffff\3\74\3\uffff\1\u00c1"
-        u"\1\uffff\1\u0090\3\uffff\23\74\1\u00d6\1\uffff\1\74\1\u00d8\2\74"
-        u"\1\uffff\3\74\1\uffff\1\u00de\6\74\4\uffff\3\74\1\uffff\1\74\1"
-        u"\u00ea\1\74\1\u00ec\6\74\1\u00f3\3\74\1\u00f7\1\74\1\u00f9\2\74"
-        u"\1\u00fc\1\uffff\1\u00fd\1\uffff\5\74\1\uffff\10\74\1\u010c\2\74"
-        u"\1\uffff\1\74\1\uffff\5\74\1\u0115\1\uffff\3\74\1\uffff\1\74\1"
-        u"\uffff\1\74\1\u011b\2\uffff\1\u011c\3\74\1\u0120\1\74\1\u0122\6"
-        u"\74\1\u0129\1\uffff\1\u012a\1\74\1\u012c\1\u012d\1\u012e\1\u012f"
-        u"\1\u0130\1\u0131\1\uffff\1\74\1\u0133\1\u0134\2\74\2\uffff\1\u0137"
-        u"\2\74\1\uffff\1\74\1\uffff\5\74\1\u0140\2\uffff\1\u0141\6\uffff"
-        u"\1\74\2\uffff\2\74\1\uffff\1\u0145\7\74\2\uffff\1\u014d\1\u014e"
-        u"\1\u014f\1\uffff\1\u0150\1\u0151\1\74\1\u0153\3\74\5\uffff\1\u0157"
-        u"\1\uffff\3\74\1\uffff\20\74\1\u016b\2\74\1\uffff\4\74\1\u0172\1"
-        u"\74\1\uffff\11\74\1\u017d\1\uffff"
+        u"\1\uffff\1\u0090\3\uffff\23\74\1\u00d6\1\uffff\2\74\1\u00d9\1\74"
+        u"\1\uffff\3\74\1\uffff\1\74\1\u00df\5\74\4\uffff\3\74\1\uffff\2"
+        u"\74\1\u00eb\1\u00ec\6\74\1\u00f3\3\74\1\u00f7\1\74\1\u00f9\2\74"
+        u"\1\u00fc\1\uffff\1\u00fd\1\74\1\uffff\5\74\1\uffff\7\74\1\u010c"
+        u"\3\74\2\uffff\1\u0110\5\74\1\uffff\3\74\1\uffff\1\74\1\uffff\1"
+        u"\u011a\1\74\2\uffff\1\u011c\3\74\1\u0120\1\74\1\u0122\6\74\1\u0129"
+        u"\1\uffff\1\u012a\1\74\1\u012c\1\uffff\1\u012d\1\u012e\1\u012f\1"
+        u"\u0130\1\u0131\1\u0132\1\74\1\u0134\1\74\1\uffff\1\74\1\uffff\1"
+        u"\u0137\2\74\1\uffff\1\74\1\uffff\5\74\1\u0140\2\uffff\1\u0141\7"
+        u"\uffff\1\74\1\uffff\2\74\1\uffff\1\u0145\7\74\2\uffff\1\u014d\1"
+        u"\u014e\1\u014f\1\uffff\1\u0150\1\u0151\1\74\1\u0153\3\74\5\uffff"
+        u"\1\u0157\1\uffff\3\74\1\uffff\21\74\1\u016c\2\74\1\uffff\3\74\1"
+        u"\u0172\1\74\1\uffff\11\74\1\u017d\1\uffff"
         )
 
     DFA35_eof = DFA.unpack(
@@ -4252,31 +4252,31 @@ class CLexer(Lexer):
         u"\157\1\141\1\146\1\157\1\154\1\145\1\156\3\uffff\1\116\1\120\1"
         u"\117\1\116\1\117\1\114\1\106\4\uffff\1\75\1\56\1\53\1\55\1\52\1"
         u"\75\1\46\1\uffff\1\75\1\74\3\75\1\uffff\1\150\1\157\1\162\1\42"
-        u"\1\uffff\2\0\2\56\2\uffff\1\0\2\uffff\1\160\4\uffff\1\165\1\164"
-        u"\1\163\1\151\1\147\1\141\1\157\1\164\1\147\1\101\1\151\1\141\1"
-        u"\156\1\163\1\164\1\44\1\156\1\162\1\157\1\44\1\146\1\151\3\uffff"
+        u"\1\uffff\2\0\2\56\2\uffff\1\0\2\uffff\1\160\4\uffff\1\164\1\165"
+        u"\1\163\1\157\1\141\1\147\1\151\1\164\1\147\1\101\1\151\1\141\1"
+        u"\156\1\163\1\164\1\44\1\156\1\157\1\162\1\44\1\146\1\151\3\uffff"
         u"\1\44\2\124\1\116\1\101\1\114\1\117\1\111\34\uffff\1\75\2\uffff"
         u"\1\75\10\uffff\1\151\1\164\1\145\3\uffff\1\56\1\uffff\1\56\3\uffff"
-        u"\1\145\1\155\2\145\1\164\1\145\1\156\1\165\1\164\1\162\1\157\1"
-        u"\151\1\165\1\124\1\144\1\141\1\162\1\163\1\145\1\44\1\uffff\1\147"
-        u"\1\44\1\141\1\142\1\uffff\1\141\1\151\1\157\1\uffff\1\44\1\111"
+        u"\2\145\1\155\1\145\1\162\1\164\1\165\1\145\1\156\1\164\1\157\1"
+        u"\165\1\151\1\124\1\144\1\141\1\162\1\163\1\145\1\44\1\uffff\1\147"
+        u"\1\141\1\44\1\142\1\uffff\1\141\1\151\1\157\1\uffff\1\111\1\44"
         u"\1\123\1\114\1\101\1\102\1\101\4\uffff\1\154\1\157\1\141\1\uffff"
-        u"\1\144\1\44\1\162\1\44\1\143\1\157\1\145\1\143\1\151\1\164\1\44"
-        u"\1\163\1\162\1\111\1\44\1\164\1\44\1\151\1\164\1\44\1\uffff\1\44"
-        u"\1\uffff\1\164\1\154\1\165\1\147\1\156\1\uffff\1\117\1\124\1\111"
-        u"\1\124\1\101\1\102\1\120\1\145\1\44\1\153\1\145\1\uffff\1\156\1"
-        u"\uffff\1\150\1\146\1\144\1\164\1\143\1\44\1\uffff\1\164\1\156\1"
-        u"\103\1\uffff\1\151\1\uffff\1\156\1\44\2\uffff\1\44\1\145\1\154"
-        u"\1\156\1\44\1\116\1\44\1\107\1\111\1\114\1\117\1\125\1\111\1\44"
-        u"\1\uffff\1\44\1\146\6\44\1\uffff\1\145\2\44\1\154\1\165\2\uffff"
-        u"\1\44\1\164\1\145\1\uffff\1\101\1\uffff\1\116\1\114\1\137\1\117"
-        u"\1\116\1\44\2\uffff\1\44\6\uffff\1\162\2\uffff\2\145\1\uffff\1"
+        u"\1\144\1\162\2\44\1\164\1\151\1\143\1\157\1\145\1\143\1\44\1\162"
+        u"\1\163\1\111\1\44\1\164\1\44\1\164\1\151\1\44\1\uffff\1\44\1\164"
+        u"\1\uffff\1\154\1\165\1\147\1\156\1\117\1\uffff\1\124\1\111\1\124"
+        u"\1\101\1\102\1\120\1\145\1\44\1\153\1\145\1\156\2\uffff\1\44\1"
+        u"\143\1\164\1\146\1\144\1\150\1\uffff\1\156\1\164\1\103\1\uffff"
+        u"\1\151\1\uffff\1\44\1\156\2\uffff\1\44\1\145\1\154\1\156\1\44\1"
+        u"\116\1\44\1\107\1\111\1\114\1\125\1\117\1\111\1\44\1\uffff\1\44"
+        u"\1\146\1\44\1\uffff\6\44\1\145\1\44\1\154\1\uffff\1\165\1\uffff"
+        u"\1\44\1\164\1\145\1\uffff\1\101\1\uffff\1\116\1\114\1\137\1\116"
+        u"\1\117\1\44\2\uffff\1\44\7\uffff\1\162\1\uffff\2\145\1\uffff\1"
         u"\44\1\144\1\114\2\105\1\122\2\124\2\uffff\3\44\1\uffff\2\44\1\104"
-        u"\1\44\1\105\1\123\1\111\5\uffff\1\44\1\uffff\1\115\1\105\1\115"
-        u"\1\uffff\1\117\1\122\1\105\2\126\1\123\1\105\1\111\1\105\1\137"
-        u"\1\103\1\122\1\111\1\105\1\126\1\106\1\44\1\111\1\137\1\uffff\1"
-        u"\103\1\125\1\105\1\116\1\44\1\122\1\uffff\1\105\1\106\1\105\1\122"
-        u"\1\105\1\116\1\103\1\105\1\104\1\44\1\uffff"
+        u"\1\44\1\105\1\111\1\123\5\uffff\1\44\1\uffff\2\115\1\105\1\uffff"
+        u"\1\117\1\105\1\122\1\126\1\123\1\126\2\105\1\111\1\137\1\122\1"
+        u"\103\1\111\1\126\1\105\1\106\1\111\1\44\1\137\1\103\1\uffff\1\125"
+        u"\1\105\1\116\1\44\1\122\1\uffff\1\105\1\106\1\105\1\122\1\105\1"
+        u"\116\1\103\1\105\1\104\1\44\1\uffff"
         )
 
     DFA35_max = DFA.unpack(
@@ -4284,30 +4284,30 @@ class CLexer(Lexer):
         u"\2\157\1\156\3\157\1\156\3\uffff\1\116\1\125\1\117\1\116\1\117"
         u"\1\114\1\106\4\uffff\1\75\1\71\1\75\1\76\3\75\1\uffff\2\75\1\76"
         u"\1\75\1\174\1\uffff\1\150\1\157\1\162\1\47\1\uffff\2\ufffe\1\170"
-        u"\1\146\2\uffff\1\ufffe\2\uffff\1\160\4\uffff\1\165\1\164\1\163"
-        u"\1\151\1\172\1\162\1\157\2\164\1\101\1\154\1\141\1\156\1\163\1"
-        u"\164\1\172\1\156\1\162\1\157\1\172\1\146\1\163\3\uffff\1\172\2"
+        u"\1\146\2\uffff\1\ufffe\2\uffff\1\160\4\uffff\1\164\1\165\1\163"
+        u"\1\157\1\162\1\172\1\151\2\164\1\101\1\154\1\141\1\156\1\163\1"
+        u"\164\1\172\1\156\1\157\1\162\1\172\1\146\1\163\3\uffff\1\172\2"
         u"\124\1\116\1\101\1\114\1\117\1\111\34\uffff\1\75\2\uffff\1\75\10"
-        u"\uffff\1\151\1\164\1\145\3\uffff\1\146\1\uffff\1\146\3\uffff\1"
-        u"\145\1\155\2\145\1\164\1\145\1\156\1\165\1\164\1\162\1\157\1\151"
-        u"\1\165\1\124\1\144\1\141\1\162\1\164\1\145\1\172\1\uffff\1\147"
-        u"\1\172\1\141\1\142\1\uffff\1\141\1\151\1\157\1\uffff\1\172\1\111"
+        u"\uffff\1\151\1\164\1\145\3\uffff\1\146\1\uffff\1\146\3\uffff\2"
+        u"\145\1\155\1\145\1\162\1\164\1\165\1\145\1\156\1\164\1\157\1\165"
+        u"\1\151\1\124\1\144\1\141\1\162\1\164\1\145\1\172\1\uffff\1\147"
+        u"\1\141\1\172\1\142\1\uffff\1\141\1\151\1\157\1\uffff\1\111\1\172"
         u"\1\123\1\114\1\101\1\102\1\137\4\uffff\1\154\1\157\1\141\1\uffff"
-        u"\1\144\1\172\1\162\1\172\1\143\1\157\1\145\1\143\1\151\1\164\1"
-        u"\172\1\163\1\162\1\111\1\172\1\164\1\172\1\151\1\164\1\172\1\uffff"
-        u"\1\172\1\uffff\1\164\1\154\1\165\1\147\1\156\1\uffff\1\117\1\124"
-        u"\1\111\1\124\1\101\1\122\1\120\1\145\1\172\1\153\1\145\1\uffff"
-        u"\1\156\1\uffff\1\150\1\146\1\144\1\164\1\143\1\172\1\uffff\1\164"
-        u"\1\156\1\103\1\uffff\1\151\1\uffff\1\156\1\172\2\uffff\1\172\1"
-        u"\145\1\154\1\156\1\172\1\116\1\172\1\107\1\111\1\114\1\117\1\125"
-        u"\1\111\1\172\1\uffff\1\172\1\146\6\172\1\uffff\1\145\2\172\1\154"
-        u"\1\165\2\uffff\1\172\1\164\1\145\1\uffff\1\101\1\uffff\1\116\1"
-        u"\114\1\137\1\117\1\116\1\172\2\uffff\1\172\6\uffff\1\162\2\uffff"
-        u"\2\145\1\uffff\1\172\1\144\1\114\2\105\1\122\2\124\2\uffff\3\172"
-        u"\1\uffff\2\172\1\104\1\172\1\105\1\123\1\111\5\uffff\1\172\1\uffff"
-        u"\1\115\1\105\1\115\1\uffff\1\117\1\122\1\105\2\126\1\123\1\105"
-        u"\1\111\1\105\1\137\1\103\1\122\1\111\1\105\1\126\1\106\1\172\1"
-        u"\111\1\137\1\uffff\1\103\1\125\1\105\1\116\1\172\1\122\1\uffff"
+        u"\1\144\1\162\2\172\1\164\1\151\1\143\1\157\1\145\1\143\1\172\1"
+        u"\162\1\163\1\111\1\172\1\164\1\172\1\164\1\151\1\172\1\uffff\1"
+        u"\172\1\164\1\uffff\1\154\1\165\1\147\1\156\1\117\1\uffff\1\124"
+        u"\1\111\1\124\1\101\1\122\1\120\1\145\1\172\1\153\1\145\1\156\2"
+        u"\uffff\1\172\1\143\1\164\1\146\1\144\1\150\1\uffff\1\156\1\164"
+        u"\1\103\1\uffff\1\151\1\uffff\1\172\1\156\2\uffff\1\172\1\145\1"
+        u"\154\1\156\1\172\1\116\1\172\1\107\1\111\1\114\1\125\1\117\1\111"
+        u"\1\172\1\uffff\1\172\1\146\1\172\1\uffff\6\172\1\145\1\172\1\154"
+        u"\1\uffff\1\165\1\uffff\1\172\1\164\1\145\1\uffff\1\101\1\uffff"
+        u"\1\116\1\114\1\137\1\116\1\117\1\172\2\uffff\1\172\7\uffff\1\162"
+        u"\1\uffff\2\145\1\uffff\1\172\1\144\1\114\2\105\1\122\2\124\2\uffff"
+        u"\3\172\1\uffff\2\172\1\104\1\172\1\105\1\111\1\123\5\uffff\1\172"
+        u"\1\uffff\2\115\1\105\1\uffff\1\117\1\105\1\122\1\126\1\123\1\126"
+        u"\2\105\1\111\1\137\1\122\1\103\1\111\1\126\1\105\1\106\1\111\1"
+        u"\172\1\137\1\103\1\uffff\1\125\1\105\1\116\1\172\1\122\1\uffff"
         u"\1\105\1\106\1\105\1\122\1\105\1\116\1\103\1\105\1\104\1\172\1"
         u"\uffff"
         )
@@ -4316,19 +4316,19 @@ class CLexer(Lexer):
         u"\1\uffff\1\1\1\uffff\1\3\15\uffff\1\23\1\24\1\27\7\uffff\1\45\1"
         u"\46\1\47\1\50\7\uffff\1\65\5\uffff\1\101\4\uffff\1\132\4\uffff"
         u"\1\141\1\142\1\uffff\1\143\1\1\1\uffff\1\132\1\3\1\106\1\4\26\uffff"
-        u"\1\23\1\24\1\27\10\uffff\1\45\1\46\1\47\1\50\1\67\1\51\1\52\1\140"
-        u"\1\62\1\72\1\57\1\53\1\63\1\73\1\60\1\54\1\145\1\70\1\144\1\55"
-        u"\1\71\1\56\1\76\1\103\1\64\1\65\1\107\1\66\1\uffff\1\112\1\110"
-        u"\1\uffff\1\113\1\111\1\77\1\105\1\100\1\102\1\104\1\101\3\uffff"
+        u"\1\23\1\24\1\27\10\uffff\1\45\1\46\1\47\1\50\1\67\1\51\1\52\1\62"
+        u"\1\140\1\57\1\72\1\53\1\63\1\60\1\73\1\54\1\144\1\145\1\70\1\55"
+        u"\1\71\1\56\1\103\1\76\1\64\1\65\1\107\1\66\1\uffff\1\112\1\110"
+        u"\1\uffff\1\113\1\111\1\77\1\105\1\102\1\100\1\104\1\101\3\uffff"
         u"\1\134\1\133\1\135\1\uffff\1\136\1\uffff\1\141\1\142\1\146\24\uffff"
         u"\1\120\4\uffff\1\124\3\uffff\1\33\7\uffff\1\74\1\114\1\75\1\115"
-        u"\3\uffff\1\137\24\uffff\1\15\1\uffff\1\125\5\uffff\1\34\13\uffff"
-        u"\1\30\1\uffff\1\121\6\uffff\1\7\3\uffff\1\12\1\uffff\1\13\2\uffff"
-        u"\1\116\1\16\16\uffff\1\126\10\uffff\1\14\5\uffff\1\31\1\17\3\uffff"
-        u"\1\26\1\uffff\1\36\6\uffff\1\123\1\130\1\uffff\1\5\1\122\1\61\1"
-        u"\21\1\25\1\6\1\uffff\1\131\1\11\2\uffff\1\20\10\uffff\1\42\1\2"
-        u"\3\uffff\1\117\7\uffff\1\10\1\32\1\127\1\22\1\35\1\uffff\1\40\3"
-        u"\uffff\1\37\23\uffff\1\43\6\uffff\1\44\12\uffff\1\41"
+        u"\3\uffff\1\137\24\uffff\1\15\2\uffff\1\125\5\uffff\1\34\13\uffff"
+        u"\1\30\1\121\6\uffff\1\7\3\uffff\1\12\1\uffff\1\13\2\uffff\1\116"
+        u"\1\16\16\uffff\1\126\3\uffff\1\14\11\uffff\1\31\1\uffff\1\17\3"
+        u"\uffff\1\26\1\uffff\1\36\6\uffff\1\123\1\130\1\uffff\1\5\1\6\1"
+        u"\25\1\61\1\21\1\122\1\131\1\uffff\1\11\2\uffff\1\20\10\uffff\1"
+        u"\42\1\2\3\uffff\1\117\7\uffff\1\10\1\32\1\127\1\22\1\35\1\uffff"
+        u"\1\40\3\uffff\1\37\24\uffff\1\43\5\uffff\1\44\12\uffff\1\41"
         )
 
     DFA35_special = DFA.unpack(
@@ -4348,8 +4348,8 @@ class CLexer(Lexer):
         DFA.unpack(u"\1\73"),
         DFA.unpack(u""),
         DFA.unpack(u"\1\76"),
-        DFA.unpack(u"\1\102\1\uffff\1\100\11\uffff\1\101"),
-        DFA.unpack(u"\1\106\1\104\12\uffff\1\105\2\uffff\1\103"),
+        DFA.unpack(u"\1\102\1\uffff\1\101\11\uffff\1\100"),
+        DFA.unpack(u"\1\103\1\105\12\uffff\1\104\2\uffff\1\106"),
         DFA.unpack(u"\1\107"),
         DFA.unpack(u"\1\110"),
         DFA.unpack(u"\1\111"),
@@ -4357,14 +4357,14 @@ class CLexer(Lexer):
         DFA.unpack(u"\1\115\6\uffff\1\113\6\uffff\1\114"),
         DFA.unpack(u"\1\117\7\uffff\1\116"),
         DFA.unpack(u"\1\120"),
-        DFA.unpack(u"\1\122\2\uffff\1\121"),
+        DFA.unpack(u"\1\121\2\uffff\1\122"),
         DFA.unpack(u"\1\124\11\uffff\1\123"),
         DFA.unpack(u"\1\125"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u"\1\131"),
-        DFA.unpack(u"\1\133\4\uffff\1\132"),
+        DFA.unpack(u"\1\132\4\uffff\1\133"),
         DFA.unpack(u"\1\134"),
         DFA.unpack(u"\1\135"),
         DFA.unpack(u"\1\136"),
@@ -4375,18 +4375,18 @@ class CLexer(Lexer):
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u"\1\145"),
-        DFA.unpack(u"\1\147\1\uffff\12\150"),
-        DFA.unpack(u"\1\153\21\uffff\1\152"),
-        DFA.unpack(u"\1\157\17\uffff\1\156\1\155"),
-        DFA.unpack(u"\1\163\4\uffff\1\161\15\uffff\1\162"),
+        DFA.unpack(u"\1\147\1\uffff\12\151"),
+        DFA.unpack(u"\1\152\21\uffff\1\153"),
+        DFA.unpack(u"\1\156\17\uffff\1\157\1\155"),
+        DFA.unpack(u"\1\161\4\uffff\1\162\15\uffff\1\163"),
         DFA.unpack(u"\1\165"),
-        DFA.unpack(u"\1\170\26\uffff\1\167"),
+        DFA.unpack(u"\1\167\26\uffff\1\170"),
         DFA.unpack(u""),
         DFA.unpack(u"\1\173"),
         DFA.unpack(u"\1\175\1\176"),
         DFA.unpack(u"\1\u0081\1\u0080"),
         DFA.unpack(u"\1\u0083"),
-        DFA.unpack(u"\1\u0085\76\uffff\1\u0086"),
+        DFA.unpack(u"\1\u0086\76\uffff\1\u0085"),
         DFA.unpack(u""),
         DFA.unpack(u"\1\u0089"),
         DFA.unpack(u"\1\u008a"),
@@ -4395,9 +4395,9 @@ class CLexer(Lexer):
         DFA.unpack(u""),
         DFA.unpack(u"\47\u008d\1\uffff\uffd7\u008d"),
         DFA.unpack(u"\uffff\u008c"),
-        DFA.unpack(u"\1\150\1\uffff\10\u008f\2\150\12\uffff\3\150\21\uffff"
-        u"\1\u008e\13\uffff\3\150\21\uffff\1\u008e"),
-        DFA.unpack(u"\1\150\1\uffff\12\u0091\12\uffff\3\150\35\uffff\3\150"),
+        DFA.unpack(u"\1\151\1\uffff\10\u008f\2\151\12\uffff\3\151\21\uffff"
+        u"\1\u008e\13\uffff\3\151\21\uffff\1\u008e"),
+        DFA.unpack(u"\1\151\1\uffff\12\u0091\12\uffff\3\151\35\uffff\3\151"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u"\uffff\u0094"),
@@ -4412,11 +4412,11 @@ class CLexer(Lexer):
         DFA.unpack(u"\1\u0097"),
         DFA.unpack(u"\1\u0098"),
         DFA.unpack(u"\1\u0099"),
-        DFA.unpack(u"\1\u009b\22\uffff\1\u009a"),
-        DFA.unpack(u"\1\u009d\20\uffff\1\u009c"),
+        DFA.unpack(u"\1\u009a\20\uffff\1\u009b"),
+        DFA.unpack(u"\1\u009d\22\uffff\1\u009c"),
         DFA.unpack(u"\1\u009e"),
         DFA.unpack(u"\1\u009f"),
-        DFA.unpack(u"\1\u00a0\14\uffff\1\u00a1"),
+        DFA.unpack(u"\1\u00a1\14\uffff\1\u00a0"),
         DFA.unpack(u"\1\u00a2"),
         DFA.unpack(u"\1\u00a3\2\uffff\1\u00a4"),
         DFA.unpack(u"\1\u00a5"),
@@ -4490,10 +4490,10 @@ class CLexer(Lexer):
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\150\1\uffff\10\u008f\2\150\12\uffff\3\150\35\uffff"
-        u"\3\150"),
+        DFA.unpack(u"\1\151\1\uffff\10\u008f\2\151\12\uffff\3\151\35\uffff"
+        u"\3\151"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\150\1\uffff\12\u0091\12\uffff\3\150\35\uffff\3\150"),
+        DFA.unpack(u"\1\151\1\uffff\12\u0091\12\uffff\3\151\35\uffff\3\151"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
@@ -4514,24 +4514,24 @@ class CLexer(Lexer):
         DFA.unpack(u"\1\u00d0"),
         DFA.unpack(u"\1\u00d1"),
         DFA.unpack(u"\1\u00d2"),
-        DFA.unpack(u"\1\u00d4\1\u00d3"),
+        DFA.unpack(u"\1\u00d3\1\u00d4"),
         DFA.unpack(u"\1\u00d5"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
         DFA.unpack(u""),
         DFA.unpack(u"\1\u00d7"),
+        DFA.unpack(u"\1\u00d8"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
-        DFA.unpack(u"\1\u00d9"),
         DFA.unpack(u"\1\u00da"),
         DFA.unpack(u""),
         DFA.unpack(u"\1\u00db"),
         DFA.unpack(u"\1\u00dc"),
         DFA.unpack(u"\1\u00dd"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\u00de"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
-        DFA.unpack(u"\1\u00df"),
         DFA.unpack(u"\1\u00e0"),
         DFA.unpack(u"\1\u00e1"),
         DFA.unpack(u"\1\u00e2"),
@@ -4546,9 +4546,9 @@ class CLexer(Lexer):
         DFA.unpack(u"\1\u00e8"),
         DFA.unpack(u""),
         DFA.unpack(u"\1\u00e9"),
+        DFA.unpack(u"\1\u00ea"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
-        DFA.unpack(u"\1\u00eb"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
         DFA.unpack(u"\1\u00ed"),
@@ -4574,35 +4574,35 @@ class CLexer(Lexer):
         DFA.unpack(u""),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
-        DFA.unpack(u""),
         DFA.unpack(u"\1\u00fe"),
+        DFA.unpack(u""),
         DFA.unpack(u"\1\u00ff"),
         DFA.unpack(u"\1\u0100"),
         DFA.unpack(u"\1\u0101"),
         DFA.unpack(u"\1\u0102"),
-        DFA.unpack(u""),
         DFA.unpack(u"\1\u0103"),
+        DFA.unpack(u""),
         DFA.unpack(u"\1\u0104"),
         DFA.unpack(u"\1\u0105"),
         DFA.unpack(u"\1\u0106"),
         DFA.unpack(u"\1\u0107"),
-        DFA.unpack(u"\1\u0108\17\uffff\1\u0109"),
+        DFA.unpack(u"\1\u0109\17\uffff\1\u0108"),
         DFA.unpack(u"\1\u010a"),
         DFA.unpack(u"\1\u010b"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
         DFA.unpack(u"\1\u010d"),
         DFA.unpack(u"\1\u010e"),
-        DFA.unpack(u""),
         DFA.unpack(u"\1\u010f"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u0110"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
+        u"\32\74"),
         DFA.unpack(u"\1\u0111"),
         DFA.unpack(u"\1\u0112"),
         DFA.unpack(u"\1\u0113"),
         DFA.unpack(u"\1\u0114"),
-        DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
-        u"\32\74"),
+        DFA.unpack(u"\1\u0115"),
         DFA.unpack(u""),
         DFA.unpack(u"\1\u0116"),
         DFA.unpack(u"\1\u0117"),
@@ -4610,9 +4610,9 @@ class CLexer(Lexer):
         DFA.unpack(u""),
         DFA.unpack(u"\1\u0119"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u011a"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
+        DFA.unpack(u"\1\u011b"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
@@ -4639,6 +4639,7 @@ class CLexer(Lexer):
         DFA.unpack(u"\1\u012b"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
+        DFA.unpack(u""),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
@@ -4649,15 +4650,14 @@ class CLexer(Lexer):
         u"\32\74"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
-        DFA.unpack(u""),
-        DFA.unpack(u"\1\u0132"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
+        DFA.unpack(u"\1\u0133"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
         DFA.unpack(u"\1\u0135"),
-        DFA.unpack(u"\1\u0136"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\u0136"),
         DFA.unpack(u""),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
@@ -4683,8 +4683,8 @@ class CLexer(Lexer):
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u0142"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\u0142"),
         DFA.unpack(u""),
         DFA.unpack(u"\1\u0143"),
         DFA.unpack(u"\1\u0144"),
@@ -4745,12 +4745,12 @@ class CLexer(Lexer):
         DFA.unpack(u"\1\u0168"),
         DFA.unpack(u"\1\u0169"),
         DFA.unpack(u"\1\u016a"),
+        DFA.unpack(u"\1\u016b"),
         DFA.unpack(u"\1\74\13\uffff\12\74\7\uffff\32\74\4\uffff\1\74\1\uffff"
         u"\32\74"),
-        DFA.unpack(u"\1\u016c"),
         DFA.unpack(u"\1\u016d"),
-        DFA.unpack(u""),
         DFA.unpack(u"\1\u016e"),
+        DFA.unpack(u""),
         DFA.unpack(u"\1\u016f"),
         DFA.unpack(u"\1\u0170"),
         DFA.unpack(u"\1\u0171"),
index d9bca13..fbc1a24 100644 (file)
@@ -1,4 +1,4 @@
-# $ANTLR 3.0.1 C.g 2008-01-30 14:26:37
+# $ANTLR 3.0.1 C.g 2008-04-08 11:34:27
 
 from antlr3 import *
 from antlr3.compat import set, frozenset
@@ -12,28 +12,28 @@ import FileProfile
 HIDDEN = BaseRecognizer.HIDDEN
 
 # token types
-CHARACTER_LITERAL=8
+BS=20
+LINE_COMMENT=23
+FloatTypeSuffix=16
+IntegerTypeSuffix=14
 LETTER=11
+OCTAL_LITERAL=6
+CHARACTER_LITERAL=8
 Exponent=15
-DECIMAL_LITERAL=7
-IntegerTypeSuffix=14
-UnicodeVocabulary=21
+EOF=-1
 HexDigit=13
-BS=20
+STRING_LITERAL=9
 WS=19
-LINE_COMMAND=24
-COMMENT=22
-LINE_COMMENT=23
-OCTAL_LITERAL=6
-HEX_LITERAL=5
 FLOATING_POINT_LITERAL=10
+IDENTIFIER=4
 UnicodeEscape=18
+LINE_COMMAND=24
+UnicodeVocabulary=21
+HEX_LITERAL=5
+COMMENT=22
+DECIMAL_LITERAL=7
 EscapeSequence=12
-EOF=-1
-STRING_LITERAL=9
 OctalEscape=17
-IDENTIFIER=4
-FloatTypeSuffix=16
 
 # token names
 tokenNames = [
@@ -65,6 +65,9 @@ class function_definition_scope(object):
         self.LBOffset = None
         self.DeclLine = None
         self.DeclOffset = None
+class postfix_expression_scope(object):
+    def __init__(self):
+        self.FuncCallText = None
 
 
 class CParser(Parser):
@@ -76,6 +79,7 @@ class CParser(Parser):
         self.ruleMemo = {}
 
        self.function_definition_stack = []
+       self.postfix_expression_stack = []
 
 
 
@@ -573,95 +577,95 @@ class CParser(Parser):
                     alt4 = 1
                 elif LA4 == IDENTIFIER:
                     LA4 = self.input.LA(2)
-                    if LA4 == 61:
+                    if LA4 == 65:
+                        alt4 = 1
+                    elif LA4 == 58:
                         LA4_21 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33:
+                    elif LA4 == 59:
+                        LA4_22 = self.input.LA(3)
+
+                        if (self.synpred7()) :
+                            alt4 = 1
+                    elif LA4 == 60:
                         LA4_23 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 34:
+                    elif LA4 == IDENTIFIER:
                         LA4_24 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 35:
+                    elif LA4 == 61:
                         LA4_25 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 36:
+                    elif LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33:
                         LA4_26 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 37:
+                    elif LA4 == 34:
                         LA4_27 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 38:
+                    elif LA4 == 35:
                         LA4_28 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 39:
+                    elif LA4 == 36:
                         LA4_29 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 40:
+                    elif LA4 == 37:
                         LA4_30 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 41:
+                    elif LA4 == 38:
                         LA4_31 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 42:
+                    elif LA4 == 39:
                         LA4_32 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 45 or LA4 == 46:
+                    elif LA4 == 40:
                         LA4_33 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 48:
+                    elif LA4 == 41:
                         LA4_34 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == IDENTIFIER:
+                    elif LA4 == 42:
                         LA4_35 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 58:
+                    elif LA4 == 45 or LA4 == 46:
                         LA4_36 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    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)
+                    elif LA4 == 48:
+                        LA4_37 = 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)
+                        LA4_38 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
@@ -860,13 +864,13 @@ class CParser(Parser):
                     elif LA7 == IDENTIFIER:
                         LA7_13 = self.input.LA(2)
 
-                        if (LA7_13 == 61) :
-                            LA7_21 = self.input.LA(3)
+                        if (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_13 == 61) :
+                            LA7_25 = self.input.LA(3)
 
                             if (self.synpred10()) :
                                 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)
 
@@ -1383,25 +1387,31 @@ class CParser(Parser):
                     if self.failed:
                         return 
                     if self.backtracking == 0:
-                        self.StoreStructUnionDefinition(s.start.line, s.start.charPositionInLine, s.stop.line, s.stop.charPositionInLine, self.input.toString(s.start,s.stop))
+                          \r
+                        if s.stop != None:\r
+                          self.StoreStructUnionDefinition(s.start.line, s.start.charPositionInLine, s.stop.line, s.stop.charPositionInLine, self.input.toString(s.start,s.stop))\r
+                               
 
 
 
                 elif alt13 == 11:
-                    # C.g:164:4: e= enum_specifier
-                    self.following.append(self.FOLLOW_enum_specifier_in_type_specifier422)
+                    # C.g:168:4: e= enum_specifier
+                    self.following.append(self.FOLLOW_enum_specifier_in_type_specifier423)
                     e = self.enum_specifier()
                     self.following.pop()
                     if self.failed:
                         return 
                     if self.backtracking == 0:
-                        self.StoreEnumerationDefinition(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start,e.stop))
+                          \r
+                        if e.stop != None:\r
+                          self.StoreEnumerationDefinition(e.start.line, e.start.charPositionInLine, e.stop.line, e.stop.charPositionInLine, self.input.toString(e.start,e.stop))\r
+                               
 
 
 
                 elif alt13 == 12:
-                    # C.g:165:4: ( IDENTIFIER ( type_qualifier )* declarator )=> type_id
-                    self.following.append(self.FOLLOW_type_id_in_type_specifier439)
+                    # C.g:173:4: ( IDENTIFIER ( type_qualifier )* declarator )=> type_id
+                    self.following.append(self.FOLLOW_type_id_in_type_specifier441)
                     self.type_id()
                     self.following.pop()
                     if self.failed:
@@ -1424,7 +1434,7 @@ class CParser(Parser):
 
 
     # $ANTLR start type_id
-    # C.g:168:1: type_id : IDENTIFIER ;
+    # C.g:176:1: type_id : IDENTIFIER ;
     def type_id(self, ):
 
         type_id_StartIndex = self.input.index()
@@ -1433,9 +1443,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 10):
                     return 
 
-                # C.g:169:5: ( IDENTIFIER )
-                # C.g:169:9: IDENTIFIER
-                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_type_id455)
+                # C.g:177:5: ( IDENTIFIER )
+                # C.g:177:9: IDENTIFIER
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_type_id457)
                 if self.failed:
                     return 
 
@@ -1463,7 +1473,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_or_union_specifier
-    # C.g:173:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );
+    # C.g:181:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );
     def struct_or_union_specifier(self, ):
 
         retval = self.struct_or_union_specifier_return()
@@ -1474,7 +1484,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 11):
                     return retval
 
-                # C.g:175:2: ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER )
+                # C.g:183:2: ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER )
                 alt15 = 2
                 LA15_0 = self.input.LA(1)
 
@@ -1493,7 +1503,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return retval
 
-                            nvae = NoViableAltException("173:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 2, self.input)
+                            nvae = NoViableAltException("181:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 2, self.input)
 
                             raise nvae
 
@@ -1504,7 +1514,7 @@ class CParser(Parser):
                             self.failed = True
                             return retval
 
-                        nvae = NoViableAltException("173:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 1, self.input)
+                        nvae = NoViableAltException("181:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 1, self.input)
 
                         raise nvae
 
@@ -1513,18 +1523,18 @@ class CParser(Parser):
                         self.failed = True
                         return retval
 
-                    nvae = NoViableAltException("173:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 0, self.input)
+                    nvae = NoViableAltException("181:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 15, 0, self.input)
 
                     raise nvae
 
                 if alt15 == 1:
-                    # C.g:175:4: struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}'
-                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier482)
+                    # C.g:183:4: struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}'
+                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier484)
                     self.struct_or_union()
                     self.following.pop()
                     if self.failed:
                         return retval
-                    # C.g:175:20: ( IDENTIFIER )?
+                    # C.g:183:20: ( IDENTIFIER )?
                     alt14 = 2
                     LA14_0 = self.input.LA(1)
 
@@ -1532,33 +1542,33 @@ class CParser(Parser):
                         alt14 = 1
                     if alt14 == 1:
                         # C.g:0:0: IDENTIFIER
-                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier484)
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier486)
                         if self.failed:
                             return retval
 
 
 
-                    self.match(self.input, 43, self.FOLLOW_43_in_struct_or_union_specifier487)
+                    self.match(self.input, 43, self.FOLLOW_43_in_struct_or_union_specifier489)
                     if self.failed:
                         return retval
-                    self.following.append(self.FOLLOW_struct_declaration_list_in_struct_or_union_specifier489)
+                    self.following.append(self.FOLLOW_struct_declaration_list_in_struct_or_union_specifier491)
                     self.struct_declaration_list()
                     self.following.pop()
                     if self.failed:
                         return retval
-                    self.match(self.input, 44, self.FOLLOW_44_in_struct_or_union_specifier491)
+                    self.match(self.input, 44, self.FOLLOW_44_in_struct_or_union_specifier493)
                     if self.failed:
                         return retval
 
 
                 elif alt15 == 2:
-                    # C.g:176:4: struct_or_union IDENTIFIER
-                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier496)
+                    # C.g:184:4: struct_or_union IDENTIFIER
+                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier498)
                     self.struct_or_union()
                     self.following.pop()
                     if self.failed:
                         return retval
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier498)
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier500)
                     if self.failed:
                         return retval
 
@@ -1581,7 +1591,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_or_union
-    # C.g:179:1: struct_or_union : ( 'struct' | 'union' );
+    # C.g:187:1: struct_or_union : ( 'struct' | 'union' );
     def struct_or_union(self, ):
 
         struct_or_union_StartIndex = self.input.index()
@@ -1590,7 +1600,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 12):
                     return 
 
-                # C.g:180:2: ( 'struct' | 'union' )
+                # C.g:188:2: ( 'struct' | 'union' )
                 # C.g:
                 if (45 <= self.input.LA(1) <= 46):
                     self.input.consume();
@@ -1628,7 +1638,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declaration_list
-    # C.g:184:1: struct_declaration_list : ( struct_declaration )+ ;
+    # C.g:192:1: struct_declaration_list : ( struct_declaration )+ ;
     def struct_declaration_list(self, ):
 
         struct_declaration_list_StartIndex = self.input.index()
@@ -1637,9 +1647,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 13):
                     return 
 
-                # C.g:185:2: ( ( struct_declaration )+ )
-                # C.g:185:4: ( struct_declaration )+
-                # C.g:185:4: ( struct_declaration )+
+                # C.g:193:2: ( ( struct_declaration )+ )
+                # C.g:193:4: ( struct_declaration )+
+                # C.g:193:4: ( struct_declaration )+
                 cnt16 = 0
                 while True: #loop16
                     alt16 = 2
@@ -1651,7 +1661,7 @@ class CParser(Parser):
 
                     if alt16 == 1:
                         # C.g:0:0: struct_declaration
-                        self.following.append(self.FOLLOW_struct_declaration_in_struct_declaration_list525)
+                        self.following.append(self.FOLLOW_struct_declaration_in_struct_declaration_list527)
                         self.struct_declaration()
                         self.following.pop()
                         if self.failed:
@@ -1691,7 +1701,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declaration
-    # C.g:188:1: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ;
+    # C.g:196:1: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ;
     def struct_declaration(self, ):
 
         struct_declaration_StartIndex = self.input.index()
@@ -1700,19 +1710,19 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 14):
                     return 
 
-                # C.g:189:2: ( specifier_qualifier_list struct_declarator_list ';' )
-                # C.g:189:4: specifier_qualifier_list struct_declarator_list ';'
-                self.following.append(self.FOLLOW_specifier_qualifier_list_in_struct_declaration537)
+                # C.g:197:2: ( specifier_qualifier_list struct_declarator_list ';' )
+                # C.g:197:4: specifier_qualifier_list struct_declarator_list ';'
+                self.following.append(self.FOLLOW_specifier_qualifier_list_in_struct_declaration539)
                 self.specifier_qualifier_list()
                 self.following.pop()
                 if self.failed:
                     return 
-                self.following.append(self.FOLLOW_struct_declarator_list_in_struct_declaration539)
+                self.following.append(self.FOLLOW_struct_declarator_list_in_struct_declaration541)
                 self.struct_declarator_list()
                 self.following.pop()
                 if self.failed:
                     return 
-                self.match(self.input, 25, self.FOLLOW_25_in_struct_declaration541)
+                self.match(self.input, 25, self.FOLLOW_25_in_struct_declaration543)
                 if self.failed:
                     return 
 
@@ -1734,7 +1744,7 @@ class CParser(Parser):
 
 
     # $ANTLR start specifier_qualifier_list
-    # C.g:192:1: specifier_qualifier_list : ( type_qualifier | type_specifier )+ ;
+    # C.g:200:1: specifier_qualifier_list : ( type_qualifier | type_specifier )+ ;
     def specifier_qualifier_list(self, ):
 
         specifier_qualifier_list_StartIndex = self.input.index()
@@ -1743,9 +1753,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 15):
                     return 
 
-                # C.g:193:2: ( ( type_qualifier | type_specifier )+ )
-                # C.g:193:4: ( type_qualifier | type_specifier )+
-                # C.g:193:4: ( type_qualifier | type_specifier )+
+                # C.g:201:2: ( ( type_qualifier | type_specifier )+ )
+                # C.g:201:4: ( type_qualifier | type_specifier )+
+                # C.g:201:4: ( type_qualifier | type_specifier )+
                 cnt17 = 0
                 while True: #loop17
                     alt17 = 3
@@ -1773,29 +1783,29 @@ class CParser(Parser):
 
                     elif LA17 == IDENTIFIER:
                         LA17 = self.input.LA(2)
-                        if LA17 == 63:
-                            LA17_89 = self.input.LA(3)
+                        if LA17 == EOF or LA17 == IDENTIFIER or LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 41 or LA17 == 42 or LA17 == 45 or LA17 == 46 or LA17 == 48 or LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57 or LA17 == 58 or LA17 == 59 or LA17 == 60 or LA17 == 62 or LA17 == 65:
+                            alt17 = 2
+                        elif LA17 == 61:
+                            LA17_94 = self.input.LA(3)
 
                             if (self.synpred40()) :
                                 alt17 = 2
 
 
-                        elif LA17 == 61:
-                            LA17_90 = self.input.LA(3)
+                        elif LA17 == 47:
+                            LA17_95 = self.input.LA(3)
 
                             if (self.synpred40()) :
                                 alt17 = 2
 
 
-                        elif LA17 == 47:
-                            LA17_91 = self.input.LA(3)
+                        elif LA17 == 63:
+                            LA17_96 = self.input.LA(3)
 
                             if (self.synpred40()) :
                                 alt17 = 2
 
 
-                        elif LA17 == EOF or LA17 == IDENTIFIER or LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 41 or LA17 == 42 or LA17 == 45 or LA17 == 46 or LA17 == 48 or LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57 or LA17 == 58 or LA17 == 59 or LA17 == 60 or LA17 == 62 or LA17 == 65:
-                            alt17 = 2
 
                     elif LA17 == 49 or LA17 == 50 or LA17 == 51 or LA17 == 52 or LA17 == 53 or LA17 == 54 or LA17 == 55 or LA17 == 56 or LA17 == 57:
                         alt17 = 1
@@ -1803,8 +1813,8 @@ class CParser(Parser):
                         alt17 = 2
 
                     if alt17 == 1:
-                        # C.g:193:6: type_qualifier
-                        self.following.append(self.FOLLOW_type_qualifier_in_specifier_qualifier_list554)
+                        # C.g:201:6: type_qualifier
+                        self.following.append(self.FOLLOW_type_qualifier_in_specifier_qualifier_list556)
                         self.type_qualifier()
                         self.following.pop()
                         if self.failed:
@@ -1812,8 +1822,8 @@ class CParser(Parser):
 
 
                     elif alt17 == 2:
-                        # C.g:193:23: type_specifier
-                        self.following.append(self.FOLLOW_type_specifier_in_specifier_qualifier_list558)
+                        # C.g:201:23: type_specifier
+                        self.following.append(self.FOLLOW_type_specifier_in_specifier_qualifier_list560)
                         self.type_specifier()
                         self.following.pop()
                         if self.failed:
@@ -1853,7 +1863,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declarator_list
-    # C.g:196:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ;
+    # C.g:204:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ;
     def struct_declarator_list(self, ):
 
         struct_declarator_list_StartIndex = self.input.index()
@@ -1862,14 +1872,14 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 16):
                     return 
 
-                # C.g:197:2: ( struct_declarator ( ',' struct_declarator )* )
-                # C.g:197:4: struct_declarator ( ',' struct_declarator )*
-                self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list572)
+                # C.g:205:2: ( struct_declarator ( ',' struct_declarator )* )
+                # C.g:205:4: struct_declarator ( ',' struct_declarator )*
+                self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list574)
                 self.struct_declarator()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:197:22: ( ',' struct_declarator )*
+                # C.g:205:22: ( ',' struct_declarator )*
                 while True: #loop18
                     alt18 = 2
                     LA18_0 = self.input.LA(1)
@@ -1879,11 +1889,11 @@ class CParser(Parser):
 
 
                     if alt18 == 1:
-                        # C.g:197:23: ',' struct_declarator
-                        self.match(self.input, 27, self.FOLLOW_27_in_struct_declarator_list575)
+                        # C.g:205:23: ',' struct_declarator
+                        self.match(self.input, 27, self.FOLLOW_27_in_struct_declarator_list577)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list577)
+                        self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list579)
                         self.struct_declarator()
                         self.following.pop()
                         if self.failed:
@@ -1913,7 +1923,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declarator
-    # C.g:200:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );
+    # C.g:208:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );
     def struct_declarator(self, ):
 
         struct_declarator_StartIndex = self.input.index()
@@ -1922,7 +1932,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 17):
                     return 
 
-                # C.g:201:2: ( declarator ( ':' constant_expression )? | ':' constant_expression )
+                # C.g:209:2: ( declarator ( ':' constant_expression )? | ':' constant_expression )
                 alt20 = 2
                 LA20_0 = self.input.LA(1)
 
@@ -1935,29 +1945,29 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("200:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );", 20, 0, self.input)
+                    nvae = NoViableAltException("208:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );", 20, 0, self.input)
 
                     raise nvae
 
                 if alt20 == 1:
-                    # C.g:201:4: declarator ( ':' constant_expression )?
-                    self.following.append(self.FOLLOW_declarator_in_struct_declarator590)
+                    # C.g:209:4: declarator ( ':' constant_expression )?
+                    self.following.append(self.FOLLOW_declarator_in_struct_declarator592)
                     self.declarator()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:201:15: ( ':' constant_expression )?
+                    # C.g:209:15: ( ':' constant_expression )?
                     alt19 = 2
                     LA19_0 = self.input.LA(1)
 
                     if (LA19_0 == 47) :
                         alt19 = 1
                     if alt19 == 1:
-                        # C.g:201:16: ':' constant_expression
-                        self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator593)
+                        # C.g:209:16: ':' constant_expression
+                        self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator595)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_constant_expression_in_struct_declarator595)
+                        self.following.append(self.FOLLOW_constant_expression_in_struct_declarator597)
                         self.constant_expression()
                         self.following.pop()
                         if self.failed:
@@ -1968,11 +1978,11 @@ class CParser(Parser):
 
 
                 elif alt20 == 2:
-                    # C.g:202:4: ':' constant_expression
-                    self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator602)
+                    # C.g:210:4: ':' constant_expression
+                    self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator604)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_constant_expression_in_struct_declarator604)
+                    self.following.append(self.FOLLOW_constant_expression_in_struct_declarator606)
                     self.constant_expression()
                     self.following.pop()
                     if self.failed:
@@ -2001,7 +2011,7 @@ class CParser(Parser):
 
 
     # $ANTLR start enum_specifier
-    # C.g:205:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );
+    # C.g:213:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );
     def enum_specifier(self, ):
 
         retval = self.enum_specifier_return()
@@ -2012,37 +2022,37 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 18):
                     return retval
 
-                # C.g:207:2: ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER )
+                # C.g:215:2: ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER )
                 alt23 = 3
                 LA23_0 = self.input.LA(1)
 
                 if (LA23_0 == 48) :
                     LA23_1 = self.input.LA(2)
 
-                    if (LA23_1 == IDENTIFIER) :
-                        LA23_2 = self.input.LA(3)
+                    if (LA23_1 == 43) :
+                        alt23 = 1
+                    elif (LA23_1 == IDENTIFIER) :
+                        LA23_3 = self.input.LA(3)
 
-                        if (LA23_2 == 43) :
+                        if (LA23_3 == 43) :
                             alt23 = 2
-                        elif (LA23_2 == EOF or LA23_2 == IDENTIFIER or LA23_2 == 25 or LA23_2 == 27 or (29 <= LA23_2 <= 42) or (45 <= LA23_2 <= 63) or LA23_2 == 65) :
+                        elif (LA23_3 == EOF or LA23_3 == IDENTIFIER or LA23_3 == 25 or LA23_3 == 27 or (29 <= LA23_3 <= 42) or (45 <= LA23_3 <= 63) or LA23_3 == 65) :
                             alt23 = 3
                         else:
                             if self.backtracking > 0:
                                 self.failed = True
                                 return retval
 
-                            nvae = NoViableAltException("205:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 2, self.input)
+                            nvae = NoViableAltException("213:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 3, self.input)
 
                             raise nvae
 
-                    elif (LA23_1 == 43) :
-                        alt23 = 1
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return retval
 
-                        nvae = NoViableAltException("205:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 1, self.input)
+                        nvae = NoViableAltException("213:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 1, self.input)
 
                         raise nvae
 
@@ -2051,24 +2061,24 @@ class CParser(Parser):
                         self.failed = True
                         return retval
 
-                    nvae = NoViableAltException("205:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 0, self.input)
+                    nvae = NoViableAltException("213:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}' | 'enum' IDENTIFIER );", 23, 0, self.input)
 
                     raise nvae
 
                 if alt23 == 1:
-                    # C.g:207:4: 'enum' '{' enumerator_list ( ',' )? '}'
-                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier622)
+                    # C.g:215:4: 'enum' '{' enumerator_list ( ',' )? '}'
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier624)
                     if self.failed:
                         return retval
-                    self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier624)
+                    self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier626)
                     if self.failed:
                         return retval
-                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier626)
+                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier628)
                     self.enumerator_list()
                     self.following.pop()
                     if self.failed:
                         return retval
-                    # C.g:207:31: ( ',' )?
+                    # C.g:215:31: ( ',' )?
                     alt21 = 2
                     LA21_0 = self.input.LA(1)
 
@@ -2076,34 +2086,34 @@ class CParser(Parser):
                         alt21 = 1
                     if alt21 == 1:
                         # C.g:0:0: ','
-                        self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier628)
+                        self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier630)
                         if self.failed:
                             return retval
 
 
 
-                    self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier631)
+                    self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier633)
                     if self.failed:
                         return retval
 
 
                 elif alt23 == 2:
-                    # C.g:208:4: 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}'
-                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier636)
+                    # C.g:216:4: 'enum' IDENTIFIER '{' enumerator_list ( ',' )? '}'
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier638)
                     if self.failed:
                         return retval
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier638)
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier640)
                     if self.failed:
                         return retval
-                    self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier640)
+                    self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier642)
                     if self.failed:
                         return retval
-                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier642)
+                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier644)
                     self.enumerator_list()
                     self.following.pop()
                     if self.failed:
                         return retval
-                    # C.g:208:42: ( ',' )?
+                    # C.g:216:42: ( ',' )?
                     alt22 = 2
                     LA22_0 = self.input.LA(1)
 
@@ -2111,23 +2121,23 @@ class CParser(Parser):
                         alt22 = 1
                     if alt22 == 1:
                         # C.g:0:0: ','
-                        self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier644)
+                        self.match(self.input, 27, self.FOLLOW_27_in_enum_specifier646)
                         if self.failed:
                             return retval
 
 
 
-                    self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier647)
+                    self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier649)
                     if self.failed:
                         return retval
 
 
                 elif alt23 == 3:
-                    # C.g:209:4: 'enum' IDENTIFIER
-                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier652)
+                    # C.g:217:4: 'enum' IDENTIFIER
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier654)
                     if self.failed:
                         return retval
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier654)
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier656)
                     if self.failed:
                         return retval
 
@@ -2150,7 +2160,7 @@ class CParser(Parser):
 
 
     # $ANTLR start enumerator_list
-    # C.g:212:1: enumerator_list : enumerator ( ',' enumerator )* ;
+    # C.g:220:1: enumerator_list : enumerator ( ',' enumerator )* ;
     def enumerator_list(self, ):
 
         enumerator_list_StartIndex = self.input.index()
@@ -2159,14 +2169,14 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 19):
                     return 
 
-                # C.g:213:2: ( enumerator ( ',' enumerator )* )
-                # C.g:213:4: enumerator ( ',' enumerator )*
-                self.following.append(self.FOLLOW_enumerator_in_enumerator_list665)
+                # C.g:221:2: ( enumerator ( ',' enumerator )* )
+                # C.g:221:4: enumerator ( ',' enumerator )*
+                self.following.append(self.FOLLOW_enumerator_in_enumerator_list667)
                 self.enumerator()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:213:15: ( ',' enumerator )*
+                # C.g:221:15: ( ',' enumerator )*
                 while True: #loop24
                     alt24 = 2
                     LA24_0 = self.input.LA(1)
@@ -2181,11 +2191,11 @@ class CParser(Parser):
 
 
                     if alt24 == 1:
-                        # C.g:213:16: ',' enumerator
-                        self.match(self.input, 27, self.FOLLOW_27_in_enumerator_list668)
+                        # C.g:221:16: ',' enumerator
+                        self.match(self.input, 27, self.FOLLOW_27_in_enumerator_list670)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_enumerator_in_enumerator_list670)
+                        self.following.append(self.FOLLOW_enumerator_in_enumerator_list672)
                         self.enumerator()
                         self.following.pop()
                         if self.failed:
@@ -2215,7 +2225,7 @@ class CParser(Parser):
 
 
     # $ANTLR start enumerator
-    # C.g:216:1: enumerator : IDENTIFIER ( '=' constant_expression )? ;
+    # C.g:224:1: enumerator : IDENTIFIER ( '=' constant_expression )? ;
     def enumerator(self, ):
 
         enumerator_StartIndex = self.input.index()
@@ -2224,23 +2234,23 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 20):
                     return 
 
-                # C.g:217:2: ( IDENTIFIER ( '=' constant_expression )? )
-                # C.g:217:4: IDENTIFIER ( '=' constant_expression )?
-                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enumerator683)
+                # C.g:225:2: ( IDENTIFIER ( '=' constant_expression )? )
+                # C.g:225:4: IDENTIFIER ( '=' constant_expression )?
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enumerator685)
                 if self.failed:
                     return 
-                # C.g:217:15: ( '=' constant_expression )?
+                # C.g:225:15: ( '=' constant_expression )?
                 alt25 = 2
                 LA25_0 = self.input.LA(1)
 
                 if (LA25_0 == 28) :
                     alt25 = 1
                 if alt25 == 1:
-                    # C.g:217:16: '=' constant_expression
-                    self.match(self.input, 28, self.FOLLOW_28_in_enumerator686)
+                    # C.g:225:16: '=' constant_expression
+                    self.match(self.input, 28, self.FOLLOW_28_in_enumerator688)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_constant_expression_in_enumerator688)
+                    self.following.append(self.FOLLOW_constant_expression_in_enumerator690)
                     self.constant_expression()
                     self.following.pop()
                     if self.failed:
@@ -2267,7 +2277,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' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' );
+    # C.g:228: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()
@@ -2276,7 +2286,7 @@ 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' | 'EFIAPI' | 'EFI_BOOTSERVICE' | 'EFI_RUNTIMESERVICE' )
+                # C.g:229: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) <= 60):
                     self.input.consume();
@@ -2320,7 +2330,7 @@ class CParser(Parser):
 
 
     # $ANTLR start declarator
-    # C.g:235:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );
+    # C.g:243:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );
     def declarator(self, ):
 
         retval = self.declarator_return()
@@ -2331,7 +2341,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 22):
                     return retval
 
-                # C.g:236:2: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer )
+                # C.g:244:2: ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer )
                 alt30 = 2
                 LA30_0 = self.input.LA(1)
 
@@ -2347,7 +2357,7 @@ class CParser(Parser):
                             self.failed = True
                             return retval
 
-                        nvae = NoViableAltException("235:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 1, self.input)
+                        nvae = NoViableAltException("243:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 1, self.input)
 
                         raise nvae
 
@@ -2358,13 +2368,13 @@ class CParser(Parser):
                         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("243:1: declarator : ( ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator | pointer );", 30, 0, self.input)
 
                     raise nvae
 
                 if alt30 == 1:
-                    # C.g:236:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator
-                    # C.g:236:4: ( pointer )?
+                    # C.g:244:4: ( pointer )? ( 'EFIAPI' )? ( 'EFI_BOOTSERVICE' )? ( 'EFI_RUNTIMESERVICE' )? direct_declarator
+                    # C.g:244:4: ( pointer )?
                     alt26 = 2
                     LA26_0 = self.input.LA(1)
 
@@ -2372,7 +2382,7 @@ class CParser(Parser):
                         alt26 = 1
                     if alt26 == 1:
                         # C.g:0:0: pointer
-                        self.following.append(self.FOLLOW_pointer_in_declarator767)
+                        self.following.append(self.FOLLOW_pointer_in_declarator769)
                         self.pointer()
                         self.following.pop()
                         if self.failed:
@@ -2380,49 +2390,49 @@ class CParser(Parser):
 
 
 
-                    # C.g:236:13: ( 'EFIAPI' )?
+                    # C.g:244:13: ( 'EFIAPI' )?
                     alt27 = 2
                     LA27_0 = self.input.LA(1)
 
                     if (LA27_0 == 58) :
                         alt27 = 1
                     if alt27 == 1:
-                        # C.g:236:14: 'EFIAPI'
-                        self.match(self.input, 58, self.FOLLOW_58_in_declarator771)
+                        # C.g:244:14: 'EFIAPI'
+                        self.match(self.input, 58, self.FOLLOW_58_in_declarator773)
                         if self.failed:
                             return retval
 
 
 
-                    # C.g:236:25: ( 'EFI_BOOTSERVICE' )?
+                    # C.g:244:25: ( 'EFI_BOOTSERVICE' )?
                     alt28 = 2
                     LA28_0 = self.input.LA(1)
 
                     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)
+                        # C.g:244:26: 'EFI_BOOTSERVICE'
+                        self.match(self.input, 59, self.FOLLOW_59_in_declarator778)
                         if self.failed:
                             return retval
 
 
 
-                    # C.g:236:46: ( 'EFI_RUNTIMESERVICE' )?
+                    # C.g:244:46: ( 'EFI_RUNTIMESERVICE' )?
                     alt29 = 2
                     LA29_0 = self.input.LA(1)
 
                     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)
+                        # C.g:244:47: 'EFI_RUNTIMESERVICE'
+                        self.match(self.input, 60, self.FOLLOW_60_in_declarator783)
                         if self.failed:
                             return retval
 
 
 
-                    self.following.append(self.FOLLOW_direct_declarator_in_declarator785)
+                    self.following.append(self.FOLLOW_direct_declarator_in_declarator787)
                     self.direct_declarator()
                     self.following.pop()
                     if self.failed:
@@ -2430,8 +2440,8 @@ class CParser(Parser):
 
 
                 elif alt30 == 2:
-                    # C.g:238:4: pointer
-                    self.following.append(self.FOLLOW_pointer_in_declarator791)
+                    # C.g:246:4: pointer
+                    self.following.append(self.FOLLOW_pointer_in_declarator793)
                     self.pointer()
                     self.following.pop()
                     if self.failed:
@@ -2456,7 +2466,7 @@ class CParser(Parser):
 
 
     # $ANTLR start direct_declarator
-    # C.g:241:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );
+    # C.g:249:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );
     def direct_declarator(self, ):
 
         direct_declarator_StartIndex = self.input.index()
@@ -2465,7 +2475,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 23):
                     return 
 
-                # C.g:242:2: ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ )
+                # C.g:250:2: ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ )
                 alt34 = 2
                 LA34_0 = self.input.LA(1)
 
@@ -2478,16 +2488,16 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("241:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );", 34, 0, self.input)
+                    nvae = NoViableAltException("249:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+ );", 34, 0, self.input)
 
                     raise nvae
 
                 if alt34 == 1:
-                    # C.g:242:4: IDENTIFIER ( declarator_suffix )*
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator802)
+                    # C.g:250:4: IDENTIFIER ( declarator_suffix )*
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator804)
                     if self.failed:
                         return 
-                    # C.g:242:15: ( declarator_suffix )*
+                    # C.g:250:15: ( declarator_suffix )*
                     while True: #loop31
                         alt31 = 2
                         LA31_0 = self.input.LA(1)
@@ -2501,127 +2511,127 @@ class CParser(Parser):
                                     alt31 = 1
 
 
-                            elif LA31 == 29 or LA31 == 30 or LA31 == 31 or LA31 == 32 or LA31 == 33:
+                            elif LA31 == 58:
                                 LA31_31 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 34:
+                            elif LA31 == 65:
                                 LA31_32 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 35:
+                            elif LA31 == 59:
                                 LA31_33 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 36:
+                            elif LA31 == 60:
                                 LA31_34 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 37:
+                            elif LA31 == IDENTIFIER:
                                 LA31_35 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 38:
-                                LA31_36 = self.input.LA(3)
-
-                                if (self.synpred66()) :
-                                    alt31 = 1
-
-
-                            elif LA31 == 39:
+                            elif LA31 == 29 or LA31 == 30 or LA31 == 31 or LA31 == 32 or LA31 == 33:
                                 LA31_37 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 40:
+                            elif LA31 == 34:
                                 LA31_38 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 41:
+                            elif LA31 == 35:
                                 LA31_39 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 42:
+                            elif LA31 == 36:
                                 LA31_40 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 45 or LA31 == 46:
+                            elif LA31 == 37:
                                 LA31_41 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 48:
+                            elif LA31 == 38:
                                 LA31_42 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == IDENTIFIER:
+                            elif LA31 == 39:
                                 LA31_43 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 58:
+                            elif LA31 == 40:
                                 LA31_44 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 65:
+                            elif LA31 == 41:
                                 LA31_45 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 59:
-                                LA31_48 = self.input.LA(3)
+                            elif LA31 == 42:
+                                LA31_46 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
-                            elif LA31 == 60:
-                                LA31_49 = self.input.LA(3)
+                            elif LA31 == 45 or LA31 == 46:
+                                LA31_47 = self.input.LA(3)
+
+                                if (self.synpred66()) :
+                                    alt31 = 1
+
+
+                            elif LA31 == 48:
+                                LA31_48 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
 
 
                             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)
+                                LA31_49 = self.input.LA(3)
 
                                 if (self.synpred66()) :
                                     alt31 = 1
@@ -2726,7 +2736,7 @@ class CParser(Parser):
 
                         if alt31 == 1:
                             # C.g:0:0: declarator_suffix
-                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator804)
+                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator806)
                             self.declarator_suffix()
                             self.following.pop()
                             if self.failed:
@@ -2740,11 +2750,11 @@ class CParser(Parser):
 
 
                 elif alt34 == 2:
-                    # C.g:243:4: '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+
-                    self.match(self.input, 61, self.FOLLOW_61_in_direct_declarator810)
+                    # C.g:251:4: '(' ( 'EFIAPI' )? declarator ')' ( declarator_suffix )+
+                    self.match(self.input, 61, self.FOLLOW_61_in_direct_declarator812)
                     if self.failed:
                         return 
-                    # C.g:243:8: ( 'EFIAPI' )?
+                    # C.g:251:8: ( 'EFIAPI' )?
                     alt32 = 2
                     LA32_0 = self.input.LA(1)
 
@@ -2754,22 +2764,22 @@ class CParser(Parser):
                         if (self.synpred68()) :
                             alt32 = 1
                     if alt32 == 1:
-                        # C.g:243:9: 'EFIAPI'
-                        self.match(self.input, 58, self.FOLLOW_58_in_direct_declarator813)
+                        # C.g:251:9: 'EFIAPI'
+                        self.match(self.input, 58, self.FOLLOW_58_in_direct_declarator815)
                         if self.failed:
                             return 
 
 
 
-                    self.following.append(self.FOLLOW_declarator_in_direct_declarator817)
+                    self.following.append(self.FOLLOW_declarator_in_direct_declarator819)
                     self.declarator()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_direct_declarator819)
+                    self.match(self.input, 62, self.FOLLOW_62_in_direct_declarator821)
                     if self.failed:
                         return 
-                    # C.g:243:35: ( declarator_suffix )+
+                    # C.g:251:35: ( declarator_suffix )+
                     cnt33 = 0
                     while True: #loop33
                         alt33 = 2
@@ -2784,127 +2794,127 @@ class CParser(Parser):
                                     alt33 = 1
 
 
-                            elif LA33 == 29 or LA33 == 30 or LA33 == 31 or LA33 == 32 or LA33 == 33:
+                            elif LA33 == 58:
                                 LA33_31 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 34:
+                            elif LA33 == 65:
                                 LA33_32 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 35:
+                            elif LA33 == 59:
                                 LA33_33 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 36:
+                            elif LA33 == 60:
                                 LA33_34 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 37:
+                            elif LA33 == IDENTIFIER:
                                 LA33_35 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 38:
-                                LA33_36 = self.input.LA(3)
-
-                                if (self.synpred69()) :
-                                    alt33 = 1
-
-
-                            elif LA33 == 39:
+                            elif LA33 == 29 or LA33 == 30 or LA33 == 31 or LA33 == 32 or LA33 == 33:
                                 LA33_37 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 40:
+                            elif LA33 == 34:
                                 LA33_38 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 41:
+                            elif LA33 == 35:
                                 LA33_39 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 42:
+                            elif LA33 == 36:
                                 LA33_40 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 45 or LA33 == 46:
+                            elif LA33 == 37:
                                 LA33_41 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 48:
+                            elif LA33 == 38:
                                 LA33_42 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == IDENTIFIER:
+                            elif LA33 == 39:
                                 LA33_43 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 58:
+                            elif LA33 == 40:
                                 LA33_44 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 65:
+                            elif LA33 == 41:
                                 LA33_45 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 59:
-                                LA33_48 = self.input.LA(3)
+                            elif LA33 == 42:
+                                LA33_46 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
 
 
-                            elif LA33 == 60:
-                                LA33_49 = self.input.LA(3)
+                            elif LA33 == 45 or LA33 == 46:
+                                LA33_47 = self.input.LA(3)
+
+                                if (self.synpred69()) :
+                                    alt33 = 1
+
+
+                            elif LA33 == 48:
+                                LA33_48 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 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)
+                                LA33_49 = self.input.LA(3)
 
                                 if (self.synpred69()) :
                                     alt33 = 1
@@ -3009,7 +3019,7 @@ class CParser(Parser):
 
                         if alt33 == 1:
                             # C.g:0:0: declarator_suffix
-                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator821)
+                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator823)
                             self.declarator_suffix()
                             self.following.pop()
                             if self.failed:
@@ -3048,7 +3058,7 @@ class CParser(Parser):
 
 
     # $ANTLR start declarator_suffix
-    # C.g:246:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );
+    # C.g:254:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );
     def declarator_suffix(self, ):
 
         declarator_suffix_StartIndex = self.input.index()
@@ -3057,7 +3067,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 24):
                     return 
 
-                # C.g:247:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )
+                # C.g:255:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )
                 alt35 = 5
                 LA35_0 = self.input.LA(1)
 
@@ -3073,7 +3083,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("246:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 1, self.input)
+                        nvae = NoViableAltException("254:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 1, self.input)
 
                         raise nvae
 
@@ -3081,8 +3091,10 @@ class CParser(Parser):
                     LA35 = self.input.LA(2)
                     if LA35 == 62:
                         alt35 = 5
+                    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
                     elif LA35 == IDENTIFIER:
-                        LA35_17 = self.input.LA(3)
+                        LA35_29 = self.input.LA(3)
 
                         if (self.synpred72()) :
                             alt35 = 3
@@ -3093,18 +3105,16 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("246:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 17, self.input)
+                            nvae = NoViableAltException("254:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 29, self.input)
 
                             raise nvae
 
-                    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("246:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 2, self.input)
+                        nvae = NoViableAltException("254:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 2, self.input)
 
                         raise nvae
 
@@ -3113,71 +3123,71 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("246:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 0, self.input)
+                    nvae = NoViableAltException("254:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 35, 0, self.input)
 
                     raise nvae
 
                 if alt35 == 1:
-                    # C.g:247:6: '[' constant_expression ']'
-                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix835)
+                    # C.g:255:6: '[' constant_expression ']'
+                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix837)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_constant_expression_in_declarator_suffix837)
+                    self.following.append(self.FOLLOW_constant_expression_in_declarator_suffix839)
                     self.constant_expression()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix839)
+                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix841)
                     if self.failed:
                         return 
 
 
                 elif alt35 == 2:
-                    # C.g:248:9: '[' ']'
-                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix849)
+                    # C.g:256:9: '[' ']'
+                    self.match(self.input, 63, self.FOLLOW_63_in_declarator_suffix851)
                     if self.failed:
                         return 
-                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix851)
+                    self.match(self.input, 64, self.FOLLOW_64_in_declarator_suffix853)
                     if self.failed:
                         return 
 
 
                 elif alt35 == 3:
-                    # C.g:249:9: '(' parameter_type_list ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix861)
+                    # C.g:257:9: '(' parameter_type_list ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix863)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_parameter_type_list_in_declarator_suffix863)
+                    self.following.append(self.FOLLOW_parameter_type_list_in_declarator_suffix865)
                     self.parameter_type_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix865)
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix867)
                     if self.failed:
                         return 
 
 
                 elif alt35 == 4:
-                    # C.g:250:9: '(' identifier_list ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix875)
+                    # C.g:258:9: '(' identifier_list ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix877)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_identifier_list_in_declarator_suffix877)
+                    self.following.append(self.FOLLOW_identifier_list_in_declarator_suffix879)
                     self.identifier_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix879)
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix881)
                     if self.failed:
                         return 
 
 
                 elif alt35 == 5:
-                    # C.g:251:9: '(' ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix889)
+                    # C.g:259:9: '(' ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_declarator_suffix891)
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix891)
+                    self.match(self.input, 62, self.FOLLOW_62_in_declarator_suffix893)
                     if self.failed:
                         return 
 
@@ -3198,7 +3208,7 @@ class CParser(Parser):
 
 
     # $ANTLR start pointer
-    # C.g:254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );
+    # C.g:262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );
     def pointer(self, ):
 
         pointer_StartIndex = self.input.index()
@@ -3207,17 +3217,17 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 25):
                     return 
 
-                # C.g:255:2: ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' )
+                # C.g:263:2: ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' )
                 alt38 = 3
                 LA38_0 = self.input.LA(1)
 
                 if (LA38_0 == 65) :
                     LA38 = self.input.LA(2)
-                    if LA38 == 58:
+                    if LA38 == 65:
                         LA38_2 = self.input.LA(3)
 
-                        if (self.synpred76()) :
-                            alt38 = 1
+                        if (self.synpred77()) :
+                            alt38 = 2
                         elif (True) :
                             alt38 = 3
                         else:
@@ -3225,15 +3235,15 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 2, self.input)
+                            nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 2, self.input)
 
                             raise nvae
 
-                    elif LA38 == 65:
+                    elif LA38 == 58:
                         LA38_3 = self.input.LA(3)
 
-                        if (self.synpred77()) :
-                            alt38 = 2
+                        if (self.synpred76()) :
+                            alt38 = 1
                         elif (True) :
                             alt38 = 3
                         else:
@@ -3241,7 +3251,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 3, self.input)
+                            nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 3, self.input)
 
                             raise nvae
 
@@ -3257,7 +3267,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 4, self.input)
+                            nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 4, self.input)
 
                             raise nvae
 
@@ -3273,12 +3283,14 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 5, self.input)
+                            nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 5, self.input)
 
                             raise nvae
 
+                    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 == 53:
-                        LA38_6 = self.input.LA(3)
+                        LA38_21 = self.input.LA(3)
 
                         if (self.synpred76()) :
                             alt38 = 1
@@ -3289,12 +3301,10 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 6, self.input)
+                            nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 21, self.input)
 
                             raise nvae
 
-                    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)
 
@@ -3307,7 +3317,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 29, self.input)
+                            nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 29, self.input)
 
                             raise nvae
 
@@ -3316,7 +3326,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 1, self.input)
+                        nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 1, self.input)
 
                         raise nvae
 
@@ -3325,16 +3335,16 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("254:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 0, self.input)
+                    nvae = NoViableAltException("262:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 38, 0, self.input)
 
                     raise nvae
 
                 if alt38 == 1:
-                    # C.g:255:4: '*' ( type_qualifier )+ ( pointer )?
-                    self.match(self.input, 65, self.FOLLOW_65_in_pointer902)
+                    # C.g:263:4: '*' ( type_qualifier )+ ( pointer )?
+                    self.match(self.input, 65, self.FOLLOW_65_in_pointer904)
                     if self.failed:
                         return 
-                    # C.g:255:8: ( type_qualifier )+
+                    # C.g:263:8: ( type_qualifier )+
                     cnt36 = 0
                     while True: #loop36
                         alt36 = 2
@@ -3377,7 +3387,7 @@ class CParser(Parser):
 
                         if alt36 == 1:
                             # C.g:0:0: type_qualifier
-                            self.following.append(self.FOLLOW_type_qualifier_in_pointer904)
+                            self.following.append(self.FOLLOW_type_qualifier_in_pointer906)
                             self.type_qualifier()
                             self.following.pop()
                             if self.failed:
@@ -3398,7 +3408,7 @@ class CParser(Parser):
                         cnt36 += 1
 
 
-                    # C.g:255:24: ( pointer )?
+                    # C.g:263:24: ( pointer )?
                     alt37 = 2
                     LA37_0 = self.input.LA(1)
 
@@ -3409,7 +3419,7 @@ class CParser(Parser):
                             alt37 = 1
                     if alt37 == 1:
                         # C.g:0:0: pointer
-                        self.following.append(self.FOLLOW_pointer_in_pointer907)
+                        self.following.append(self.FOLLOW_pointer_in_pointer909)
                         self.pointer()
                         self.following.pop()
                         if self.failed:
@@ -3420,11 +3430,11 @@ class CParser(Parser):
 
 
                 elif alt38 == 2:
-                    # C.g:256:4: '*' pointer
-                    self.match(self.input, 65, self.FOLLOW_65_in_pointer913)
+                    # C.g:264:4: '*' pointer
+                    self.match(self.input, 65, self.FOLLOW_65_in_pointer915)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_pointer_in_pointer915)
+                    self.following.append(self.FOLLOW_pointer_in_pointer917)
                     self.pointer()
                     self.following.pop()
                     if self.failed:
@@ -3432,8 +3442,8 @@ class CParser(Parser):
 
 
                 elif alt38 == 3:
-                    # C.g:257:4: '*'
-                    self.match(self.input, 65, self.FOLLOW_65_in_pointer920)
+                    # C.g:265:4: '*'
+                    self.match(self.input, 65, self.FOLLOW_65_in_pointer922)
                     if self.failed:
                         return 
 
@@ -3454,7 +3464,7 @@ class CParser(Parser):
 
 
     # $ANTLR start parameter_type_list
-    # C.g:260:1: parameter_type_list : parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ;
+    # C.g:268:1: parameter_type_list : parameter_list ( ',' ( 'OPTIONAL' )? '...' )? ;
     def parameter_type_list(self, ):
 
         parameter_type_list_StartIndex = self.input.index()
@@ -3463,39 +3473,39 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 26):
                     return 
 
-                # 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)
+                # C.g:269:2: ( parameter_list ( ',' ( 'OPTIONAL' )? '...' )? )
+                # C.g:269:4: parameter_list ( ',' ( 'OPTIONAL' )? '...' )?
+                self.following.append(self.FOLLOW_parameter_list_in_parameter_type_list933)
                 self.parameter_list()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:261:19: ( ',' ( 'OPTIONAL' )? '...' )?
+                # C.g:269: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)
+                    # C.g:269:20: ',' ( 'OPTIONAL' )? '...'
+                    self.match(self.input, 27, self.FOLLOW_27_in_parameter_type_list936)
                     if self.failed:
                         return 
-                    # C.g:261:24: ( 'OPTIONAL' )?
+                    # C.g:269: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)
+                        # C.g:269:25: 'OPTIONAL'
+                        self.match(self.input, 53, self.FOLLOW_53_in_parameter_type_list939)
                         if self.failed:
                             return 
 
 
 
-                    self.match(self.input, 66, self.FOLLOW_66_in_parameter_type_list941)
+                    self.match(self.input, 66, self.FOLLOW_66_in_parameter_type_list943)
                     if self.failed:
                         return 
 
@@ -3520,7 +3530,7 @@ class CParser(Parser):
 
 
     # $ANTLR start parameter_list
-    # C.g:264:1: parameter_list : parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ;
+    # C.g:272:1: parameter_list : parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* ;
     def parameter_list(self, ):
 
         parameter_list_StartIndex = self.input.index()
@@ -3529,14 +3539,14 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 27):
                     return 
 
-                # 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)
+                # C.g:273:2: ( parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )* )
+                # C.g:273:4: parameter_declaration ( ',' ( 'OPTIONAL' )? parameter_declaration )*
+                self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list956)
                 self.parameter_declaration()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:265:26: ( ',' ( 'OPTIONAL' )? parameter_declaration )*
+                # C.g:273:26: ( ',' ( 'OPTIONAL' )? parameter_declaration )*
                 while True: #loop42
                     alt42 = 2
                     LA42_0 = self.input.LA(1)
@@ -3558,11 +3568,11 @@ class CParser(Parser):
 
 
                     if alt42 == 1:
-                        # C.g:265:27: ',' ( 'OPTIONAL' )? parameter_declaration
-                        self.match(self.input, 27, self.FOLLOW_27_in_parameter_list957)
+                        # C.g:273:27: ',' ( 'OPTIONAL' )? parameter_declaration
+                        self.match(self.input, 27, self.FOLLOW_27_in_parameter_list959)
                         if self.failed:
                             return 
-                        # C.g:265:31: ( 'OPTIONAL' )?
+                        # C.g:273:31: ( 'OPTIONAL' )?
                         alt41 = 2
                         LA41_0 = self.input.LA(1)
 
@@ -3572,14 +3582,14 @@ class CParser(Parser):
                             if (self.synpred80()) :
                                 alt41 = 1
                         if alt41 == 1:
-                            # C.g:265:32: 'OPTIONAL'
-                            self.match(self.input, 53, self.FOLLOW_53_in_parameter_list960)
+                            # C.g:273:32: 'OPTIONAL'
+                            self.match(self.input, 53, self.FOLLOW_53_in_parameter_list962)
                             if self.failed:
                                 return 
 
 
 
-                        self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list964)
+                        self.following.append(self.FOLLOW_parameter_declaration_in_parameter_list966)
                         self.parameter_declaration()
                         self.following.pop()
                         if self.failed:
@@ -3609,7 +3619,7 @@ class CParser(Parser):
 
 
     # $ANTLR start parameter_declaration
-    # C.g:268:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );
+    # C.g:276:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );
     def parameter_declaration(self, ):
 
         parameter_declaration_StartIndex = self.input.index()
@@ -3618,7 +3628,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 28):
                     return 
 
-                # C.g:269:2: ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER )
+                # C.g:277: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:
@@ -3635,7 +3645,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("268:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 13, self.input)
+                        nvae = NoViableAltException("276:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 13, self.input)
 
                         raise nvae
 
@@ -3646,18 +3656,18 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("268:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 0, self.input)
+                    nvae = NoViableAltException("276:1: parameter_declaration : ( declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )? | ( pointer )* IDENTIFIER );", 46, 0, self.input)
 
                     raise nvae
 
                 if alt46 == 1:
-                    # C.g:269:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )?
-                    self.following.append(self.FOLLOW_declaration_specifiers_in_parameter_declaration977)
+                    # C.g:277:4: declaration_specifiers ( declarator | abstract_declarator )* ( 'OPTIONAL' )?
+                    self.following.append(self.FOLLOW_declaration_specifiers_in_parameter_declaration979)
                     self.declaration_specifiers()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:269:27: ( declarator | abstract_declarator )*
+                    # C.g:277:27: ( declarator | abstract_declarator )*
                     while True: #loop43
                         alt43 = 3
                         LA43 = self.input.LA(1)
@@ -3676,8 +3686,8 @@ class CParser(Parser):
                             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)
+                            elif LA43 == 65:
+                                LA43_25 = self.input.LA(3)
 
                                 if (self.synpred82()) :
                                     alt43 = 1
@@ -3685,8 +3695,8 @@ class CParser(Parser):
                                     alt43 = 2
 
 
-                            elif LA43 == 58:
-                                LA43_38 = self.input.LA(3)
+                            elif LA43 == 61:
+                                LA43_26 = self.input.LA(3)
 
                                 if (self.synpred82()) :
                                     alt43 = 1
@@ -3694,8 +3704,8 @@ class CParser(Parser):
                                     alt43 = 2
 
 
-                            elif LA43 == 65:
-                                LA43_39 = self.input.LA(3)
+                            elif LA43 == 58:
+                                LA43_28 = self.input.LA(3)
 
                                 if (self.synpred82()) :
                                     alt43 = 1
@@ -3703,8 +3713,8 @@ class CParser(Parser):
                                     alt43 = 2
 
 
-                            elif LA43 == 61:
-                                LA43_40 = self.input.LA(3)
+                            elif LA43 == 59:
+                                LA43_29 = self.input.LA(3)
 
                                 if (self.synpred82()) :
                                     alt43 = 1
@@ -3712,8 +3722,8 @@ class CParser(Parser):
                                     alt43 = 2
 
 
-                            elif LA43 == 59:
-                                LA43_42 = self.input.LA(3)
+                            elif LA43 == 60:
+                                LA43_30 = self.input.LA(3)
 
                                 if (self.synpred82()) :
                                     alt43 = 1
@@ -3721,8 +3731,8 @@ class CParser(Parser):
                                     alt43 = 2
 
 
-                            elif LA43 == 60:
-                                LA43_43 = self.input.LA(3)
+                            elif LA43 == IDENTIFIER:
+                                LA43_31 = self.input.LA(3)
 
                                 if (self.synpred82()) :
                                     alt43 = 1
@@ -3735,8 +3745,8 @@ class CParser(Parser):
                             alt43 = 2
 
                         if alt43 == 1:
-                            # C.g:269:28: declarator
-                            self.following.append(self.FOLLOW_declarator_in_parameter_declaration980)
+                            # C.g:277:28: declarator
+                            self.following.append(self.FOLLOW_declarator_in_parameter_declaration982)
                             self.declarator()
                             self.following.pop()
                             if self.failed:
@@ -3744,8 +3754,8 @@ class CParser(Parser):
 
 
                         elif alt43 == 2:
-                            # C.g:269:39: abstract_declarator
-                            self.following.append(self.FOLLOW_abstract_declarator_in_parameter_declaration982)
+                            # C.g:277:39: abstract_declarator
+                            self.following.append(self.FOLLOW_abstract_declarator_in_parameter_declaration984)
                             self.abstract_declarator()
                             self.following.pop()
                             if self.failed:
@@ -3756,15 +3766,15 @@ class CParser(Parser):
                             break #loop43
 
 
-                    # C.g:269:61: ( 'OPTIONAL' )?
+                    # C.g:277:61: ( 'OPTIONAL' )?
                     alt44 = 2
                     LA44_0 = self.input.LA(1)
 
                     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)
+                        # C.g:277:62: 'OPTIONAL'
+                        self.match(self.input, 53, self.FOLLOW_53_in_parameter_declaration989)
                         if self.failed:
                             return 
 
@@ -3773,8 +3783,8 @@ class CParser(Parser):
 
 
                 elif alt46 == 2:
-                    # C.g:271:4: ( pointer )* IDENTIFIER
-                    # C.g:271:4: ( pointer )*
+                    # C.g:279:4: ( pointer )* IDENTIFIER
+                    # C.g:279:4: ( pointer )*
                     while True: #loop45
                         alt45 = 2
                         LA45_0 = self.input.LA(1)
@@ -3785,7 +3795,7 @@ class CParser(Parser):
 
                         if alt45 == 1:
                             # C.g:0:0: pointer
-                            self.following.append(self.FOLLOW_pointer_in_parameter_declaration996)
+                            self.following.append(self.FOLLOW_pointer_in_parameter_declaration998)
                             self.pointer()
                             self.following.pop()
                             if self.failed:
@@ -3796,7 +3806,7 @@ class CParser(Parser):
                             break #loop45
 
 
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_parameter_declaration999)
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_parameter_declaration1001)
                     if self.failed:
                         return 
 
@@ -3817,7 +3827,7 @@ class CParser(Parser):
 
 
     # $ANTLR start identifier_list
-    # C.g:274:1: identifier_list : IDENTIFIER ( ',' IDENTIFIER )* ;
+    # C.g:282:1: identifier_list : IDENTIFIER ( ',' IDENTIFIER )* ;
     def identifier_list(self, ):
 
         identifier_list_StartIndex = self.input.index()
@@ -3826,12 +3836,12 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 29):
                     return 
 
-                # C.g:275:2: ( IDENTIFIER ( ',' IDENTIFIER )* )
-                # C.g:275:4: IDENTIFIER ( ',' IDENTIFIER )*
-                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1010)
+                # C.g:283:2: ( IDENTIFIER ( ',' IDENTIFIER )* )
+                # C.g:283:4: IDENTIFIER ( ',' IDENTIFIER )*
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1012)
                 if self.failed:
                     return 
-                # C.g:276:2: ( ',' IDENTIFIER )*
+                # C.g:284:2: ( ',' IDENTIFIER )*
                 while True: #loop47
                     alt47 = 2
                     LA47_0 = self.input.LA(1)
@@ -3841,11 +3851,11 @@ class CParser(Parser):
 
 
                     if alt47 == 1:
-                        # C.g:276:3: ',' IDENTIFIER
-                        self.match(self.input, 27, self.FOLLOW_27_in_identifier_list1014)
+                        # C.g:284:3: ',' IDENTIFIER
+                        self.match(self.input, 27, self.FOLLOW_27_in_identifier_list1016)
                         if self.failed:
                             return 
-                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1016)
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_identifier_list1018)
                         if self.failed:
                             return 
 
@@ -3873,7 +3883,7 @@ class CParser(Parser):
 
 
     # $ANTLR start type_name
-    # C.g:279:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );
+    # C.g:287:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );
     def type_name(self, ):
 
         type_name_StartIndex = self.input.index()
@@ -3882,7 +3892,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 30):
                     return 
 
-                # C.g:280:2: ( specifier_qualifier_list ( abstract_declarator )? | type_id )
+                # C.g:288:2: ( specifier_qualifier_list ( abstract_declarator )? | type_id )
                 alt49 = 2
                 LA49_0 = self.input.LA(1)
 
@@ -3900,7 +3910,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("279:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 13, self.input)
+                        nvae = NoViableAltException("287:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 13, self.input)
 
                         raise nvae
 
@@ -3909,18 +3919,18 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("279:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 0, self.input)
+                    nvae = NoViableAltException("287:1: type_name : ( specifier_qualifier_list ( abstract_declarator )? | type_id );", 49, 0, self.input)
 
                     raise nvae
 
                 if alt49 == 1:
-                    # C.g:280:4: specifier_qualifier_list ( abstract_declarator )?
-                    self.following.append(self.FOLLOW_specifier_qualifier_list_in_type_name1029)
+                    # C.g:288:4: specifier_qualifier_list ( abstract_declarator )?
+                    self.following.append(self.FOLLOW_specifier_qualifier_list_in_type_name1031)
                     self.specifier_qualifier_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:280:29: ( abstract_declarator )?
+                    # C.g:288:29: ( abstract_declarator )?
                     alt48 = 2
                     LA48_0 = self.input.LA(1)
 
@@ -3928,7 +3938,7 @@ class CParser(Parser):
                         alt48 = 1
                     if alt48 == 1:
                         # C.g:0:0: abstract_declarator
-                        self.following.append(self.FOLLOW_abstract_declarator_in_type_name1031)
+                        self.following.append(self.FOLLOW_abstract_declarator_in_type_name1033)
                         self.abstract_declarator()
                         self.following.pop()
                         if self.failed:
@@ -3939,8 +3949,8 @@ class CParser(Parser):
 
 
                 elif alt49 == 2:
-                    # C.g:281:4: type_id
-                    self.following.append(self.FOLLOW_type_id_in_type_name1037)
+                    # C.g:289:4: type_id
+                    self.following.append(self.FOLLOW_type_id_in_type_name1039)
                     self.type_id()
                     self.following.pop()
                     if self.failed:
@@ -3963,7 +3973,7 @@ class CParser(Parser):
 
 
     # $ANTLR start abstract_declarator
-    # C.g:284:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );
+    # C.g:292:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );
     def abstract_declarator(self, ):
 
         abstract_declarator_StartIndex = self.input.index()
@@ -3972,7 +3982,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 31):
                     return 
 
-                # C.g:285:2: ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator )
+                # C.g:293:2: ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator )
                 alt51 = 2
                 LA51_0 = self.input.LA(1)
 
@@ -3985,18 +3995,18 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("284:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );", 51, 0, self.input)
+                    nvae = NoViableAltException("292:1: abstract_declarator : ( pointer ( direct_abstract_declarator )? | direct_abstract_declarator );", 51, 0, self.input)
 
                     raise nvae
 
                 if alt51 == 1:
-                    # C.g:285:4: pointer ( direct_abstract_declarator )?
-                    self.following.append(self.FOLLOW_pointer_in_abstract_declarator1048)
+                    # C.g:293: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:285:12: ( direct_abstract_declarator )?
+                    # C.g:293:12: ( direct_abstract_declarator )?
                     alt50 = 2
                     LA50_0 = self.input.LA(1)
 
@@ -4176,7 +4186,7 @@ class CParser(Parser):
                                 alt50 = 1
                     if alt50 == 1:
                         # C.g:0:0: direct_abstract_declarator
-                        self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1050)
+                        self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1052)
                         self.direct_abstract_declarator()
                         self.following.pop()
                         if self.failed:
@@ -4187,8 +4197,8 @@ class CParser(Parser):
 
 
                 elif alt51 == 2:
-                    # C.g:286:4: direct_abstract_declarator
-                    self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1056)
+                    # C.g:294:4: direct_abstract_declarator
+                    self.following.append(self.FOLLOW_direct_abstract_declarator_in_abstract_declarator1058)
                     self.direct_abstract_declarator()
                     self.following.pop()
                     if self.failed:
@@ -4211,7 +4221,7 @@ class CParser(Parser):
 
 
     # $ANTLR start direct_abstract_declarator
-    # C.g:289:1: direct_abstract_declarator : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ;
+    # C.g:297:1: direct_abstract_declarator : ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* ;
     def direct_abstract_declarator(self, ):
 
         direct_abstract_declarator_StartIndex = self.input.index()
@@ -4220,9 +4230,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 32):
                     return 
 
-                # 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 )
+                # C.g:298:2: ( ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )* )
+                # C.g:298:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix ) ( abstract_declarator_suffix )*
+                # C.g:298:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )
                 alt52 = 2
                 LA52_0 = self.input.LA(1)
 
@@ -4231,7 +4241,7 @@ class CParser(Parser):
                     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)
+                        LA52_18 = self.input.LA(3)
 
                         if (self.synpred92()) :
                             alt52 = 1
@@ -4242,7 +4252,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("290:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 4, self.input)
+                            nvae = NoViableAltException("298:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 18, self.input)
 
                             raise nvae
 
@@ -4253,7 +4263,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("290:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 1, self.input)
+                        nvae = NoViableAltException("298:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 1, self.input)
 
                         raise nvae
 
@@ -4264,28 +4274,28 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("290:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 0, self.input)
+                    nvae = NoViableAltException("298:4: ( '(' abstract_declarator ')' | abstract_declarator_suffix )", 52, 0, self.input)
 
                     raise nvae
 
                 if alt52 == 1:
-                    # C.g:290:6: '(' abstract_declarator ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_direct_abstract_declarator1069)
+                    # C.g:298:6: '(' abstract_declarator ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_direct_abstract_declarator1071)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_abstract_declarator_in_direct_abstract_declarator1071)
+                    self.following.append(self.FOLLOW_abstract_declarator_in_direct_abstract_declarator1073)
                     self.abstract_declarator()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_direct_abstract_declarator1073)
+                    self.match(self.input, 62, self.FOLLOW_62_in_direct_abstract_declarator1075)
                     if self.failed:
                         return 
 
 
                 elif alt52 == 2:
-                    # C.g:290:36: abstract_declarator_suffix
-                    self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1077)
+                    # C.g:298:36: abstract_declarator_suffix
+                    self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1079)
                     self.abstract_declarator_suffix()
                     self.following.pop()
                     if self.failed:
@@ -4293,7 +4303,7 @@ class CParser(Parser):
 
 
 
-                # C.g:290:65: ( abstract_declarator_suffix )*
+                # C.g:298:65: ( abstract_declarator_suffix )*
                 while True: #loop53
                     alt53 = 2
                     LA53_0 = self.input.LA(1)
@@ -4532,7 +4542,7 @@ class CParser(Parser):
 
                     if alt53 == 1:
                         # C.g:0:0: abstract_declarator_suffix
-                        self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1081)
+                        self.following.append(self.FOLLOW_abstract_declarator_suffix_in_direct_abstract_declarator1083)
                         self.abstract_declarator_suffix()
                         self.following.pop()
                         if self.failed:
@@ -4562,7 +4572,7 @@ class CParser(Parser):
 
 
     # $ANTLR start abstract_declarator_suffix
-    # C.g:293:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );
+    # C.g:301:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );
     def abstract_declarator_suffix(self, ):
 
         abstract_declarator_suffix_StartIndex = self.input.index()
@@ -4571,7 +4581,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 33):
                     return 
 
-                # C.g:294:2: ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' )
+                # C.g:302:2: ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' )
                 alt54 = 4
                 LA54_0 = self.input.LA(1)
 
@@ -4587,7 +4597,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("293:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 1, self.input)
+                        nvae = NoViableAltException("301:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 1, self.input)
 
                         raise nvae
 
@@ -4603,7 +4613,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("293:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 2, self.input)
+                        nvae = NoViableAltException("301:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 2, self.input)
 
                         raise nvae
 
@@ -4612,56 +4622,56 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("293:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 0, self.input)
+                    nvae = NoViableAltException("301:1: abstract_declarator_suffix : ( '[' ']' | '[' constant_expression ']' | '(' ')' | '(' parameter_type_list ')' );", 54, 0, self.input)
 
                     raise nvae
 
                 if alt54 == 1:
-                    # C.g:294:4: '[' ']'
-                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1093)
+                    # C.g:302:4: '[' ']'
+                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1095)
                     if self.failed:
                         return 
-                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1095)
+                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1097)
                     if self.failed:
                         return 
 
 
                 elif alt54 == 2:
-                    # C.g:295:4: '[' constant_expression ']'
-                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1100)
+                    # C.g:303:4: '[' constant_expression ']'
+                    self.match(self.input, 63, self.FOLLOW_63_in_abstract_declarator_suffix1102)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_constant_expression_in_abstract_declarator_suffix1102)
+                    self.following.append(self.FOLLOW_constant_expression_in_abstract_declarator_suffix1104)
                     self.constant_expression()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1104)
+                    self.match(self.input, 64, self.FOLLOW_64_in_abstract_declarator_suffix1106)
                     if self.failed:
                         return 
 
 
                 elif alt54 == 3:
-                    # C.g:296:4: '(' ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_abstract_declarator_suffix1109)
+                    # C.g:304:4: '(' ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_abstract_declarator_suffix1111)
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1111)
+                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1113)
                     if self.failed:
                         return 
 
 
                 elif alt54 == 4:
-                    # C.g:297:4: '(' parameter_type_list ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_abstract_declarator_suffix1116)
+                    # C.g:305:4: '(' parameter_type_list ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_abstract_declarator_suffix1118)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_parameter_type_list_in_abstract_declarator_suffix1118)
+                    self.following.append(self.FOLLOW_parameter_type_list_in_abstract_declarator_suffix1120)
                     self.parameter_type_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1120)
+                    self.match(self.input, 62, self.FOLLOW_62_in_abstract_declarator_suffix1122)
                     if self.failed:
                         return 
 
@@ -4682,7 +4692,7 @@ class CParser(Parser):
 
 
     # $ANTLR start initializer
-    # C.g:300:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );
+    # C.g:308:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );
     def initializer(self, ):
 
         initializer_StartIndex = self.input.index()
@@ -4691,7 +4701,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 34):
                     return 
 
-                # C.g:302:2: ( assignment_expression | '{' initializer_list ( ',' )? '}' )
+                # C.g:310:2: ( assignment_expression | '{' initializer_list ( ',' )? '}' )
                 alt56 = 2
                 LA56_0 = self.input.LA(1)
 
@@ -4704,13 +4714,13 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("300:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );", 56, 0, self.input)
+                    nvae = NoViableAltException("308:1: initializer : ( assignment_expression | '{' initializer_list ( ',' )? '}' );", 56, 0, self.input)
 
                     raise nvae
 
                 if alt56 == 1:
-                    # C.g:302:4: assignment_expression
-                    self.following.append(self.FOLLOW_assignment_expression_in_initializer1133)
+                    # C.g:310:4: assignment_expression
+                    self.following.append(self.FOLLOW_assignment_expression_in_initializer1135)
                     self.assignment_expression()
                     self.following.pop()
                     if self.failed:
@@ -4718,16 +4728,16 @@ class CParser(Parser):
 
 
                 elif alt56 == 2:
-                    # C.g:303:4: '{' initializer_list ( ',' )? '}'
-                    self.match(self.input, 43, self.FOLLOW_43_in_initializer1138)
+                    # C.g:311:4: '{' initializer_list ( ',' )? '}'
+                    self.match(self.input, 43, self.FOLLOW_43_in_initializer1140)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_initializer_list_in_initializer1140)
+                    self.following.append(self.FOLLOW_initializer_list_in_initializer1142)
                     self.initializer_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:303:25: ( ',' )?
+                    # C.g:311:25: ( ',' )?
                     alt55 = 2
                     LA55_0 = self.input.LA(1)
 
@@ -4735,13 +4745,13 @@ class CParser(Parser):
                         alt55 = 1
                     if alt55 == 1:
                         # C.g:0:0: ','
-                        self.match(self.input, 27, self.FOLLOW_27_in_initializer1142)
+                        self.match(self.input, 27, self.FOLLOW_27_in_initializer1144)
                         if self.failed:
                             return 
 
 
 
-                    self.match(self.input, 44, self.FOLLOW_44_in_initializer1145)
+                    self.match(self.input, 44, self.FOLLOW_44_in_initializer1147)
                     if self.failed:
                         return 
 
@@ -4762,7 +4772,7 @@ class CParser(Parser):
 
 
     # $ANTLR start initializer_list
-    # C.g:306:1: initializer_list : initializer ( ',' initializer )* ;
+    # C.g:314:1: initializer_list : initializer ( ',' initializer )* ;
     def initializer_list(self, ):
 
         initializer_list_StartIndex = self.input.index()
@@ -4771,14 +4781,14 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 35):
                     return 
 
-                # C.g:307:2: ( initializer ( ',' initializer )* )
-                # C.g:307:4: initializer ( ',' initializer )*
-                self.following.append(self.FOLLOW_initializer_in_initializer_list1156)
+                # C.g:315:2: ( initializer ( ',' initializer )* )
+                # C.g:315:4: initializer ( ',' initializer )*
+                self.following.append(self.FOLLOW_initializer_in_initializer_list1158)
                 self.initializer()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:307:16: ( ',' initializer )*
+                # C.g:315:16: ( ',' initializer )*
                 while True: #loop57
                     alt57 = 2
                     LA57_0 = self.input.LA(1)
@@ -4793,11 +4803,11 @@ class CParser(Parser):
 
 
                     if alt57 == 1:
-                        # C.g:307:17: ',' initializer
-                        self.match(self.input, 27, self.FOLLOW_27_in_initializer_list1159)
+                        # C.g:315:17: ',' initializer
+                        self.match(self.input, 27, self.FOLLOW_27_in_initializer_list1161)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_initializer_in_initializer_list1161)
+                        self.following.append(self.FOLLOW_initializer_in_initializer_list1163)
                         self.initializer()
                         self.following.pop()
                         if self.failed:
@@ -4833,7 +4843,7 @@ class CParser(Parser):
 
 
     # $ANTLR start argument_expression_list
-    # C.g:312:1: argument_expression_list : assignment_expression ( ',' assignment_expression )* ;
+    # C.g:320:1: argument_expression_list : assignment_expression ( ',' assignment_expression )* ;
     def argument_expression_list(self, ):
 
         retval = self.argument_expression_list_return()
@@ -4844,14 +4854,14 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 36):
                     return retval
 
-                # 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)
+                # C.g:321:2: ( assignment_expression ( ',' assignment_expression )* )
+                # C.g:321:6: assignment_expression ( ',' assignment_expression )*
+                self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1181)
                 self.assignment_expression()
                 self.following.pop()
                 if self.failed:
                     return retval
-                # C.g:313:28: ( ',' assignment_expression )*
+                # C.g:321:28: ( ',' assignment_expression )*
                 while True: #loop58
                     alt58 = 2
                     LA58_0 = self.input.LA(1)
@@ -4861,11 +4871,11 @@ class CParser(Parser):
 
 
                     if alt58 == 1:
-                        # C.g:313:29: ',' assignment_expression
-                        self.match(self.input, 27, self.FOLLOW_27_in_argument_expression_list1182)
+                        # C.g:321:29: ',' assignment_expression
+                        self.match(self.input, 27, self.FOLLOW_27_in_argument_expression_list1184)
                         if self.failed:
                             return retval
-                        self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1184)
+                        self.following.append(self.FOLLOW_assignment_expression_in_argument_expression_list1186)
                         self.assignment_expression()
                         self.following.pop()
                         if self.failed:
@@ -4897,7 +4907,7 @@ class CParser(Parser):
 
 
     # $ANTLR start additive_expression
-    # C.g:316:1: additive_expression : ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ;
+    # C.g:324:1: additive_expression : ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* ;
     def additive_expression(self, ):
 
         additive_expression_StartIndex = self.input.index()
@@ -4906,11 +4916,11 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 37):
                     return 
 
-                # 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)
+                # C.g:325:2: ( ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )* )
+                # C.g:325:4: ( multiplicative_expression ) ( '+' multiplicative_expression | '-' multiplicative_expression )*
+                # C.g:325:4: ( multiplicative_expression )
+                # C.g:325:5: multiplicative_expression
+                self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1200)
                 self.multiplicative_expression()
                 self.following.pop()
                 if self.failed:
@@ -4918,7 +4928,7 @@ class CParser(Parser):
 
 
 
-                # C.g:317:32: ( '+' multiplicative_expression | '-' multiplicative_expression )*
+                # C.g:325:32: ( '+' multiplicative_expression | '-' multiplicative_expression )*
                 while True: #loop59
                     alt59 = 3
                     LA59_0 = self.input.LA(1)
@@ -4930,11 +4940,11 @@ class CParser(Parser):
 
 
                     if alt59 == 1:
-                        # C.g:317:33: '+' multiplicative_expression
-                        self.match(self.input, 67, self.FOLLOW_67_in_additive_expression1202)
+                        # C.g:325:33: '+' multiplicative_expression
+                        self.match(self.input, 67, self.FOLLOW_67_in_additive_expression1204)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1204)
+                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1206)
                         self.multiplicative_expression()
                         self.following.pop()
                         if self.failed:
@@ -4942,11 +4952,11 @@ class CParser(Parser):
 
 
                     elif alt59 == 2:
-                        # C.g:317:65: '-' multiplicative_expression
-                        self.match(self.input, 68, self.FOLLOW_68_in_additive_expression1208)
+                        # C.g:325:65: '-' multiplicative_expression
+                        self.match(self.input, 68, self.FOLLOW_68_in_additive_expression1210)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1210)
+                        self.following.append(self.FOLLOW_multiplicative_expression_in_additive_expression1212)
                         self.multiplicative_expression()
                         self.following.pop()
                         if self.failed:
@@ -4976,7 +4986,7 @@ class CParser(Parser):
 
 
     # $ANTLR start multiplicative_expression
-    # C.g:320:1: multiplicative_expression : ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ;
+    # C.g:328:1: multiplicative_expression : ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* ;
     def multiplicative_expression(self, ):
 
         multiplicative_expression_StartIndex = self.input.index()
@@ -4985,11 +4995,11 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 38):
                     return 
 
-                # 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)
+                # C.g:329:2: ( ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )* )
+                # C.g:329:4: ( cast_expression ) ( '*' cast_expression | '/' cast_expression | '%' cast_expression )*
+                # C.g:329:4: ( cast_expression )
+                # C.g:329:5: cast_expression
+                self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1226)
                 self.cast_expression()
                 self.following.pop()
                 if self.failed:
@@ -4997,7 +5007,7 @@ class CParser(Parser):
 
 
 
-                # C.g:321:22: ( '*' cast_expression | '/' cast_expression | '%' cast_expression )*
+                # C.g:329:22: ( '*' cast_expression | '/' cast_expression | '%' cast_expression )*
                 while True: #loop60
                     alt60 = 4
                     LA60 = self.input.LA(1)
@@ -5009,11 +5019,11 @@ class CParser(Parser):
                         alt60 = 3
 
                     if alt60 == 1:
-                        # C.g:321:23: '*' cast_expression
-                        self.match(self.input, 65, self.FOLLOW_65_in_multiplicative_expression1228)
+                        # C.g:329:23: '*' cast_expression
+                        self.match(self.input, 65, self.FOLLOW_65_in_multiplicative_expression1230)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1230)
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1232)
                         self.cast_expression()
                         self.following.pop()
                         if self.failed:
@@ -5021,11 +5031,11 @@ class CParser(Parser):
 
 
                     elif alt60 == 2:
-                        # C.g:321:45: '/' cast_expression
-                        self.match(self.input, 69, self.FOLLOW_69_in_multiplicative_expression1234)
+                        # C.g:329:45: '/' cast_expression
+                        self.match(self.input, 69, self.FOLLOW_69_in_multiplicative_expression1236)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1236)
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1238)
                         self.cast_expression()
                         self.following.pop()
                         if self.failed:
@@ -5033,11 +5043,11 @@ class CParser(Parser):
 
 
                     elif alt60 == 3:
-                        # C.g:321:67: '%' cast_expression
-                        self.match(self.input, 70, self.FOLLOW_70_in_multiplicative_expression1240)
+                        # C.g:329:67: '%' cast_expression
+                        self.match(self.input, 70, self.FOLLOW_70_in_multiplicative_expression1242)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1242)
+                        self.following.append(self.FOLLOW_cast_expression_in_multiplicative_expression1244)
                         self.cast_expression()
                         self.following.pop()
                         if self.failed:
@@ -5067,7 +5077,7 @@ class CParser(Parser):
 
 
     # $ANTLR start cast_expression
-    # C.g:324:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );
+    # C.g:332:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );
     def cast_expression(self, ):
 
         cast_expression_StartIndex = self.input.index()
@@ -5076,16 +5086,14 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 39):
                     return 
 
-                # C.g:325:2: ( '(' type_name ')' cast_expression | unary_expression )
+                # C.g:333:2: ( '(' type_name ')' cast_expression | unary_expression )
                 alt61 = 2
                 LA61_0 = self.input.LA(1)
 
                 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 LA61 == IDENTIFIER:
+                        LA61_13 = self.input.LA(3)
 
                         if (self.synpred106()) :
                             alt61 = 1
@@ -5096,18 +5104,20 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("324:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 61, 25, self.input)
+                            nvae = NoViableAltException("332:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 61, 13, self.input)
 
                             raise nvae
 
                     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 or LA61 == 65 or LA61 == 67 or LA61 == 68 or LA61 == 71 or LA61 == 72 or LA61 == 73 or LA61 == 76 or LA61 == 77 or LA61 == 78:
                         alt61 = 2
+                    elif 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
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("324:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 61, 1, self.input)
+                        nvae = NoViableAltException("332:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 61, 1, self.input)
 
                         raise nvae
 
@@ -5118,24 +5128,24 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("324:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 61, 0, self.input)
+                    nvae = NoViableAltException("332:1: cast_expression : ( '(' type_name ')' cast_expression | unary_expression );", 61, 0, self.input)
 
                     raise nvae
 
                 if alt61 == 1:
-                    # C.g:325:4: '(' type_name ')' cast_expression
-                    self.match(self.input, 61, self.FOLLOW_61_in_cast_expression1255)
+                    # C.g:333:4: '(' type_name ')' cast_expression
+                    self.match(self.input, 61, self.FOLLOW_61_in_cast_expression1257)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_type_name_in_cast_expression1257)
+                    self.following.append(self.FOLLOW_type_name_in_cast_expression1259)
                     self.type_name()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_cast_expression1259)
+                    self.match(self.input, 62, self.FOLLOW_62_in_cast_expression1261)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_cast_expression_in_cast_expression1261)
+                    self.following.append(self.FOLLOW_cast_expression_in_cast_expression1263)
                     self.cast_expression()
                     self.following.pop()
                     if self.failed:
@@ -5143,8 +5153,8 @@ class CParser(Parser):
 
 
                 elif alt61 == 2:
-                    # C.g:326:4: unary_expression
-                    self.following.append(self.FOLLOW_unary_expression_in_cast_expression1266)
+                    # C.g:334:4: unary_expression
+                    self.following.append(self.FOLLOW_unary_expression_in_cast_expression1268)
                     self.unary_expression()
                     self.following.pop()
                     if self.failed:
@@ -5167,7 +5177,7 @@ class CParser(Parser):
 
 
     # $ANTLR start unary_expression
-    # C.g:329:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );
+    # C.g:337:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );
     def unary_expression(self, ):
 
         unary_expression_StartIndex = self.input.index()
@@ -5176,7 +5186,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 40):
                     return 
 
-                # C.g:330:2: ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' )
+                # C.g:338:2: ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' )
                 alt62 = 6
                 LA62 = self.input.LA(1)
                 if LA62 == IDENTIFIER or LA62 == HEX_LITERAL or LA62 == OCTAL_LITERAL or LA62 == DECIMAL_LITERAL or LA62 == CHARACTER_LITERAL or LA62 == STRING_LITERAL or LA62 == FLOATING_POINT_LITERAL or LA62 == 61:
@@ -5202,7 +5212,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("329:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 62, 13, self.input)
+                            nvae = NoViableAltException("337:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 62, 13, self.input)
 
                             raise nvae
 
@@ -5213,7 +5223,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("329:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 62, 12, self.input)
+                        nvae = NoViableAltException("337:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 62, 12, self.input)
 
                         raise nvae
 
@@ -5222,13 +5232,13 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("329:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 62, 0, self.input)
+                    nvae = NoViableAltException("337:1: unary_expression : ( postfix_expression | '++' unary_expression | '--' unary_expression | unary_operator cast_expression | 'sizeof' unary_expression | 'sizeof' '(' type_name ')' );", 62, 0, self.input)
 
                     raise nvae
 
                 if alt62 == 1:
-                    # C.g:330:4: postfix_expression
-                    self.following.append(self.FOLLOW_postfix_expression_in_unary_expression1277)
+                    # C.g:338:4: postfix_expression
+                    self.following.append(self.FOLLOW_postfix_expression_in_unary_expression1279)
                     self.postfix_expression()
                     self.following.pop()
                     if self.failed:
@@ -5236,11 +5246,11 @@ class CParser(Parser):
 
 
                 elif alt62 == 2:
-                    # C.g:331:4: '++' unary_expression
-                    self.match(self.input, 71, self.FOLLOW_71_in_unary_expression1282)
+                    # C.g:339:4: '++' unary_expression
+                    self.match(self.input, 71, self.FOLLOW_71_in_unary_expression1284)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1284)
+                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1286)
                     self.unary_expression()
                     self.following.pop()
                     if self.failed:
@@ -5248,11 +5258,11 @@ class CParser(Parser):
 
 
                 elif alt62 == 3:
-                    # C.g:332:4: '--' unary_expression
-                    self.match(self.input, 72, self.FOLLOW_72_in_unary_expression1289)
+                    # C.g:340:4: '--' unary_expression
+                    self.match(self.input, 72, self.FOLLOW_72_in_unary_expression1291)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1291)
+                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1293)
                     self.unary_expression()
                     self.following.pop()
                     if self.failed:
@@ -5260,13 +5270,13 @@ class CParser(Parser):
 
 
                 elif alt62 == 4:
-                    # C.g:333:4: unary_operator cast_expression
-                    self.following.append(self.FOLLOW_unary_operator_in_unary_expression1296)
+                    # C.g:341:4: unary_operator cast_expression
+                    self.following.append(self.FOLLOW_unary_operator_in_unary_expression1298)
                     self.unary_operator()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_cast_expression_in_unary_expression1298)
+                    self.following.append(self.FOLLOW_cast_expression_in_unary_expression1300)
                     self.cast_expression()
                     self.following.pop()
                     if self.failed:
@@ -5274,11 +5284,11 @@ class CParser(Parser):
 
 
                 elif alt62 == 5:
-                    # C.g:334:4: 'sizeof' unary_expression
-                    self.match(self.input, 73, self.FOLLOW_73_in_unary_expression1303)
+                    # C.g:342:4: 'sizeof' unary_expression
+                    self.match(self.input, 73, self.FOLLOW_73_in_unary_expression1305)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1305)
+                    self.following.append(self.FOLLOW_unary_expression_in_unary_expression1307)
                     self.unary_expression()
                     self.following.pop()
                     if self.failed:
@@ -5286,19 +5296,19 @@ class CParser(Parser):
 
 
                 elif alt62 == 6:
-                    # C.g:335:4: 'sizeof' '(' type_name ')'
-                    self.match(self.input, 73, self.FOLLOW_73_in_unary_expression1310)
+                    # C.g:343:4: 'sizeof' '(' type_name ')'
+                    self.match(self.input, 73, self.FOLLOW_73_in_unary_expression1312)
                     if self.failed:
                         return 
-                    self.match(self.input, 61, self.FOLLOW_61_in_unary_expression1312)
+                    self.match(self.input, 61, self.FOLLOW_61_in_unary_expression1314)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_type_name_in_unary_expression1314)
+                    self.following.append(self.FOLLOW_type_name_in_unary_expression1316)
                     self.type_name()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 62, self.FOLLOW_62_in_unary_expression1316)
+                    self.match(self.input, 62, self.FOLLOW_62_in_unary_expression1318)
                     if self.failed:
                         return 
 
@@ -5319,30 +5329,39 @@ class CParser(Parser):
 
 
     # $ANTLR start postfix_expression
-    # C.g:338:1: postfix_expression : p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' IDENTIFIER | '*' IDENTIFIER | '->' IDENTIFIER | '++' | '--' )* ;
+    # C.g:346:1: postfix_expression : p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* ;
     def postfix_expression(self, ):
-
+        self.postfix_expression_stack.append(postfix_expression_scope())
         postfix_expression_StartIndex = self.input.index()
         a = None
         b = None
+        x = None
+        y = None
+        z = None
         p = None
 
         c = None
 
 
+               \r
+        self.postfix_expression_stack[-1].FuncCallText =  ''\r
+
         try:
             try:
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 41):
                     return 
 
-                # C.g:339:2: (p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' IDENTIFIER | '*' IDENTIFIER | '->' IDENTIFIER | '++' | '--' )* )
-                # C.g:339:6: p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' IDENTIFIER | '*' IDENTIFIER | '->' IDENTIFIER | '++' | '--' )*
-                self.following.append(self.FOLLOW_primary_expression_in_postfix_expression1331)
+                # C.g:353:2: (p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )* )
+                # C.g:353:6: p= primary_expression ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )*
+                self.following.append(self.FOLLOW_primary_expression_in_postfix_expression1342)
                 p = self.primary_expression()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:340:9: ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' IDENTIFIER | '*' IDENTIFIER | '->' IDENTIFIER | '++' | '--' )*
+                if self.backtracking == 0:
+                    self.postfix_expression_stack[-1].FuncCallText += self.input.toString(p.start,p.stop)
+
+                # C.g:354:9: ( '[' expression ']' | '(' a= ')' | '(' c= argument_expression_list b= ')' | '(' macro_parameter_list ')' | '.' x= IDENTIFIER | '*' y= IDENTIFIER | '->' z= IDENTIFIER | '++' | '--' )*
                 while True: #loop63
                     alt63 = 10
                     LA63 = self.input.LA(1)
@@ -5364,10 +5383,8 @@ class CParser(Parser):
                         LA63 = self.input.LA(2)
                         if LA63 == 62:
                             alt63 = 2
-                        elif LA63 == 29 or LA63 == 30 or LA63 == 31 or LA63 == 32 or LA63 == 33 or LA63 == 34 or LA63 == 35 or LA63 == 36 or LA63 == 37 or LA63 == 38 or LA63 == 39 or LA63 == 40 or LA63 == 41 or LA63 == 42 or LA63 == 45 or LA63 == 46 or LA63 == 48 or LA63 == 49 or LA63 == 50 or LA63 == 51 or LA63 == 52 or LA63 == 53 or LA63 == 54 or LA63 == 55 or LA63 == 56 or LA63 == 57 or LA63 == 58 or LA63 == 59 or LA63 == 60:
-                            alt63 = 4
                         elif LA63 == IDENTIFIER:
-                            LA63_54 = self.input.LA(3)
+                            LA63_42 = self.input.LA(3)
 
                             if (self.synpred114()) :
                                 alt63 = 3
@@ -5375,8 +5392,10 @@ class CParser(Parser):
                                 alt63 = 4
 
 
+                        elif LA63 == HEX_LITERAL or LA63 == OCTAL_LITERAL or LA63 == DECIMAL_LITERAL or LA63 == CHARACTER_LITERAL or LA63 == STRING_LITERAL or LA63 == FLOATING_POINT_LITERAL or LA63 == 61 or LA63 == 67 or LA63 == 68 or LA63 == 71 or LA63 == 72 or LA63 == 73 or LA63 == 76 or LA63 == 77 or LA63 == 78:
+                            alt63 = 3
                         elif LA63 == 65:
-                            LA63_56 = self.input.LA(3)
+                            LA63_52 = self.input.LA(3)
 
                             if (self.synpred114()) :
                                 alt63 = 3
@@ -5384,8 +5403,8 @@ class CParser(Parser):
                                 alt63 = 4
 
 
-                        elif LA63 == HEX_LITERAL or LA63 == OCTAL_LITERAL or LA63 == DECIMAL_LITERAL or LA63 == CHARACTER_LITERAL or LA63 == STRING_LITERAL or LA63 == FLOATING_POINT_LITERAL or LA63 == 61 or LA63 == 67 or LA63 == 68 or LA63 == 71 or LA63 == 72 or LA63 == 73 or LA63 == 76 or LA63 == 77 or LA63 == 78:
-                            alt63 = 3
+                        elif LA63 == 29 or LA63 == 30 or LA63 == 31 or LA63 == 32 or LA63 == 33 or LA63 == 34 or LA63 == 35 or LA63 == 36 or LA63 == 37 or LA63 == 38 or LA63 == 39 or LA63 == 40 or LA63 == 41 or LA63 == 42 or LA63 == 45 or LA63 == 46 or LA63 == 48 or LA63 == 49 or LA63 == 50 or LA63 == 51 or LA63 == 52 or LA63 == 53 or LA63 == 54 or LA63 == 55 or LA63 == 56 or LA63 == 57 or LA63 == 58 or LA63 == 59 or LA63 == 60:
+                            alt63 = 4
 
                     elif LA63 == 74:
                         alt63 = 5
@@ -5397,108 +5416,120 @@ class CParser(Parser):
                         alt63 = 9
 
                     if alt63 == 1:
-                        # C.g:340:13: '[' expression ']'
-                        self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1345)
+                        # C.g:354:13: '[' expression ']'
+                        self.match(self.input, 63, self.FOLLOW_63_in_postfix_expression1358)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_expression_in_postfix_expression1347)
+                        self.following.append(self.FOLLOW_expression_in_postfix_expression1360)
                         self.expression()
                         self.following.pop()
                         if self.failed:
                             return 
-                        self.match(self.input, 64, self.FOLLOW_64_in_postfix_expression1349)
+                        self.match(self.input, 64, self.FOLLOW_64_in_postfix_expression1362)
                         if self.failed:
                             return 
 
 
                     elif alt63 == 2:
-                        # C.g:341:13: '(' a= ')'
-                        self.match(self.input, 61, self.FOLLOW_61_in_postfix_expression1363)
+                        # C.g:355:13: '(' a= ')'
+                        self.match(self.input, 61, self.FOLLOW_61_in_postfix_expression1376)
                         if self.failed:
                             return 
                         a = self.input.LT(1)
-                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1367)
+                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1380)
                         if self.failed:
                             return 
                         if self.backtracking == 0:
-                            self.StoreFunctionCalling(p.start.line, p.start.charPositionInLine, a.line, a.charPositionInLine, self.input.toString(p.start,p.stop), '')
+                            self.StoreFunctionCalling(p.start.line, p.start.charPositionInLine, a.line, a.charPositionInLine, self.postfix_expression_stack[-1].FuncCallText, '')
 
 
 
                     elif alt63 == 3:
-                        # C.g:342:13: '(' c= argument_expression_list b= ')'
-                        self.match(self.input, 61, self.FOLLOW_61_in_postfix_expression1382)
+                        # C.g:356:13: '(' c= argument_expression_list b= ')'
+                        self.match(self.input, 61, self.FOLLOW_61_in_postfix_expression1395)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_argument_expression_list_in_postfix_expression1386)
+                        self.following.append(self.FOLLOW_argument_expression_list_in_postfix_expression1399)
                         c = self.argument_expression_list()
                         self.following.pop()
                         if self.failed:
                             return 
                         b = self.input.LT(1)
-                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1390)
+                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1403)
                         if self.failed:
                             return 
                         if self.backtracking == 0:
-                            self.StoreFunctionCalling(p.start.line, p.start.charPositionInLine, b.line, b.charPositionInLine, self.input.toString(p.start,p.stop), self.input.toString(c.start,c.stop))
+                            self.StoreFunctionCalling(p.start.line, p.start.charPositionInLine, b.line, b.charPositionInLine, self.postfix_expression_stack[-1].FuncCallText, self.input.toString(c.start,c.stop))
 
 
 
                     elif alt63 == 4:
-                        # C.g:343:13: '(' macro_parameter_list ')'
-                        self.match(self.input, 61, self.FOLLOW_61_in_postfix_expression1406)
+                        # C.g:357:13: '(' macro_parameter_list ')'
+                        self.match(self.input, 61, self.FOLLOW_61_in_postfix_expression1419)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_macro_parameter_list_in_postfix_expression1408)
+                        self.following.append(self.FOLLOW_macro_parameter_list_in_postfix_expression1421)
                         self.macro_parameter_list()
                         self.following.pop()
                         if self.failed:
                             return 
-                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1410)
+                        self.match(self.input, 62, self.FOLLOW_62_in_postfix_expression1423)
                         if self.failed:
                             return 
 
 
                     elif alt63 == 5:
-                        # C.g:344:13: '.' IDENTIFIER
-                        self.match(self.input, 74, self.FOLLOW_74_in_postfix_expression1424)
+                        # C.g:358:13: '.' x= IDENTIFIER
+                        self.match(self.input, 74, self.FOLLOW_74_in_postfix_expression1437)
                         if self.failed:
                             return 
-                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1426)
+                        x = self.input.LT(1)
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1441)
                         if self.failed:
                             return 
+                        if self.backtracking == 0:
+                            self.postfix_expression_stack[-1].FuncCallText += '.' + x.text
+
 
 
                     elif alt63 == 6:
-                        # C.g:345:13: '*' IDENTIFIER
-                        self.match(self.input, 65, self.FOLLOW_65_in_postfix_expression1440)
+                        # C.g:359:13: '*' y= IDENTIFIER
+                        self.match(self.input, 65, self.FOLLOW_65_in_postfix_expression1457)
                         if self.failed:
                             return 
-                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1442)
+                        y = self.input.LT(1)
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1461)
                         if self.failed:
                             return 
+                        if self.backtracking == 0:
+                            self.postfix_expression_stack[-1].FuncCallText = y.text
+
 
 
                     elif alt63 == 7:
-                        # C.g:346:13: '->' IDENTIFIER
-                        self.match(self.input, 75, self.FOLLOW_75_in_postfix_expression1456)
+                        # C.g:360:13: '->' z= IDENTIFIER
+                        self.match(self.input, 75, self.FOLLOW_75_in_postfix_expression1477)
                         if self.failed:
                             return 
-                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1458)
+                        z = self.input.LT(1)
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_postfix_expression1481)
                         if self.failed:
                             return 
+                        if self.backtracking == 0:
+                            self.postfix_expression_stack[-1].FuncCallText += '->' + z.text
+
 
 
                     elif alt63 == 8:
-                        # C.g:347:13: '++'
-                        self.match(self.input, 71, self.FOLLOW_71_in_postfix_expression1472)
+                        # C.g:361:13: '++'
+                        self.match(self.input, 71, self.FOLLOW_71_in_postfix_expression1497)
                         if self.failed:
                             return 
 
 
                     elif alt63 == 9:
-                        # C.g:348:13: '--'
-                        self.match(self.input, 72, self.FOLLOW_72_in_postfix_expression1486)
+                        # C.g:362:13: '--'
+                        self.match(self.input, 72, self.FOLLOW_72_in_postfix_expression1511)
                         if self.failed:
                             return 
 
@@ -5518,6 +5549,7 @@ class CParser(Parser):
             if self.backtracking > 0:
                 self.memoize(self.input, 41, postfix_expression_StartIndex)
 
+            self.postfix_expression_stack.pop()
             pass
 
         return 
@@ -5526,7 +5558,7 @@ class CParser(Parser):
 
 
     # $ANTLR start macro_parameter_list
-    # C.g:352:1: macro_parameter_list : parameter_declaration ( ',' parameter_declaration )* ;
+    # C.g:366:1: macro_parameter_list : parameter_declaration ( ',' parameter_declaration )* ;
     def macro_parameter_list(self, ):
 
         macro_parameter_list_StartIndex = self.input.index()
@@ -5535,14 +5567,14 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 42):
                     return 
 
-                # C.g:353:2: ( parameter_declaration ( ',' parameter_declaration )* )
-                # C.g:353:4: parameter_declaration ( ',' parameter_declaration )*
-                self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1509)
+                # C.g:367:2: ( parameter_declaration ( ',' parameter_declaration )* )
+                # C.g:367:4: parameter_declaration ( ',' parameter_declaration )*
+                self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1534)
                 self.parameter_declaration()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:353:26: ( ',' parameter_declaration )*
+                # C.g:367:26: ( ',' parameter_declaration )*
                 while True: #loop64
                     alt64 = 2
                     LA64_0 = self.input.LA(1)
@@ -5552,11 +5584,11 @@ class CParser(Parser):
 
 
                     if alt64 == 1:
-                        # C.g:353:27: ',' parameter_declaration
-                        self.match(self.input, 27, self.FOLLOW_27_in_macro_parameter_list1512)
+                        # C.g:367:27: ',' parameter_declaration
+                        self.match(self.input, 27, self.FOLLOW_27_in_macro_parameter_list1537)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1514)
+                        self.following.append(self.FOLLOW_parameter_declaration_in_macro_parameter_list1539)
                         self.parameter_declaration()
                         self.following.pop()
                         if self.failed:
@@ -5586,7 +5618,7 @@ class CParser(Parser):
 
 
     # $ANTLR start unary_operator
-    # C.g:356:1: unary_operator : ( '&' | '*' | '+' | '-' | '~' | '!' );
+    # C.g:370:1: unary_operator : ( '&' | '*' | '+' | '-' | '~' | '!' );
     def unary_operator(self, ):
 
         unary_operator_StartIndex = self.input.index()
@@ -5595,7 +5627,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 43):
                     return 
 
-                # C.g:357:2: ( '&' | '*' | '+' | '-' | '~' | '!' )
+                # C.g:371:2: ( '&' | '*' | '+' | '-' | '~' | '!' )
                 # C.g:
                 if self.input.LA(1) == 65 or (67 <= self.input.LA(1) <= 68) or (76 <= self.input.LA(1) <= 78):
                     self.input.consume();
@@ -5639,7 +5671,7 @@ class CParser(Parser):
 
 
     # $ANTLR start primary_expression
-    # C.g:365:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );
+    # C.g:379:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );
     def primary_expression(self, ):
 
         retval = self.primary_expression_return()
@@ -5650,7 +5682,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 44):
                     return retval
 
-                # C.g:366:2: ( IDENTIFIER | constant | '(' expression ')' )
+                # C.g:380:2: ( IDENTIFIER | constant | '(' expression ')' )
                 alt65 = 3
                 LA65 = self.input.LA(1)
                 if LA65 == IDENTIFIER:
@@ -5664,20 +5696,20 @@ class CParser(Parser):
                         self.failed = True
                         return retval
 
-                    nvae = NoViableAltException("365:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 65, 0, self.input)
+                    nvae = NoViableAltException("379:1: primary_expression : ( IDENTIFIER | constant | '(' expression ')' );", 65, 0, self.input)
 
                     raise nvae
 
                 if alt65 == 1:
-                    # C.g:366:4: IDENTIFIER
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_primary_expression1563)
+                    # C.g:380:4: IDENTIFIER
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_primary_expression1588)
                     if self.failed:
                         return retval
 
 
                 elif alt65 == 2:
-                    # C.g:367:4: constant
-                    self.following.append(self.FOLLOW_constant_in_primary_expression1568)
+                    # C.g:381:4: constant
+                    self.following.append(self.FOLLOW_constant_in_primary_expression1593)
                     self.constant()
                     self.following.pop()
                     if self.failed:
@@ -5685,16 +5717,16 @@ class CParser(Parser):
 
 
                 elif alt65 == 3:
-                    # C.g:368:4: '(' expression ')'
-                    self.match(self.input, 61, self.FOLLOW_61_in_primary_expression1573)
+                    # C.g:382:4: '(' expression ')'
+                    self.match(self.input, 61, self.FOLLOW_61_in_primary_expression1598)
                     if self.failed:
                         return retval
-                    self.following.append(self.FOLLOW_expression_in_primary_expression1575)
+                    self.following.append(self.FOLLOW_expression_in_primary_expression1600)
                     self.expression()
                     self.following.pop()
                     if self.failed:
                         return retval
-                    self.match(self.input, 62, self.FOLLOW_62_in_primary_expression1577)
+                    self.match(self.input, 62, self.FOLLOW_62_in_primary_expression1602)
                     if self.failed:
                         return retval
 
@@ -5717,7 +5749,7 @@ class CParser(Parser):
 
 
     # $ANTLR start constant
-    # C.g:371:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( STRING_LITERAL )+ | FLOATING_POINT_LITERAL );
+    # C.g:385:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( STRING_LITERAL )+ | FLOATING_POINT_LITERAL );
     def constant(self, ):
 
         constant_StartIndex = self.input.index()
@@ -5726,7 +5758,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 45):
                     return 
 
-                # C.g:372:5: ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( STRING_LITERAL )+ | FLOATING_POINT_LITERAL )
+                # C.g:386:5: ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( STRING_LITERAL )+ | FLOATING_POINT_LITERAL )
                 alt67 = 6
                 LA67 = self.input.LA(1)
                 if LA67 == HEX_LITERAL:
@@ -5746,41 +5778,41 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("371:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( STRING_LITERAL )+ | FLOATING_POINT_LITERAL );", 67, 0, self.input)
+                    nvae = NoViableAltException("385:1: constant : ( HEX_LITERAL | OCTAL_LITERAL | DECIMAL_LITERAL | CHARACTER_LITERAL | ( STRING_LITERAL )+ | FLOATING_POINT_LITERAL );", 67, 0, self.input)
 
                     raise nvae
 
                 if alt67 == 1:
-                    # C.g:372:9: HEX_LITERAL
-                    self.match(self.input, HEX_LITERAL, self.FOLLOW_HEX_LITERAL_in_constant1593)
+                    # C.g:386:9: HEX_LITERAL
+                    self.match(self.input, HEX_LITERAL, self.FOLLOW_HEX_LITERAL_in_constant1618)
                     if self.failed:
                         return 
 
 
                 elif alt67 == 2:
-                    # C.g:373:9: OCTAL_LITERAL
-                    self.match(self.input, OCTAL_LITERAL, self.FOLLOW_OCTAL_LITERAL_in_constant1603)
+                    # C.g:387:9: OCTAL_LITERAL
+                    self.match(self.input, OCTAL_LITERAL, self.FOLLOW_OCTAL_LITERAL_in_constant1628)
                     if self.failed:
                         return 
 
 
                 elif alt67 == 3:
-                    # C.g:374:9: DECIMAL_LITERAL
-                    self.match(self.input, DECIMAL_LITERAL, self.FOLLOW_DECIMAL_LITERAL_in_constant1613)
+                    # C.g:388:9: DECIMAL_LITERAL
+                    self.match(self.input, DECIMAL_LITERAL, self.FOLLOW_DECIMAL_LITERAL_in_constant1638)
                     if self.failed:
                         return 
 
 
                 elif alt67 == 4:
-                    # C.g:375:7: CHARACTER_LITERAL
-                    self.match(self.input, CHARACTER_LITERAL, self.FOLLOW_CHARACTER_LITERAL_in_constant1621)
+                    # C.g:389:7: CHARACTER_LITERAL
+                    self.match(self.input, CHARACTER_LITERAL, self.FOLLOW_CHARACTER_LITERAL_in_constant1646)
                     if self.failed:
                         return 
 
 
                 elif alt67 == 5:
-                    # C.g:376:7: ( STRING_LITERAL )+
-                    # C.g:376:7: ( STRING_LITERAL )+
+                    # C.g:390:7: ( STRING_LITERAL )+
+                    # C.g:390:7: ( STRING_LITERAL )+
                     cnt66 = 0
                     while True: #loop66
                         alt66 = 2
@@ -5792,7 +5824,7 @@ class CParser(Parser):
 
                         if alt66 == 1:
                             # C.g:0:0: STRING_LITERAL
-                            self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_constant1629)
+                            self.match(self.input, STRING_LITERAL, self.FOLLOW_STRING_LITERAL_in_constant1654)
                             if self.failed:
                                 return 
 
@@ -5814,8 +5846,8 @@ class CParser(Parser):
 
 
                 elif alt67 == 6:
-                    # C.g:377:9: FLOATING_POINT_LITERAL
-                    self.match(self.input, FLOATING_POINT_LITERAL, self.FOLLOW_FLOATING_POINT_LITERAL_in_constant1640)
+                    # C.g:391:9: FLOATING_POINT_LITERAL
+                    self.match(self.input, FLOATING_POINT_LITERAL, self.FOLLOW_FLOATING_POINT_LITERAL_in_constant1665)
                     if self.failed:
                         return 
 
@@ -5842,7 +5874,7 @@ class CParser(Parser):
 
 
     # $ANTLR start expression
-    # C.g:382:1: expression : assignment_expression ( ',' assignment_expression )* ;
+    # C.g:396:1: expression : assignment_expression ( ',' assignment_expression )* ;
     def expression(self, ):
 
         retval = self.expression_return()
@@ -5853,14 +5885,14 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 46):
                     return retval
 
-                # C.g:383:2: ( assignment_expression ( ',' assignment_expression )* )
-                # C.g:383:4: assignment_expression ( ',' assignment_expression )*
-                self.following.append(self.FOLLOW_assignment_expression_in_expression1656)
+                # C.g:397:2: ( assignment_expression ( ',' assignment_expression )* )
+                # C.g:397:4: assignment_expression ( ',' assignment_expression )*
+                self.following.append(self.FOLLOW_assignment_expression_in_expression1681)
                 self.assignment_expression()
                 self.following.pop()
                 if self.failed:
                     return retval
-                # C.g:383:26: ( ',' assignment_expression )*
+                # C.g:397:26: ( ',' assignment_expression )*
                 while True: #loop68
                     alt68 = 2
                     LA68_0 = self.input.LA(1)
@@ -5870,11 +5902,11 @@ class CParser(Parser):
 
 
                     if alt68 == 1:
-                        # C.g:383:27: ',' assignment_expression
-                        self.match(self.input, 27, self.FOLLOW_27_in_expression1659)
+                        # C.g:397:27: ',' assignment_expression
+                        self.match(self.input, 27, self.FOLLOW_27_in_expression1684)
                         if self.failed:
                             return retval
-                        self.following.append(self.FOLLOW_assignment_expression_in_expression1661)
+                        self.following.append(self.FOLLOW_assignment_expression_in_expression1686)
                         self.assignment_expression()
                         self.following.pop()
                         if self.failed:
@@ -5906,7 +5938,7 @@ class CParser(Parser):
 
 
     # $ANTLR start constant_expression
-    # C.g:386:1: constant_expression : conditional_expression ;
+    # C.g:400:1: constant_expression : conditional_expression ;
     def constant_expression(self, ):
 
         constant_expression_StartIndex = self.input.index()
@@ -5915,9 +5947,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 47):
                     return 
 
-                # C.g:387:2: ( conditional_expression )
-                # C.g:387:4: conditional_expression
-                self.following.append(self.FOLLOW_conditional_expression_in_constant_expression1674)
+                # C.g:401:2: ( conditional_expression )
+                # C.g:401:4: conditional_expression
+                self.following.append(self.FOLLOW_conditional_expression_in_constant_expression1699)
                 self.conditional_expression()
                 self.following.pop()
                 if self.failed:
@@ -5941,7 +5973,7 @@ class CParser(Parser):
 
 
     # $ANTLR start assignment_expression
-    # C.g:390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );
+    # C.g:404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );
     def assignment_expression(self, ):
 
         assignment_expression_StartIndex = self.input.index()
@@ -5950,7 +5982,7 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 48):
                     return 
 
-                # C.g:391:2: ( lvalue assignment_operator assignment_expression | conditional_expression )
+                # C.g:405:2: ( lvalue assignment_operator assignment_expression | conditional_expression )
                 alt69 = 2
                 LA69 = self.input.LA(1)
                 if LA69 == IDENTIFIER:
@@ -5967,7 +5999,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 13, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 13, self.input)
 
                             raise nvae
 
@@ -5983,7 +6015,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 14, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 14, self.input)
 
                             raise nvae
 
@@ -5999,7 +6031,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 15, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 15, self.input)
 
                             raise nvae
 
@@ -6015,7 +6047,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 16, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 16, self.input)
 
                             raise nvae
 
@@ -6031,7 +6063,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 17, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 17, self.input)
 
                             raise nvae
 
@@ -6047,7 +6079,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 18, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 18, self.input)
 
                             raise nvae
 
@@ -6063,20 +6095,20 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 19, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 19, self.input)
 
                             raise nvae
 
-                    elif LA69 == EOF or LA69 == 25 or LA69 == 27 or LA69 == 44 or LA69 == 47 or LA69 == 62 or LA69 == 64 or LA69 == 67 or LA69 == 68 or LA69 == 69 or LA69 == 70 or LA69 == 76 or LA69 == 89 or LA69 == 90 or LA69 == 91 or LA69 == 92 or LA69 == 93 or LA69 == 94 or LA69 == 95 or LA69 == 96 or LA69 == 97 or LA69 == 98 or LA69 == 99 or LA69 == 100 or LA69 == 101:
-                        alt69 = 2
                     elif LA69 == 28 or LA69 == 79 or LA69 == 80 or LA69 == 81 or LA69 == 82 or LA69 == 83 or LA69 == 84 or LA69 == 85 or LA69 == 86 or LA69 == 87 or LA69 == 88:
                         alt69 = 1
+                    elif LA69 == EOF or LA69 == 25 or LA69 == 27 or LA69 == 44 or LA69 == 47 or LA69 == 62 or LA69 == 64 or LA69 == 67 or LA69 == 68 or LA69 == 69 or LA69 == 70 or LA69 == 76 or LA69 == 89 or LA69 == 90 or LA69 == 91 or LA69 == 92 or LA69 == 93 or LA69 == 94 or LA69 == 95 or LA69 == 96 or LA69 == 97 or LA69 == 98 or LA69 == 99 or LA69 == 100 or LA69 == 101:
+                        alt69 = 2
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 1, self.input)
+                        nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 1, self.input)
 
                         raise nvae
 
@@ -6094,7 +6126,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 41, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 41, self.input)
 
                             raise nvae
 
@@ -6110,7 +6142,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 42, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 42, self.input)
 
                             raise nvae
 
@@ -6126,7 +6158,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 43, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 43, self.input)
 
                             raise nvae
 
@@ -6142,7 +6174,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 44, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 44, self.input)
 
                             raise nvae
 
@@ -6158,7 +6190,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 45, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 45, self.input)
 
                             raise nvae
 
@@ -6174,7 +6206,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 46, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 46, self.input)
 
                             raise nvae
 
@@ -6190,7 +6222,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 47, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 47, self.input)
 
                             raise nvae
 
@@ -6203,7 +6235,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 2, self.input)
+                        nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 2, self.input)
 
                         raise nvae
 
@@ -6221,7 +6253,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 69, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 69, self.input)
 
                             raise nvae
 
@@ -6237,7 +6269,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 70, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 70, self.input)
 
                             raise nvae
 
@@ -6253,7 +6285,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 71, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 71, self.input)
 
                             raise nvae
 
@@ -6269,7 +6301,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 72, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 72, self.input)
 
                             raise nvae
 
@@ -6285,7 +6317,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 73, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 73, self.input)
 
                             raise nvae
 
@@ -6301,7 +6333,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 74, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 74, self.input)
 
                             raise nvae
 
@@ -6317,20 +6349,20 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("390:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 75, self.input)
+                            nvae = NoViableAltException("404:1: assignment_expression : ( lvalue assignment_operator assignment_expression | conditional_expression );", 69, 75, self.input)
 
                             raise nvae
 
-                    elif LA69 == 28 or LA69 == 79 or LA69 == 80 or LA69 == 81 or LA69 == 82 or LA69 == 83 or LA69 == 84 or LA69 == 85 or LA69 == 86 or LA69 == 87 or LA69 == 88:
-                      &n