ECC: modify C parser to deal with keyword 'OPTIONAL' and ignore concatenation '\'
authorjlin16 <jlin16@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 28 Jan 2008 05:06:44 +0000 (05:06 +0000)
committerjlin16 <jlin16@7335b38e-4728-0410-8992-fb3ffe349368>
Mon, 28 Jan 2008 05:06:44 +0000 (05:06 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@976 7335b38e-4728-0410-8992-fb3ffe349368

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

index e69038a..c61758c 100644 (file)
@@ -91,10 +91,14 @@ scope {
 @after{\r
   self.StoreFunctionDefinition($function_definition.start.line, $function_definition.start.charPositionInLine, $function_definition.stop.line, $function_definition.stop.charPositionInLine, $function_definition::ModifierText, $function_definition::DeclText, $function_definition::LBLine, $function_definition::LBOffset, $function_definition::DeclLine, $function_definition::DeclOffset)\r
 }\r
-       :       declaration_specifiers? declarator\r
+       :       d=declaration_specifiers? declarator\r
                (       declaration+ a=compound_statement       // K&R style\r
                |       b=compound_statement                            // ANSI style\r
-               ) { $function_definition::ModifierText = $declaration_specifiers.text\r
+               ) { \r
+                   if d != None:\r
+                     $function_definition::ModifierText = $declaration_specifiers.text\r
+                   else:\r
+                     $function_definition::ModifierText = ''\r
                    $function_definition::DeclText = $declarator.text\r
                    $function_definition::DeclLine = $declarator.start.line\r
                    $function_definition::DeclOffset = $declarator.start.charPositionInLine\r
@@ -117,12 +121,15 @@ declaration
            self.StoreTypedefDefinition($a.line, $a.charPositionInLine, $d.line, $d.charPositionInLine, '', $c.text)\r
          }     \r
        | s=declaration_specifiers t=init_declarator_list? e=';' \r
-       {self.StoreVariableDeclaration($s.start.line, $s.start.charPositionInLine, $e.line, $e.charPositionInLine, $s.text, $t.text)}\r
+       {\r
+       if t != None:\r
+         self.StoreVariableDeclaration($s.start.line, $s.start.charPositionInLine, $e.line, $e.charPositionInLine, $s.text, $t.text)\r
+       }\r
        ;\r
 \r
 declaration_specifiers\r
        :   (   storage_class_specifier\r
-               |   type_specifier\r
+               |   type_specifier pointer?\r
         |   type_qualifier\r
         )+\r
        ;\r
@@ -140,6 +147,7 @@ storage_class_specifier
        | 'static'\r
        | 'auto'\r
        | 'register'\r
+       | 'STATIC'\r
        ;\r
 \r
 type_specifier\r
@@ -158,7 +166,7 @@ type_specifier
        ;\r
 \r
 type_id\r
-    :   IDENTIFIER \r
+    :   IDENTIFIER\r
        //{self.printTokenInfo($a.line, $a.pos, $a.text)}\r
     ;\r
 \r
@@ -214,10 +222,11 @@ type_qualifier
        | 'volatile'\r
        | 'IN'\r
        | 'OUT'\r
+       | 'OPTIONAL'\r
        ;\r
 \r
 declarator\r
-       : pointer? direct_declarator\r
+       : ('EFIAPI')? pointer? direct_declarator\r
        | pointer\r
        ;\r
 \r
@@ -245,11 +254,11 @@ parameter_type_list
        ;\r
 \r
 parameter_list\r
-       : parameter_declaration (',' parameter_declaration)*\r
+       : parameter_declaration (',' ('OPTIONAL')? parameter_declaration)*\r
        ;\r
 \r
 parameter_declaration\r
-       : declaration_specifiers (declarator|abstract_declarator)+\r
+       : declaration_specifiers (declarator|abstract_declarator)+ ('OPTIONAL')?\r
        ;\r
 \r
 identifier_list\r
@@ -349,7 +358,7 @@ constant
     |   OCTAL_LITERAL\r
     |   DECIMAL_LITERAL\r
     |  CHARACTER_LITERAL\r
-    |  STRING_LITERAL\r
+    |  STRING_LITERAL+\r
     |   FLOATING_POINT_LITERAL\r
     ;\r
 \r
@@ -431,6 +440,7 @@ statement
        | iteration_statement\r
        | jump_statement\r
        | macro_statement\r
+       | declaration\r
        ;\r
 \r
 macro_statement\r
@@ -482,13 +492,13 @@ IDENTIFIER
 fragment\r
 LETTER\r
        :       '$'\r
-       |       'A'..'Z'\r
-       |       'a'..'z'\r
+       |  'A'..'Z'\r
+       |  'a'..'z'\r
        |       '_'\r
        ;\r
 \r
 CHARACTER_LITERAL\r
-    :   '\'' ( EscapeSequence | ~('\''|'\\') ) '\''\r
+    :   ('L')? '\'' ( EscapeSequence | ~('\''|'\\') ) '\''\r
     ;\r
 \r
 STRING_LITERAL\r
@@ -507,7 +517,7 @@ HexDigit : ('0'..'9'|'a'..'f'|'A'..'F') ;
 fragment\r
 IntegerTypeSuffix\r
        :       ('u'|'U')? ('l'|'L')\r
-       |       ('u'|'U')  ('l'|'L')?\r
+       |       ('u'|'U')  ('l'|'L')? ('l'|'L')?\r
        ;\r
 \r
 FLOATING_POINT_LITERAL\r
@@ -525,7 +535,7 @@ FloatTypeSuffix : ('f'|'F'|'d'|'D') ;
 \r
 fragment\r
 EscapeSequence\r
-    :   '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')\r
+    :  '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')\r
     |   OctalEscape\r
     ;\r
 \r
@@ -544,10 +554,14 @@ UnicodeEscape
 WS  :  (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;}\r
     ;\r
 \r
-//COMMENT[content]\r
-//@init{content = ''}\r
-//    :   '/*' c=( options {greedy=false;} : . )* {content += c} '*/' {$channel=HIDDEN; print content}\r
+// ingore '\' of line concatenation\r
+BS  : ('\\') {$channel=HIDDEN;}\r
+    ;\r
+    \r
+// ingore function modifiers\r
+//FUNC_MODIFIERS  : 'EFIAPI' {$channel=HIDDEN;}\r
 //    ;\r
+       \r
 UnicodeVocabulary\r
     : '\u0003'..'\uFFFE'\r
     ;\r
index a468f81..4e3160f 100644 (file)
@@ -1,4 +1,4 @@
-# $ANTLR 3.0.1 C.g 2008-01-22 14:44:55
+# $ANTLR 3.0.1 C.g 2008-01-25 19:33:36
 
 from antlr3 import *
 from antlr3.compat import set, frozenset
@@ -19,7 +19,6 @@ STRING_LITERAL=9
 T32=32
 T81=81
 T41=41
-T24=24
 FloatTypeSuffix=16
 T62=62
 DECIMAL_LITERAL=7
@@ -28,14 +27,14 @@ T68=68
 T73=73
 T84=84
 T33=33
-UnicodeVocabulary=20
+UnicodeVocabulary=21
 T78=78
 WS=19
-LINE_COMMAND=23
+LINE_COMMAND=24
 T42=42
 T96=96
 T71=71
-LINE_COMMENT=22
+LINE_COMMENT=23
 T72=72
 T94=94
 FLOATING_POINT_LITERAL=10
@@ -57,6 +56,7 @@ T36=36
 T58=58
 T93=93
 T35=35
+T107=107
 OCTAL_LITERAL=6
 T83=83
 T61=61
@@ -67,6 +67,7 @@ T101=101
 T64=64
 T25=25
 T91=91
+T105=105
 T37=37
 T86=86
 EscapeSequence=12
@@ -75,6 +76,7 @@ T51=51
 T46=46
 T77=77
 T38=38
+T106=106
 T69=69
 T39=39
 T44=44
@@ -83,12 +85,13 @@ LETTER=11
 Exponent=15
 T95=95
 T50=50
+BS=20
 T92=92
 T43=43
 T28=28
 T40=40
 T66=66
-COMMENT=21
+COMMENT=22
 T88=88
 T63=63
 T57=57
@@ -102,8 +105,9 @@ T97=97
 T48=48
 T54=54
 EOF=-1
+T104=104
 T47=47
-Tokens=104
+Tokens=108
 T53=53
 OctalEscape=17
 T99=99
@@ -117,25 +121,25 @@ class CLexer(Lexer):
 
     def __init__(self, input=None):
         Lexer.__init__(self, input)
-        self.dfa26 = self.DFA26(
-            self, 26,
-            eot = self.DFA26_eot,
-            eof = self.DFA26_eof,
-            min = self.DFA26_min,
-            max = self.DFA26_max,
-            accept = self.DFA26_accept,
-            special = self.DFA26_special,
-            transition = self.DFA26_transition
+        self.dfa28 = self.DFA28(
+            self, 28,
+            eot = self.DFA28_eot,
+            eof = self.DFA28_eof,
+            min = self.DFA28_min,
+            max = self.DFA28_max,
+            accept = self.DFA28_accept,
+            special = self.DFA28_special,
+            transition = self.DFA28_transition
             )
-        self.dfa36 = self.DFA36(
-            self, 36,
-            eot = self.DFA36_eot,
-            eof = self.DFA36_eof,
-            min = self.DFA36_min,
-            max = self.DFA36_max,
-            accept = self.DFA36_accept,
-            special = self.DFA36_special,
-            transition = self.DFA36_transition
+        self.dfa38 = self.DFA38(
+            self, 38,
+            eot = self.DFA38_eot,
+            eof = self.DFA38_eof,
+            min = self.DFA38_min,
+            max = self.DFA38_max,
+            accept = self.DFA38_accept,
+            special = self.DFA38_special,
+            transition = self.DFA38_transition
             )
 
 
@@ -143,38 +147,15 @@ class CLexer(Lexer):
 
 
 
-    # $ANTLR start T24
-    def mT24(self, ):
-
-        try:
-            self.type = T24
-
-            # C.g:7:5: ( ';' )
-            # C.g:7:7: ';'
-            self.match(u';')
-
-
-
-
-
-        finally:
-
-            pass
-
-    # $ANTLR end T24
-
-
-
     # $ANTLR start T25
     def mT25(self, ):
 
         try:
             self.type = T25
 
-            # C.g:8:5: ( 'typedef' )
-            # C.g:8:7: 'typedef'
-            self.match("typedef")
-
+            # C.g:7:5: ( ';' )
+            # C.g:7:7: ';'
+            self.match(u';')
 
 
 
@@ -194,9 +175,10 @@ class CLexer(Lexer):
         try:
             self.type = T26
 
-            # C.g:9:5: ( ',' )
-            # C.g:9:7: ','
-            self.match(u',')
+            # C.g:8:5: ( 'typedef' )
+            # C.g:8:7: 'typedef'
+            self.match("typedef")
+
 
 
 
@@ -216,9 +198,9 @@ class CLexer(Lexer):
         try:
             self.type = T27
 
-            # C.g:10:5: ( '=' )
-            # C.g:10:7: '='
-            self.match(u'=')
+            # C.g:9:5: ( ',' )
+            # C.g:9:7: ','
+            self.match(u',')
 
 
 
@@ -238,10 +220,9 @@ class CLexer(Lexer):
         try:
             self.type = T28
 
-            # C.g:11:5: ( 'extern' )
-            # C.g:11:7: 'extern'
-            self.match("extern")
-
+            # C.g:10:5: ( '=' )
+            # C.g:10:7: '='
+            self.match(u'=')
 
 
 
@@ -261,9 +242,9 @@ class CLexer(Lexer):
         try:
             self.type = T29
 
-            # C.g:12:5: ( 'static' )
-            # C.g:12:7: 'static'
-            self.match("static")
+            # C.g:11:5: ( 'extern' )
+            # C.g:11:7: 'extern'
+            self.match("extern")
 
 
 
@@ -284,9 +265,9 @@ class CLexer(Lexer):
         try:
             self.type = T30
 
-            # C.g:13:5: ( 'auto' )
-            # C.g:13:7: 'auto'
-            self.match("auto")
+            # C.g:12:5: ( 'static' )
+            # C.g:12:7: 'static'
+            self.match("static")
 
 
 
@@ -307,9 +288,9 @@ class CLexer(Lexer):
         try:
             self.type = T31
 
-            # C.g:14:5: ( 'register' )
-            # C.g:14:7: 'register'
-            self.match("register")
+            # C.g:13:5: ( 'auto' )
+            # C.g:13:7: 'auto'
+            self.match("auto")
 
 
 
@@ -330,9 +311,9 @@ class CLexer(Lexer):
         try:
             self.type = T32
 
-            # C.g:15:5: ( 'void' )
-            # C.g:15:7: 'void'
-            self.match("void")
+            # C.g:14:5: ( 'register' )
+            # C.g:14:7: 'register'
+            self.match("register")
 
 
 
@@ -353,9 +334,9 @@ class CLexer(Lexer):
         try:
             self.type = T33
 
-            # C.g:16:5: ( 'char' )
-            # C.g:16:7: 'char'
-            self.match("char")
+            # C.g:15:5: ( 'STATIC' )
+            # C.g:15:7: 'STATIC'
+            self.match("STATIC")
 
 
 
@@ -376,9 +357,9 @@ class CLexer(Lexer):
         try:
             self.type = T34
 
-            # C.g:17:5: ( 'short' )
-            # C.g:17:7: 'short'
-            self.match("short")
+            # C.g:16:5: ( 'void' )
+            # C.g:16:7: 'void'
+            self.match("void")
 
 
 
@@ -399,9 +380,9 @@ class CLexer(Lexer):
         try:
             self.type = T35
 
-            # C.g:18:5: ( 'int' )
-            # C.g:18:7: 'int'
-            self.match("int")
+            # C.g:17:5: ( 'char' )
+            # C.g:17:7: 'char'
+            self.match("char")
 
 
 
@@ -422,9 +403,9 @@ class CLexer(Lexer):
         try:
             self.type = T36
 
-            # C.g:19:5: ( 'long' )
-            # C.g:19:7: 'long'
-            self.match("long")
+            # C.g:18:5: ( 'short' )
+            # C.g:18:7: 'short'
+            self.match("short")
 
 
 
@@ -445,9 +426,9 @@ class CLexer(Lexer):
         try:
             self.type = T37
 
-            # C.g:20:5: ( 'float' )
-            # C.g:20:7: 'float'
-            self.match("float")
+            # C.g:19:5: ( 'int' )
+            # C.g:19:7: 'int'
+            self.match("int")
 
 
 
@@ -468,9 +449,9 @@ class CLexer(Lexer):
         try:
             self.type = T38
 
-            # C.g:21:5: ( 'double' )
-            # C.g:21:7: 'double'
-            self.match("double")
+            # C.g:20:5: ( 'long' )
+            # C.g:20:7: 'long'
+            self.match("long")
 
 
 
@@ -491,9 +472,9 @@ class CLexer(Lexer):
         try:
             self.type = T39
 
-            # C.g:22:5: ( 'signed' )
-            # C.g:22:7: 'signed'
-            self.match("signed")
+            # C.g:21:5: ( 'float' )
+            # C.g:21:7: 'float'
+            self.match("float")
 
 
 
@@ -514,9 +495,9 @@ class CLexer(Lexer):
         try:
             self.type = T40
 
-            # C.g:23:5: ( 'unsigned' )
-            # C.g:23:7: 'unsigned'
-            self.match("unsigned")
+            # C.g:22:5: ( 'double' )
+            # C.g:22:7: 'double'
+            self.match("double")
 
 
 
@@ -537,9 +518,10 @@ class CLexer(Lexer):
         try:
             self.type = T41
 
-            # C.g:24:5: ( '{' )
-            # C.g:24:7: '{'
-            self.match(u'{')
+            # C.g:23:5: ( 'signed' )
+            # C.g:23:7: 'signed'
+            self.match("signed")
+
 
 
 
@@ -559,9 +541,10 @@ class CLexer(Lexer):
         try:
             self.type = T42
 
-            # C.g:25:5: ( '}' )
-            # C.g:25:7: '}'
-            self.match(u'}')
+            # C.g:24:5: ( 'unsigned' )
+            # C.g:24:7: 'unsigned'
+            self.match("unsigned")
+
 
 
 
@@ -581,10 +564,9 @@ class CLexer(Lexer):
         try:
             self.type = T43
 
-            # C.g:26:5: ( 'struct' )
-            # C.g:26:7: 'struct'
-            self.match("struct")
-
+            # C.g:25:5: ( '{' )
+            # C.g:25:7: '{'
+            self.match(u'{')
 
 
 
@@ -604,10 +586,9 @@ class CLexer(Lexer):
         try:
             self.type = T44
 
-            # C.g:27:5: ( 'union' )
-            # C.g:27:7: 'union'
-            self.match("union")
-
+            # C.g:26:5: ( '}' )
+            # C.g:26:7: '}'
+            self.match(u'}')
 
 
 
@@ -627,9 +608,10 @@ class CLexer(Lexer):
         try:
             self.type = T45
 
-            # C.g:28:5: ( ':' )
-            # C.g:28:7: ':'
-            self.match(u':')
+            # C.g:27:5: ( 'struct' )
+            # C.g:27:7: 'struct'
+            self.match("struct")
+
 
 
 
@@ -649,9 +631,9 @@ class CLexer(Lexer):
         try:
             self.type = T46
 
-            # C.g:29:5: ( 'enum' )
-            # C.g:29:7: 'enum'
-            self.match("enum")
+            # C.g:28:5: ( 'union' )
+            # C.g:28:7: 'union'
+            self.match("union")
 
 
 
@@ -672,10 +654,9 @@ class CLexer(Lexer):
         try:
             self.type = T47
 
-            # C.g:30:5: ( 'const' )
-            # C.g:30:7: 'const'
-            self.match("const")
-
+            # C.g:29:5: ( ':' )
+            # C.g:29:7: ':'
+            self.match(u':')
 
 
 
@@ -695,9 +676,9 @@ class CLexer(Lexer):
         try:
             self.type = T48
 
-            # C.g:31:5: ( 'volatile' )
-            # C.g:31:7: 'volatile'
-            self.match("volatile")
+            # C.g:30:5: ( 'enum' )
+            # C.g:30:7: 'enum'
+            self.match("enum")
 
 
 
@@ -718,9 +699,9 @@ class CLexer(Lexer):
         try:
             self.type = T49
 
-            # C.g:32:5: ( 'IN' )
-            # C.g:32:7: 'IN'
-            self.match("IN")
+            # C.g:31:5: ( 'const' )
+            # C.g:31:7: 'const'
+            self.match("const")
 
 
 
@@ -741,9 +722,9 @@ class CLexer(Lexer):
         try:
             self.type = T50
 
-            # C.g:33:5: ( 'OUT' )
-            # C.g:33:7: 'OUT'
-            self.match("OUT")
+            # C.g:32:5: ( 'volatile' )
+            # C.g:32:7: 'volatile'
+            self.match("volatile")
 
 
 
@@ -764,9 +745,10 @@ class CLexer(Lexer):
         try:
             self.type = T51
 
-            # C.g:34:5: ( '(' )
-            # C.g:34:7: '('
-            self.match(u'(')
+            # C.g:33:5: ( 'IN' )
+            # C.g:33:7: 'IN'
+            self.match("IN")
+
 
 
 
@@ -786,9 +768,10 @@ class CLexer(Lexer):
         try:
             self.type = T52
 
-            # C.g:35:5: ( ')' )
-            # C.g:35:7: ')'
-            self.match(u')')
+            # C.g:34:5: ( 'OUT' )
+            # C.g:34:7: 'OUT'
+            self.match("OUT")
+
 
 
 
@@ -808,9 +791,10 @@ class CLexer(Lexer):
         try:
             self.type = T53
 
-            # C.g:36:5: ( '[' )
-            # C.g:36:7: '['
-            self.match(u'[')
+            # C.g:35:5: ( 'OPTIONAL' )
+            # C.g:35:7: 'OPTIONAL'
+            self.match("OPTIONAL")
+
 
 
 
@@ -830,9 +814,10 @@ class CLexer(Lexer):
         try:
             self.type = T54
 
-            # C.g:37:5: ( ']' )
-            # C.g:37:7: ']'
-            self.match(u']')
+            # C.g:36:5: ( 'EFIAPI' )
+            # C.g:36:7: 'EFIAPI'
+            self.match("EFIAPI")
+
 
 
 
@@ -852,9 +837,9 @@ class CLexer(Lexer):
         try:
             self.type = T55
 
-            # C.g:38:5: ( '*' )
-            # C.g:38:7: '*'
-            self.match(u'*')
+            # C.g:37:5: ( '(' )
+            # C.g:37:7: '('
+            self.match(u'(')
 
 
 
@@ -874,10 +859,9 @@ class CLexer(Lexer):
         try:
             self.type = T56
 
-            # C.g:39:5: ( '...' )
-            # C.g:39:7: '...'
-            self.match("...")
-
+            # C.g:38:5: ( ')' )
+            # C.g:38:7: ')'
+            self.match(u')')
 
 
 
@@ -897,9 +881,9 @@ class CLexer(Lexer):
         try:
             self.type = T57
 
-            # C.g:40:5: ( '+' )
-            # C.g:40:7: '+'
-            self.match(u'+')
+            # C.g:39:5: ( '[' )
+            # C.g:39:7: '['
+            self.match(u'[')
 
 
 
@@ -919,9 +903,9 @@ class CLexer(Lexer):
         try:
             self.type = T58
 
-            # C.g:41:5: ( '-' )
-            # C.g:41:7: '-'
-            self.match(u'-')
+            # C.g:40:5: ( ']' )
+            # C.g:40:7: ']'
+            self.match(u']')
 
 
 
@@ -941,9 +925,9 @@ class CLexer(Lexer):
         try:
             self.type = T59
 
-            # C.g:42:5: ( '/' )
-            # C.g:42:7: '/'
-            self.match(u'/')
+            # C.g:41:5: ( '*' )
+            # C.g:41:7: '*'
+            self.match(u'*')
 
 
 
@@ -963,9 +947,10 @@ class CLexer(Lexer):
         try:
             self.type = T60
 
-            # C.g:43:5: ( '%' )
-            # C.g:43:7: '%'
-            self.match(u'%')
+            # C.g:42:5: ( '...' )
+            # C.g:42:7: '...'
+            self.match("...")
+
 
 
 
@@ -985,10 +970,9 @@ class CLexer(Lexer):
         try:
             self.type = T61
 
-            # C.g:44:5: ( '++' )
-            # C.g:44:7: '++'
-            self.match("++")
-
+            # C.g:43:5: ( '+' )
+            # C.g:43:7: '+'
+            self.match(u'+')
 
 
 
@@ -1008,10 +992,9 @@ class CLexer(Lexer):
         try:
             self.type = T62
 
-            # C.g:45:5: ( '--' )
-            # C.g:45:7: '--'
-            self.match("--")
-
+            # C.g:44:5: ( '-' )
+            # C.g:44:7: '-'
+            self.match(u'-')
 
 
 
@@ -1031,10 +1014,9 @@ class CLexer(Lexer):
         try:
             self.type = T63
 
-            # C.g:46:5: ( 'sizeof' )
-            # C.g:46:7: 'sizeof'
-            self.match("sizeof")
-
+            # C.g:45:5: ( '/' )
+            # C.g:45:7: '/'
+            self.match(u'/')
 
 
 
@@ -1054,9 +1036,9 @@ class CLexer(Lexer):
         try:
             self.type = T64
 
-            # C.g:47:5: ( '.' )
-            # C.g:47:7: '.'
-            self.match(u'.')
+            # C.g:46:5: ( '%' )
+            # C.g:46:7: '%'
+            self.match(u'%')
 
 
 
@@ -1076,9 +1058,9 @@ class CLexer(Lexer):
         try:
             self.type = T65
 
-            # C.g:48:5: ( '->' )
-            # C.g:48:7: '->'
-            self.match("->")
+            # C.g:47:5: ( '++' )
+            # C.g:47:7: '++'
+            self.match("++")
 
 
 
@@ -1099,9 +1081,10 @@ class CLexer(Lexer):
         try:
             self.type = T66
 
-            # C.g:49:5: ( '&' )
-            # C.g:49:7: '&'
-            self.match(u'&')
+            # C.g:48:5: ( '--' )
+            # C.g:48:7: '--'
+            self.match("--")
+
 
 
 
@@ -1121,9 +1104,10 @@ class CLexer(Lexer):
         try:
             self.type = T67
 
-            # C.g:50:5: ( '~' )
-            # C.g:50:7: '~'
-            self.match(u'~')
+            # C.g:49:5: ( 'sizeof' )
+            # C.g:49:7: 'sizeof'
+            self.match("sizeof")
+
 
 
 
@@ -1143,9 +1127,9 @@ class CLexer(Lexer):
         try:
             self.type = T68
 
-            # C.g:51:5: ( '!' )
-            # C.g:51:7: '!'
-            self.match(u'!')
+            # C.g:50:5: ( '.' )
+            # C.g:50:7: '.'
+            self.match(u'.')
 
 
 
@@ -1165,9 +1149,9 @@ class CLexer(Lexer):
         try:
             self.type = T69
 
-            # C.g:52:5: ( '*=' )
-            # C.g:52:7: '*='
-            self.match("*=")
+            # C.g:51:5: ( '->' )
+            # C.g:51:7: '->'
+            self.match("->")
 
 
 
@@ -1188,10 +1172,9 @@ class CLexer(Lexer):
         try:
             self.type = T70
 
-            # C.g:53:5: ( '/=' )
-            # C.g:53:7: '/='
-            self.match("/=")
-
+            # C.g:52:5: ( '&' )
+            # C.g:52:7: '&'
+            self.match(u'&')
 
 
 
@@ -1211,10 +1194,9 @@ class CLexer(Lexer):
         try:
             self.type = T71
 
-            # C.g:54:5: ( '%=' )
-            # C.g:54:7: '%='
-            self.match("%=")
-
+            # C.g:53:5: ( '~' )
+            # C.g:53:7: '~'
+            self.match(u'~')
 
 
 
@@ -1234,10 +1216,9 @@ class CLexer(Lexer):
         try:
             self.type = T72
 
-            # C.g:55:5: ( '+=' )
-            # C.g:55:7: '+='
-            self.match("+=")
-
+            # C.g:54:5: ( '!' )
+            # C.g:54:7: '!'
+            self.match(u'!')
 
 
 
@@ -1257,9 +1238,9 @@ class CLexer(Lexer):
         try:
             self.type = T73
 
-            # C.g:56:5: ( '-=' )
-            # C.g:56:7: '-='
-            self.match("-=")
+            # C.g:55:5: ( '*=' )
+            # C.g:55:7: '*='
+            self.match("*=")
 
 
 
@@ -1280,9 +1261,9 @@ class CLexer(Lexer):
         try:
             self.type = T74
 
-            # C.g:57:5: ( '<<=' )
-            # C.g:57:7: '<<='
-            self.match("<<=")
+            # C.g:56:5: ( '/=' )
+            # C.g:56:7: '/='
+            self.match("/=")
 
 
 
@@ -1303,9 +1284,9 @@ class CLexer(Lexer):
         try:
             self.type = T75
 
-            # C.g:58:5: ( '>>=' )
-            # C.g:58:7: '>>='
-            self.match(">>=")
+            # C.g:57:5: ( '%=' )
+            # C.g:57:7: '%='
+            self.match("%=")
 
 
 
@@ -1326,9 +1307,9 @@ class CLexer(Lexer):
         try:
             self.type = T76
 
-            # C.g:59:5: ( '&=' )
-            # C.g:59:7: '&='
-            self.match("&=")
+            # C.g:58:5: ( '+=' )
+            # C.g:58:7: '+='
+            self.match("+=")
 
 
 
@@ -1349,9 +1330,9 @@ class CLexer(Lexer):
         try:
             self.type = T77
 
-            # C.g:60:5: ( '^=' )
-            # C.g:60:7: '^='
-            self.match("^=")
+            # C.g:59:5: ( '-=' )
+            # C.g:59:7: '-='
+            self.match("-=")
 
 
 
@@ -1372,9 +1353,9 @@ class CLexer(Lexer):
         try:
             self.type = T78
 
-            # C.g:61:5: ( '|=' )
-            # C.g:61:7: '|='
-            self.match("|=")
+            # C.g:60:5: ( '<<=' )
+            # C.g:60:7: '<<='
+            self.match("<<=")
 
 
 
@@ -1395,9 +1376,10 @@ class CLexer(Lexer):
         try:
             self.type = T79
 
-            # C.g:62:5: ( '?' )
-            # C.g:62:7: '?'
-            self.match(u'?')
+            # C.g:61:5: ( '>>=' )
+            # C.g:61:7: '>>='
+            self.match(">>=")
+
 
 
 
@@ -1417,9 +1399,9 @@ class CLexer(Lexer):
         try:
             self.type = T80
 
-            # C.g:63:5: ( '||' )
-            # C.g:63:7: '||'
-            self.match("||")
+            # C.g:62:5: ( '&=' )
+            # C.g:62:7: '&='
+            self.match("&=")
 
 
 
@@ -1440,9 +1422,9 @@ class CLexer(Lexer):
         try:
             self.type = T81
 
-            # C.g:64:5: ( '&&' )
-            # C.g:64:7: '&&'
-            self.match("&&")
+            # C.g:63:5: ( '^=' )
+            # C.g:63:7: '^='
+            self.match("^=")
 
 
 
@@ -1463,9 +1445,10 @@ class CLexer(Lexer):
         try:
             self.type = T82
 
-            # C.g:65:5: ( '|' )
-            # C.g:65:7: '|'
-            self.match(u'|')
+            # C.g:64:5: ( '|=' )
+            # C.g:64:7: '|='
+            self.match("|=")
+
 
 
 
@@ -1485,9 +1468,9 @@ class CLexer(Lexer):
         try:
             self.type = T83
 
-            # C.g:66:5: ( '^' )
-            # C.g:66:7: '^'
-            self.match(u'^')
+            # C.g:65:5: ( '?' )
+            # C.g:65:7: '?'
+            self.match(u'?')
 
 
 
@@ -1507,9 +1490,9 @@ class CLexer(Lexer):
         try:
             self.type = T84
 
-            # C.g:67:5: ( '==' )
-            # C.g:67:7: '=='
-            self.match("==")
+            # C.g:66:5: ( '||' )
+            # C.g:66:7: '||'
+            self.match("||")
 
 
 
@@ -1530,9 +1513,9 @@ class CLexer(Lexer):
         try:
             self.type = T85
 
-            # C.g:68:5: ( '!=' )
-            # C.g:68:7: '!='
-            self.match("!=")
+            # C.g:67:5: ( '&&' )
+            # C.g:67:7: '&&'
+            self.match("&&")
 
 
 
@@ -1553,9 +1536,9 @@ class CLexer(Lexer):
         try:
             self.type = T86
 
-            # C.g:69:5: ( '<' )
-            # C.g:69:7: '<'
-            self.match(u'<')
+            # C.g:68:5: ( '|' )
+            # C.g:68:7: '|'
+            self.match(u'|')
 
 
 
@@ -1575,9 +1558,9 @@ class CLexer(Lexer):
         try:
             self.type = T87
 
-            # C.g:70:5: ( '>' )
-            # C.g:70:7: '>'
-            self.match(u'>')
+            # C.g:69:5: ( '^' )
+            # C.g:69:7: '^'
+            self.match(u'^')
 
 
 
@@ -1597,9 +1580,9 @@ class CLexer(Lexer):
         try:
             self.type = T88
 
-            # C.g:71:5: ( '<=' )
-            # C.g:71:7: '<='
-            self.match("<=")
+            # C.g:70:5: ( '==' )
+            # C.g:70:7: '=='
+            self.match("==")
 
 
 
@@ -1620,9 +1603,9 @@ class CLexer(Lexer):
         try:
             self.type = T89
 
-            # C.g:72:5: ( '>=' )
-            # C.g:72:7: '>='
-            self.match(">=")
+            # C.g:71:5: ( '!=' )
+            # C.g:71:7: '!='
+            self.match("!=")
 
 
 
@@ -1643,10 +1626,9 @@ class CLexer(Lexer):
         try:
             self.type = T90
 
-            # C.g:73:5: ( '<<' )
-            # C.g:73:7: '<<'
-            self.match("<<")
-
+            # C.g:72:5: ( '<' )
+            # C.g:72:7: '<'
+            self.match(u'<')
 
 
 
@@ -1666,10 +1648,9 @@ class CLexer(Lexer):
         try:
             self.type = T91
 
-            # C.g:74:5: ( '>>' )
-            # C.g:74:7: '>>'
-            self.match(">>")
-
+            # C.g:73:5: ( '>' )
+            # C.g:73:7: '>'
+            self.match(u'>')
 
 
 
@@ -1689,9 +1670,9 @@ class CLexer(Lexer):
         try:
             self.type = T92
 
-            # C.g:75:5: ( 'case' )
-            # C.g:75:7: 'case'
-            self.match("case")
+            # C.g:74:5: ( '<=' )
+            # C.g:74:7: '<='
+            self.match("<=")
 
 
 
@@ -1712,9 +1693,9 @@ class CLexer(Lexer):
         try:
             self.type = T93
 
-            # C.g:76:5: ( 'default' )
-            # C.g:76:7: 'default'
-            self.match("default")
+            # C.g:75:5: ( '>=' )
+            # C.g:75:7: '>='
+            self.match(">=")
 
 
 
@@ -1735,9 +1716,9 @@ class CLexer(Lexer):
         try:
             self.type = T94
 
-            # C.g:77:5: ( 'if' )
-            # C.g:77:7: 'if'
-            self.match("if")
+            # C.g:76:5: ( '<<' )
+            # C.g:76:7: '<<'
+            self.match("<<")
 
 
 
@@ -1758,9 +1739,9 @@ class CLexer(Lexer):
         try:
             self.type = T95
 
-            # C.g:78:5: ( 'else' )
-            # C.g:78:7: 'else'
-            self.match("else")
+            # C.g:77:5: ( '>>' )
+            # C.g:77:7: '>>'
+            self.match(">>")
 
 
 
@@ -1781,9 +1762,9 @@ class CLexer(Lexer):
         try:
             self.type = T96
 
-            # C.g:79:5: ( 'switch' )
-            # C.g:79:7: 'switch'
-            self.match("switch")
+            # C.g:78:5: ( 'case' )
+            # C.g:78:7: 'case'
+            self.match("case")
 
 
 
@@ -1804,9 +1785,9 @@ class CLexer(Lexer):
         try:
             self.type = T97
 
-            # C.g:80:5: ( 'while' )
-            # C.g:80:7: 'while'
-            self.match("while")
+            # C.g:79:5: ( 'default' )
+            # C.g:79:7: 'default'
+            self.match("default")
 
 
 
@@ -1827,9 +1808,9 @@ class CLexer(Lexer):
         try:
             self.type = T98
 
-            # C.g:81:5: ( 'do' )
-            # C.g:81:7: 'do'
-            self.match("do")
+            # C.g:80:5: ( 'if' )
+            # C.g:80:7: 'if'
+            self.match("if")
 
 
 
@@ -1850,9 +1831,9 @@ class CLexer(Lexer):
         try:
             self.type = T99
 
-            # C.g:82:5: ( 'for' )
-            # C.g:82:7: 'for'
-            self.match("for")
+            # C.g:81:5: ( 'else' )
+            # C.g:81:7: 'else'
+            self.match("else")
 
 
 
@@ -1873,9 +1854,9 @@ class CLexer(Lexer):
         try:
             self.type = T100
 
-            # C.g:83:6: ( 'goto' )
-            # C.g:83:8: 'goto'
-            self.match("goto")
+            # C.g:82:6: ( 'switch' )
+            # C.g:82:8: 'switch'
+            self.match("switch")
 
 
 
@@ -1896,9 +1877,9 @@ class CLexer(Lexer):
         try:
             self.type = T101
 
-            # C.g:84:6: ( 'continue' )
-            # C.g:84:8: 'continue'
-            self.match("continue")
+            # C.g:83:6: ( 'while' )
+            # C.g:83:8: 'while'
+            self.match("while")
 
 
 
@@ -1919,9 +1900,9 @@ class CLexer(Lexer):
         try:
             self.type = T102
 
-            # C.g:85:6: ( 'break' )
-            # C.g:85:8: 'break'
-            self.match("break")
+            # C.g:84:6: ( 'do' )
+            # C.g:84:8: 'do'
+            self.match("do")
 
 
 
@@ -1942,9 +1923,9 @@ class CLexer(Lexer):
         try:
             self.type = T103
 
-            # C.g:86:6: ( 'return' )
-            # C.g:86:8: 'return'
-            self.match("return")
+            # C.g:85:6: ( 'for' )
+            # C.g:85:8: 'for'
+            self.match("for")
 
 
 
@@ -1959,49 +1940,141 @@ class CLexer(Lexer):
 
 
 
-    # $ANTLR start IDENTIFIER
-    def mIDENTIFIER(self, ):
+    # $ANTLR start T104
+    def mT104(self, ):
 
         try:
-            self.type = IDENTIFIER
+            self.type = T104
 
-            # C.g:479:2: ( LETTER ( LETTER | '0' .. '9' )* )
-            # C.g:479:4: LETTER ( LETTER | '0' .. '9' )*
-            self.mLETTER()
+            # C.g:86:6: ( 'goto' )
+            # C.g:86:8: 'goto'
+            self.match("goto")
 
-            # C.g:479:11: ( LETTER | '0' .. '9' )*
-            while True: #loop1
-                alt1 = 2
-                LA1_0 = self.input.LA(1)
 
-                if (LA1_0 == u'$' or (u'0' <= LA1_0 <= u'9') or (u'A' <= LA1_0 <= u'Z') or LA1_0 == u'_' or (u'a' <= LA1_0 <= u'z')) :
-                    alt1 = 1
 
 
-                if alt1 == 1:
-                    # C.g:
-                    if self.input.LA(1) == u'$' or (u'0' <= self.input.LA(1) <= u'9') 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();
 
-                    else:
-                        mse = MismatchedSetException(None, self.input)
-                        self.recover(mse)
-                        raise mse
 
+        finally:
 
+            pass
 
+    # $ANTLR end T104
 
-                else:
-                    break #loop1
 
 
+    # $ANTLR start T105
+    def mT105(self, ):
 
+        try:
+            self.type = T105
 
+            # C.g:87:6: ( 'continue' )
+            # C.g:87:8: 'continue'
+            self.match("continue")
 
 
-        finally:
 
-            pass
+
+
+
+        finally:
+
+            pass
+
+    # $ANTLR end T105
+
+
+
+    # $ANTLR start T106
+    def mT106(self, ):
+
+        try:
+            self.type = T106
+
+            # C.g:88:6: ( 'break' )
+            # C.g:88:8: 'break'
+            self.match("break")
+
+
+
+
+
+
+        finally:
+
+            pass
+
+    # $ANTLR end T106
+
+
+
+    # $ANTLR start T107
+    def mT107(self, ):
+
+        try:
+            self.type = T107
+
+            # C.g:89:6: ( 'return' )
+            # C.g:89:8: 'return'
+            self.match("return")
+
+
+
+
+
+
+        finally:
+
+            pass
+
+    # $ANTLR end T107
+
+
+
+    # $ANTLR start IDENTIFIER
+    def mIDENTIFIER(self, ):
+
+        try:
+            self.type = IDENTIFIER
+
+            # C.g:489:2: ( LETTER ( LETTER | '0' .. '9' )* )
+            # C.g:489:4: LETTER ( LETTER | '0' .. '9' )*
+            self.mLETTER()
+
+            # C.g:489:11: ( LETTER | '0' .. '9' )*
+            while True: #loop1
+                alt1 = 2
+                LA1_0 = self.input.LA(1)
+
+                if (LA1_0 == u'$' or (u'0' <= LA1_0 <= u'9') or (u'A' <= LA1_0 <= u'Z') or LA1_0 == u'_' or (u'a' <= LA1_0 <= u'z')) :
+                    alt1 = 1
+
+
+                if alt1 == 1:
+                    # C.g:
+                    if self.input.LA(1) == u'$' or (u'0' <= self.input.LA(1) <= u'9') 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();
+
+                    else:
+                        mse = MismatchedSetException(None, self.input)
+                        self.recover(mse)
+                        raise mse
+
+
+
+
+                else:
+                    break #loop1
+
+
+
+
+
+
+        finally:
+
+            pass
 
     # $ANTLR end IDENTIFIER
 
@@ -2011,7 +2084,7 @@ class CLexer(Lexer):
     def mLETTER(self, ):
 
         try:
-            # C.g:484:2: ( '$' | 'A' .. 'Z' | 'a' .. 'z' | '_' )
+            # C.g:494: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();
@@ -2040,31 +2113,44 @@ class CLexer(Lexer):
         try:
             self.type = CHARACTER_LITERAL
 
-            # C.g:491:5: ( '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' )
-            # C.g:491:9: '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\''
-            self.match(u'\'')
-
-            # C.g:491:14: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )
+            # C.g:501:5: ( ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' )
+            # C.g:501:9: ( 'L' )? '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\''
+            # C.g:501:9: ( 'L' )?
             alt2 = 2
             LA2_0 = self.input.LA(1)
 
-            if (LA2_0 == u'\\') :
+            if (LA2_0 == u'L') :
                 alt2 = 1
-            elif ((u'\u0000' <= LA2_0 <= u'&') or (u'(' <= LA2_0 <= u'[') or (u']' <= LA2_0 <= u'\uFFFE')) :
-                alt2 = 2
+            if alt2 == 1:
+                # C.g:501:10: 'L'
+                self.match(u'L')
+
+
+
+
+            self.match(u'\'')
+
+            # C.g:501:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )
+            alt3 = 2
+            LA3_0 = self.input.LA(1)
+
+            if (LA3_0 == u'\\') :
+                alt3 = 1
+            elif ((u'\u0000' <= LA3_0 <= u'&') or (u'(' <= LA3_0 <= u'[') or (u']' <= LA3_0 <= u'\uFFFE')) :
+                alt3 = 2
             else:
-                nvae = NoViableAltException("491:14: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 2, 0, self.input)
+                nvae = NoViableAltException("501:21: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 3, 0, self.input)
 
                 raise nvae
 
-            if alt2 == 1:
-                # C.g:491:16: EscapeSequence
+            if alt3 == 1:
+                # C.g:501:23: EscapeSequence
                 self.mEscapeSequence()
 
 
 
-            elif alt2 == 2:
-                # C.g:491:33: ~ ( '\\'' | '\\\\' )
+            elif alt3 == 2:
+                # C.g:501: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();
 
@@ -2097,16 +2183,16 @@ class CLexer(Lexer):
         try:
             self.type = STRING_LITERAL
 
-            # C.g:495:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-            # C.g:495:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
-            # C.g:495:8: ( 'L' )?
-            alt3 = 2
-            LA3_0 = self.input.LA(1)
+            # C.g:505:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+            # C.g:505:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+            # C.g:505:8: ( 'L' )?
+            alt4 = 2
+            LA4_0 = self.input.LA(1)
 
-            if (LA3_0 == u'L') :
-                alt3 = 1
-            if alt3 == 1:
-                # C.g:495:9: 'L'
+            if (LA4_0 == u'L') :
+                alt4 = 1
+            if alt4 == 1:
+                # C.g:505:9: 'L'
                 self.match(u'L')
 
 
@@ -2114,25 +2200,25 @@ class CLexer(Lexer):
 
             self.match(u'"')
 
-            # C.g:495:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
-            while True: #loop4
-                alt4 = 3
-                LA4_0 = self.input.LA(1)
+            # C.g:505:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+            while True: #loop5
+                alt5 = 3
+                LA5_0 = self.input.LA(1)
 
-                if (LA4_0 == u'\\') :
-                    alt4 = 1
-                elif ((u'\u0000' <= LA4_0 <= u'!') or (u'#' <= LA4_0 <= u'[') or (u']' <= LA4_0 <= u'\uFFFE')) :
-                    alt4 = 2
+                if (LA5_0 == u'\\') :
+                    alt5 = 1
+                elif ((u'\u0000' <= LA5_0 <= u'!') or (u'#' <= LA5_0 <= u'[') or (u']' <= LA5_0 <= u'\uFFFE')) :
+                    alt5 = 2
 
 
-                if alt4 == 1:
-                    # C.g:495:21: EscapeSequence
+                if alt5 == 1:
+                    # C.g:505:21: EscapeSequence
                     self.mEscapeSequence()
 
 
 
-                elif alt4 == 2:
-                    # C.g:495:38: ~ ( '\\\\' | '\"' )
+                elif alt5 == 2:
+                    # C.g:505: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();
 
@@ -2145,7 +2231,7 @@ class CLexer(Lexer):
 
 
                 else:
-                    break #loop4
+                    break #loop5
 
 
             self.match(u'"')
@@ -2168,8 +2254,8 @@ class CLexer(Lexer):
         try:
             self.type = HEX_LITERAL
 
-            # C.g:498:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? )
-            # C.g:498:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )?
+            # C.g:508:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? )
+            # C.g:508:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )?
             self.match(u'0')
 
             if self.input.LA(1) == u'X' or self.input.LA(1) == u'x':
@@ -2181,40 +2267,40 @@ class CLexer(Lexer):
                 raise mse
 
 
-            # C.g:498:29: ( HexDigit )+
-            cnt5 = 0
-            while True: #loop5
-                alt5 = 2
-                LA5_0 = self.input.LA(1)
+            # C.g:508:29: ( HexDigit )+
+            cnt6 = 0
+            while True: #loop6
+                alt6 = 2
+                LA6_0 = self.input.LA(1)
 
-                if ((u'0' <= LA5_0 <= u'9') or (u'A' <= LA5_0 <= u'F') or (u'a' <= LA5_0 <= u'f')) :
-                    alt5 = 1
+                if ((u'0' <= LA6_0 <= u'9') or (u'A' <= LA6_0 <= u'F') or (u'a' <= LA6_0 <= u'f')) :
+                    alt6 = 1
 
 
-                if alt5 == 1:
-                    # C.g:498:29: HexDigit
+                if alt6 == 1:
+                    # C.g:508:29: HexDigit
                     self.mHexDigit()
 
 
 
                 else:
-                    if cnt5 >= 1:
-                        break #loop5
+                    if cnt6 >= 1:
+                        break #loop6
 
-                    eee = EarlyExitException(5, self.input)
+                    eee = EarlyExitException(6, self.input)
                     raise eee
 
-                cnt5 += 1
+                cnt6 += 1
 
 
-            # C.g:498:39: ( IntegerTypeSuffix )?
-            alt6 = 2
-            LA6_0 = self.input.LA(1)
+            # C.g:508:39: ( IntegerTypeSuffix )?
+            alt7 = 2
+            LA7_0 = self.input.LA(1)
 
-            if (LA6_0 == u'L' or LA6_0 == u'U' or LA6_0 == u'l' or LA6_0 == u'u') :
-                alt6 = 1
-            if alt6 == 1:
-                # C.g:498:39: IntegerTypeSuffix
+            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:508:39: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2238,61 +2324,61 @@ class CLexer(Lexer):
         try:
             self.type = DECIMAL_LITERAL
 
-            # C.g:500:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? )
-            # C.g:500:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )?
-            # C.g:500:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )
-            alt8 = 2
-            LA8_0 = self.input.LA(1)
+            # C.g:510:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? )
+            # C.g:510:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )?
+            # C.g:510:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )
+            alt9 = 2
+            LA9_0 = self.input.LA(1)
 
-            if (LA8_0 == u'0') :
-                alt8 = 1
-            elif ((u'1' <= LA8_0 <= u'9')) :
-                alt8 = 2
+            if (LA9_0 == u'0') :
+                alt9 = 1
+            elif ((u'1' <= LA9_0 <= u'9')) :
+                alt9 = 2
             else:
-                nvae = NoViableAltException("500:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 8, 0, self.input)
+                nvae = NoViableAltException("510:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 9, 0, self.input)
 
                 raise nvae
 
-            if alt8 == 1:
-                # C.g:500:20: '0'
+            if alt9 == 1:
+                # C.g:510:20: '0'
                 self.match(u'0')
 
 
 
-            elif alt8 == 2:
-                # C.g:500:26: '1' .. '9' ( '0' .. '9' )*
+            elif alt9 == 2:
+                # C.g:510:26: '1' .. '9' ( '0' .. '9' )*
                 self.matchRange(u'1', u'9')
 
-                # C.g:500:35: ( '0' .. '9' )*
-                while True: #loop7
-                    alt7 = 2
-                    LA7_0 = self.input.LA(1)
+                # C.g:510:35: ( '0' .. '9' )*
+                while True: #loop8
+                    alt8 = 2
+                    LA8_0 = self.input.LA(1)
 
-                    if ((u'0' <= LA7_0 <= u'9')) :
-                        alt7 = 1
+                    if ((u'0' <= LA8_0 <= u'9')) :
+                        alt8 = 1
 
 
-                    if alt7 == 1:
-                        # C.g:500:35: '0' .. '9'
+                    if alt8 == 1:
+                        # C.g:510:35: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
 
                     else:
-                        break #loop7
+                        break #loop8
 
 
 
 
 
-            # C.g:500:46: ( IntegerTypeSuffix )?
-            alt9 = 2
-            LA9_0 = self.input.LA(1)
+            # C.g:510:46: ( IntegerTypeSuffix )?
+            alt10 = 2
+            LA10_0 = self.input.LA(1)
 
-            if (LA9_0 == u'L' or LA9_0 == u'U' or LA9_0 == u'l' or LA9_0 == u'u') :
-                alt9 = 1
-            if alt9 == 1:
-                # C.g:500:46: IntegerTypeSuffix
+            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:510:46: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2316,44 +2402,44 @@ class CLexer(Lexer):
         try:
             self.type = OCTAL_LITERAL
 
-            # C.g:502:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? )
-            # C.g:502:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )?
+            # C.g:512:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? )
+            # C.g:512:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )?
             self.match(u'0')
 
-            # C.g:502:21: ( '0' .. '7' )+
-            cnt10 = 0
-            while True: #loop10
-                alt10 = 2
-                LA10_0 = self.input.LA(1)
+            # C.g:512:21: ( '0' .. '7' )+
+            cnt11 = 0
+            while True: #loop11
+                alt11 = 2
+                LA11_0 = self.input.LA(1)
 
-                if ((u'0' <= LA10_0 <= u'7')) :
-                    alt10 = 1
+                if ((u'0' <= LA11_0 <= u'7')) :
+                    alt11 = 1
 
 
-                if alt10 == 1:
-                    # C.g:502:22: '0' .. '7'
+                if alt11 == 1:
+                    # C.g:512:22: '0' .. '7'
                     self.matchRange(u'0', u'7')
 
 
 
                 else:
-                    if cnt10 >= 1:
-                        break #loop10
+                    if cnt11 >= 1:
+                        break #loop11
 
-                    eee = EarlyExitException(10, self.input)
+                    eee = EarlyExitException(11, self.input)
                     raise eee
 
-                cnt10 += 1
+                cnt11 += 1
 
 
-            # C.g:502:33: ( IntegerTypeSuffix )?
-            alt11 = 2
-            LA11_0 = self.input.LA(1)
+            # C.g:512:33: ( IntegerTypeSuffix )?
+            alt12 = 2
+            LA12_0 = self.input.LA(1)
 
-            if (LA11_0 == u'L' or LA11_0 == u'U' or LA11_0 == u'l' or LA11_0 == u'u') :
-                alt11 = 1
-            if alt11 == 1:
-                # C.g:502:33: IntegerTypeSuffix
+            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:512:33: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2375,8 +2461,8 @@ class CLexer(Lexer):
     def mHexDigit(self, ):
 
         try:
-            # C.g:505:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            # C.g:505:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            # C.g:515:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            # C.g:515: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();
 
@@ -2402,33 +2488,33 @@ class CLexer(Lexer):
     def mIntegerTypeSuffix(self, ):
 
         try:
-            # C.g:509:2: ( ( 'u' | 'U' )? ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' )? )
-            alt14 = 2
-            LA14_0 = self.input.LA(1)
+            # C.g:519:2: ( ( 'u' | 'U' )? ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' )? ( 'l' | 'L' )? )
+            alt16 = 2
+            LA16_0 = self.input.LA(1)
 
-            if (LA14_0 == u'U' or LA14_0 == u'u') :
-                LA14_1 = self.input.LA(2)
+            if (LA16_0 == u'U' or LA16_0 == u'u') :
+                LA16_1 = self.input.LA(2)
 
-                if (LA14_1 == u'L' or LA14_1 == u'l') :
-                    alt14 = 1
+                if (LA16_1 == u'L' or LA16_1 == u'l') :
+                    alt16 = 1
                 else:
-                    alt14 = 2
-            elif (LA14_0 == u'L' or LA14_0 == u'l') :
-                alt14 = 1
+                    alt16 = 2
+            elif (LA16_0 == u'L' or LA16_0 == u'l') :
+                alt16 = 1
             else:
-                nvae = NoViableAltException("507:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' )? ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' )? );", 14, 0, self.input)
+                nvae = NoViableAltException("517:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' )? ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' )? ( 'l' | 'L' )? );", 16, 0, self.input)
 
                 raise nvae
 
-            if alt14 == 1:
-                # C.g:509:4: ( 'u' | 'U' )? ( 'l' | 'L' )
-                # C.g:509:4: ( 'u' | 'U' )?
-                alt12 = 2
-                LA12_0 = self.input.LA(1)
+            if alt16 == 1:
+                # C.g:519:4: ( 'u' | 'U' )? ( 'l' | 'L' )
+                # C.g:519:4: ( 'u' | 'U' )?
+                alt13 = 2
+                LA13_0 = self.input.LA(1)
 
-                if (LA12_0 == u'U' or LA12_0 == u'u') :
-                    alt12 = 1
-                if alt12 == 1:
+                if (LA13_0 == u'U' or LA13_0 == u'u') :
+                    alt13 = 1
+                if alt13 == 1:
                     # C.g:
                     if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':
                         self.input.consume();
@@ -2453,8 +2539,8 @@ class CLexer(Lexer):
 
 
 
-            elif alt14 == 2:
-                # C.g:510:4: ( 'u' | 'U' ) ( 'l' | 'L' )?
+            elif alt16 == 2:
+                # C.g:520:4: ( 'u' | 'U' ) ( 'l' | 'L' )? ( 'l' | 'L' )?
                 if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':
                     self.input.consume();
 
@@ -2464,13 +2550,33 @@ class CLexer(Lexer):
                     raise mse
 
 
-                # C.g:510:15: ( 'l' | 'L' )?
-                alt13 = 2
-                LA13_0 = self.input.LA(1)
+                # C.g:520:15: ( 'l' | 'L' )?
+                alt14 = 2
+                LA14_0 = self.input.LA(1)
 
-                if (LA13_0 == u'L' or LA13_0 == u'l') :
-                    alt13 = 1
-                if alt13 == 1:
+                if (LA14_0 == u'L' or LA14_0 == u'l') :
+                    alt14 = 1
+                if alt14 == 1:
+                    # C.g:
+                    if self.input.LA(1) == u'L' or self.input.LA(1) == u'l':
+                        self.input.consume();
+
+                    else:
+                        mse = MismatchedSetException(None, self.input)
+                        self.recover(mse)
+                        raise mse
+
+
+
+
+
+                # C.g:520:26: ( 'l' | 'L' )?
+                alt15 = 2
+                LA15_0 = self.input.LA(1)
+
+                if (LA15_0 == u'L' or LA15_0 == u'l') :
+                    alt15 = 1
+                if alt15 == 1:
                     # C.g:
                     if self.input.LA(1) == u'L' or self.input.LA(1) == u'l':
                         self.input.consume();
@@ -2501,79 +2607,79 @@ class CLexer(Lexer):
         try:
             self.type = FLOATING_POINT_LITERAL
 
-            # C.g:514:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? | '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? | ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? | ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix )
-            alt26 = 4
-            alt26 = self.dfa26.predict(self.input)
-            if alt26 == 1:
-                # C.g:514:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )?
-                # C.g:514:9: ( '0' .. '9' )+
-                cnt15 = 0
-                while True: #loop15
-                    alt15 = 2
-                    LA15_0 = self.input.LA(1)
+            # C.g:524:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? | '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? | ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? | ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix )
+            alt28 = 4
+            alt28 = self.dfa28.predict(self.input)
+            if alt28 == 1:
+                # C.g:524:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )?
+                # C.g:524:9: ( '0' .. '9' )+
+                cnt17 = 0
+                while True: #loop17
+                    alt17 = 2
+                    LA17_0 = self.input.LA(1)
 
-                    if ((u'0' <= LA15_0 <= u'9')) :
-                        alt15 = 1
+                    if ((u'0' <= LA17_0 <= u'9')) :
+                        alt17 = 1
 
 
-                    if alt15 == 1:
-                        # C.g:514:10: '0' .. '9'
+                    if alt17 == 1:
+                        # C.g:524:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
 
                     else:
-                        if cnt15 >= 1:
-                            break #loop15
+                        if cnt17 >= 1:
+                            break #loop17
 
-                        eee = EarlyExitException(15, self.input)
+                        eee = EarlyExitException(17, self.input)
                         raise eee
 
-                    cnt15 += 1
+                    cnt17 += 1
 
 
                 self.match(u'.')
 
-                # C.g:514:25: ( '0' .. '9' )*
-                while True: #loop16
-                    alt16 = 2
-                    LA16_0 = self.input.LA(1)
+                # C.g:524:25: ( '0' .. '9' )*
+                while True: #loop18
+                    alt18 = 2
+                    LA18_0 = self.input.LA(1)
 
-                    if ((u'0' <= LA16_0 <= u'9')) :
-                        alt16 = 1
+                    if ((u'0' <= LA18_0 <= u'9')) :
+                        alt18 = 1
 
 
-                    if alt16 == 1:
-                        # C.g:514:26: '0' .. '9'
+                    if alt18 == 1:
+                        # C.g:524:26: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
 
                     else:
-                        break #loop16
+                        break #loop18
 
 
-                # C.g:514:37: ( Exponent )?
-                alt17 = 2
-                LA17_0 = self.input.LA(1)
+                # C.g:524:37: ( Exponent )?
+                alt19 = 2
+                LA19_0 = self.input.LA(1)
 
-                if (LA17_0 == u'E' or LA17_0 == u'e') :
-                    alt17 = 1
-                if alt17 == 1:
-                    # C.g:514:37: Exponent
+                if (LA19_0 == u'E' or LA19_0 == u'e') :
+                    alt19 = 1
+                if alt19 == 1:
+                    # C.g:524:37: Exponent
                     self.mExponent()
 
 
 
 
-                # C.g:514:47: ( FloatTypeSuffix )?
-                alt18 = 2
-                LA18_0 = self.input.LA(1)
+                # C.g:524:47: ( FloatTypeSuffix )?
+                alt20 = 2
+                LA20_0 = self.input.LA(1)
 
-                if (LA18_0 == u'D' or LA18_0 == u'F' or LA18_0 == u'd' or LA18_0 == u'f') :
-                    alt18 = 1
-                if alt18 == 1:
-                    # C.g:514:47: FloatTypeSuffix
+                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:524:47: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2581,57 +2687,57 @@ class CLexer(Lexer):
 
 
 
-            elif alt26 == 2:
-                # C.g:515:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )?
+            elif alt28 == 2:
+                # C.g:525:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )?
                 self.match(u'.')
 
-                # C.g:515:13: ( '0' .. '9' )+
-                cnt19 = 0
-                while True: #loop19
-                    alt19 = 2
-                    LA19_0 = self.input.LA(1)
+                # C.g:525:13: ( '0' .. '9' )+
+                cnt21 = 0
+                while True: #loop21
+                    alt21 = 2
+                    LA21_0 = self.input.LA(1)
 
-                    if ((u'0' <= LA19_0 <= u'9')) :
-                        alt19 = 1
+                    if ((u'0' <= LA21_0 <= u'9')) :
+                        alt21 = 1
 
 
-                    if alt19 == 1:
-                        # C.g:515:14: '0' .. '9'
+                    if alt21 == 1:
+                        # C.g:525:14: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
 
                     else:
-                        if cnt19 >= 1:
-                            break #loop19
+                        if cnt21 >= 1:
+                            break #loop21
 
-                        eee = EarlyExitException(19, self.input)
+                        eee = EarlyExitException(21, self.input)
                         raise eee
 
-                    cnt19 += 1
+                    cnt21 += 1
 
 
-                # C.g:515:25: ( Exponent )?
-                alt20 = 2
-                LA20_0 = self.input.LA(1)
+                # C.g:525:25: ( Exponent )?
+                alt22 = 2
+                LA22_0 = self.input.LA(1)
 
-                if (LA20_0 == u'E' or LA20_0 == u'e') :
-                    alt20 = 1
-                if alt20 == 1:
-                    # C.g:515:25: Exponent
+                if (LA22_0 == u'E' or LA22_0 == u'e') :
+                    alt22 = 1
+                if alt22 == 1:
+                    # C.g:525:25: Exponent
                     self.mExponent()
 
 
 
 
-                # C.g:515:35: ( FloatTypeSuffix )?
-                alt21 = 2
-                LA21_0 = self.input.LA(1)
+                # C.g:525:35: ( FloatTypeSuffix )?
+                alt23 = 2
+                LA23_0 = self.input.LA(1)
 
-                if (LA21_0 == u'D' or LA21_0 == u'F' or LA21_0 == u'd' or LA21_0 == u'f') :
-                    alt21 = 1
-                if alt21 == 1:
-                    # C.g:515:35: FloatTypeSuffix
+                if (LA23_0 == u'D' or LA23_0 == u'F' or LA23_0 == u'd' or LA23_0 == u'f') :
+                    alt23 = 1
+                if alt23 == 1:
+                    # C.g:525:35: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2639,44 +2745,44 @@ class CLexer(Lexer):
 
 
 
-            elif alt26 == 3:
-                # C.g:516:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )?
-                # C.g:516:9: ( '0' .. '9' )+
-                cnt22 = 0
-                while True: #loop22
-                    alt22 = 2
-                    LA22_0 = self.input.LA(1)
+            elif alt28 == 3:
+                # C.g:526:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )?
+                # C.g:526:9: ( '0' .. '9' )+
+                cnt24 = 0
+                while True: #loop24
+                    alt24 = 2
+                    LA24_0 = self.input.LA(1)
 
-                    if ((u'0' <= LA22_0 <= u'9')) :
-                        alt22 = 1
+                    if ((u'0' <= LA24_0 <= u'9')) :
+                        alt24 = 1
 
 
-                    if alt22 == 1:
-                        # C.g:516:10: '0' .. '9'
+                    if alt24 == 1:
+                        # C.g:526:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
 
                     else:
-                        if cnt22 >= 1:
-                            break #loop22
+                        if cnt24 >= 1:
+                            break #loop24
 
-                        eee = EarlyExitException(22, self.input)
+                        eee = EarlyExitException(24, self.input)
                         raise eee
 
-                    cnt22 += 1
+                    cnt24 += 1
 
 
                 self.mExponent()
 
-                # C.g:516:30: ( FloatTypeSuffix )?
-                alt23 = 2
-                LA23_0 = self.input.LA(1)
+                # C.g:526:30: ( FloatTypeSuffix )?
+                alt25 = 2
+                LA25_0 = self.input.LA(1)
 
-                if (LA23_0 == u'D' or LA23_0 == u'F' or LA23_0 == u'd' or LA23_0 == u'f') :
-                    alt23 = 1
-                if alt23 == 1:
-                    # C.g:516:30: FloatTypeSuffix
+                if (LA25_0 == u'D' or LA25_0 == u'F' or LA25_0 == u'd' or LA25_0 == u'f') :
+                    alt25 = 1
+                if alt25 == 1:
+                    # C.g:526:30: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2684,42 +2790,42 @@ class CLexer(Lexer):
 
 
 
-            elif alt26 == 4:
-                # C.g:517:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix
-                # C.g:517:9: ( '0' .. '9' )+
-                cnt24 = 0
-                while True: #loop24
-                    alt24 = 2
-                    LA24_0 = self.input.LA(1)
+            elif alt28 == 4:
+                # C.g:527:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix
+                # C.g:527:9: ( '0' .. '9' )+
+                cnt26 = 0
+                while True: #loop26
+                    alt26 = 2
+                    LA26_0 = self.input.LA(1)
 
-                    if ((u'0' <= LA24_0 <= u'9')) :
-                        alt24 = 1
+                    if ((u'0' <= LA26_0 <= u'9')) :
+                        alt26 = 1
 
 
-                    if alt24 == 1:
-                        # C.g:517:10: '0' .. '9'
+                    if alt26 == 1:
+                        # C.g:527:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
 
                     else:
-                        if cnt24 >= 1:
-                            break #loop24
+                        if cnt26 >= 1:
+                            break #loop26
 
-                        eee = EarlyExitException(24, self.input)
+                        eee = EarlyExitException(26, self.input)
                         raise eee
 
-                    cnt24 += 1
+                    cnt26 += 1
 
 
-                # C.g:517:21: ( Exponent )?
-                alt25 = 2
-                LA25_0 = self.input.LA(1)
+                # C.g:527:21: ( Exponent )?
+                alt27 = 2
+                LA27_0 = self.input.LA(1)
 
-                if (LA25_0 == u'E' or LA25_0 == u'e') :
-                    alt25 = 1
-                if alt25 == 1:
-                    # C.g:517:21: Exponent
+                if (LA27_0 == u'E' or LA27_0 == u'e') :
+                    alt27 = 1
+                if alt27 == 1:
+                    # C.g:527:21: Exponent
                     self.mExponent()
 
 
@@ -2742,8 +2848,8 @@ class CLexer(Lexer):
     def mExponent(self, ):
 
         try:
-            # C.g:521:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )
-            # C.g:521:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
+            # C.g:531:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )
+            # C.g:531:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
             if self.input.LA(1) == u'E' or self.input.LA(1) == u'e':
                 self.input.consume();
 
@@ -2753,13 +2859,13 @@ class CLexer(Lexer):
                 raise mse
 
 
-            # C.g:521:22: ( '+' | '-' )?
-            alt27 = 2
-            LA27_0 = self.input.LA(1)
+            # C.g:531:22: ( '+' | '-' )?
+            alt29 = 2
+            LA29_0 = self.input.LA(1)
 
-            if (LA27_0 == u'+' or LA27_0 == u'-') :
-                alt27 = 1
-            if alt27 == 1:
+            if (LA29_0 == u'+' or LA29_0 == u'-') :
+                alt29 = 1
+            if alt29 == 1:
                 # C.g:
                 if self.input.LA(1) == u'+' or self.input.LA(1) == u'-':
                     self.input.consume();
@@ -2773,30 +2879,30 @@ class CLexer(Lexer):
 
 
 
-            # C.g:521:33: ( '0' .. '9' )+
-            cnt28 = 0
-            while True: #loop28
-                alt28 = 2
-                LA28_0 = self.input.LA(1)
+            # C.g:531:33: ( '0' .. '9' )+
+            cnt30 = 0
+            while True: #loop30
+                alt30 = 2
+                LA30_0 = self.input.LA(1)
 
-                if ((u'0' <= LA28_0 <= u'9')) :
-                    alt28 = 1
+                if ((u'0' <= LA30_0 <= u'9')) :
+                    alt30 = 1
 
 
-                if alt28 == 1:
-                    # C.g:521:34: '0' .. '9'
+                if alt30 == 1:
+                    # C.g:531:34: '0' .. '9'
                     self.matchRange(u'0', u'9')
 
 
 
                 else:
-                    if cnt28 >= 1:
-                        break #loop28
+                    if cnt30 >= 1:
+                        break #loop30
 
-                    eee = EarlyExitException(28, self.input)
+                    eee = EarlyExitException(30, self.input)
                     raise eee
 
-                cnt28 += 1
+                cnt30 += 1
 
 
 
@@ -2815,8 +2921,8 @@ class CLexer(Lexer):
     def mFloatTypeSuffix(self, ):
 
         try:
-            # C.g:524:17: ( ( 'f' | 'F' | 'd' | 'D' ) )
-            # C.g:524:19: ( 'f' | 'F' | 'd' | 'D' )
+            # C.g:534:17: ( ( 'f' | 'F' | 'd' | 'D' ) )
+            # C.g:534: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();
 
@@ -2842,29 +2948,29 @@ class CLexer(Lexer):
     def mEscapeSequence(self, ):
 
         try:
-            # C.g:528:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape )
-            alt29 = 2
-            LA29_0 = self.input.LA(1)
+            # C.g:538:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape )
+            alt31 = 2
+            LA31_0 = self.input.LA(1)
 
-            if (LA29_0 == u'\\') :
-                LA29_1 = self.input.LA(2)
+            if (LA31_0 == u'\\') :
+                LA31_1 = self.input.LA(2)
 
-                if (LA29_1 == u'"' or LA29_1 == u'\'' or LA29_1 == u'\\' or LA29_1 == u'b' or LA29_1 == u'f' or LA29_1 == u'n' or LA29_1 == u'r' or LA29_1 == u't') :
-                    alt29 = 1
-                elif ((u'0' <= LA29_1 <= u'7')) :
-                    alt29 = 2
+                if (LA31_1 == u'"' or LA31_1 == u'\'' or LA31_1 == u'\\' or LA31_1 == u'b' or LA31_1 == u'f' or LA31_1 == u'n' or LA31_1 == u'r' or LA31_1 == u't') :
+                    alt31 = 1
+                elif ((u'0' <= LA31_1 <= u'7')) :
+                    alt31 = 2
                 else:
-                    nvae = NoViableAltException("526:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 29, 1, self.input)
+                    nvae = NoViableAltException("536:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 31, 1, self.input)
 
                     raise nvae
 
             else:
-                nvae = NoViableAltException("526:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 29, 0, self.input)
+                nvae = NoViableAltException("536:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 31, 0, self.input)
 
                 raise nvae
 
-            if alt29 == 1:
-                # C.g:528:9: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' )
+            if alt31 == 1:
+                # C.g:538: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':
@@ -2878,8 +2984,8 @@ class CLexer(Lexer):
 
 
 
-            elif alt29 == 2:
-                # C.g:529:9: OctalEscape
+            elif alt31 == 2:
+                # C.g:539:9: OctalEscape
                 self.mOctalEscape()
 
 
@@ -2897,62 +3003,62 @@ class CLexer(Lexer):
     def mOctalEscape(self, ):
 
         try:
-            # C.g:534:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
-            alt30 = 3
-            LA30_0 = self.input.LA(1)
+            # C.g:544:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            alt32 = 3
+            LA32_0 = self.input.LA(1)
 
-            if (LA30_0 == u'\\') :
-                LA30_1 = self.input.LA(2)
+            if (LA32_0 == u'\\') :
+                LA32_1 = self.input.LA(2)
 
-                if ((u'0' <= LA30_1 <= u'3')) :
-                    LA30_2 = self.input.LA(3)
+                if ((u'0' <= LA32_1 <= u'3')) :
+                    LA32_2 = self.input.LA(3)
 
-                    if ((u'0' <= LA30_2 <= u'7')) :
-                        LA30_4 = self.input.LA(4)
+                    if ((u'0' <= LA32_2 <= u'7')) :
+                        LA32_5 = self.input.LA(4)
 
-                        if ((u'0' <= LA30_4 <= u'7')) :
-                            alt30 = 1
+                        if ((u'0' <= LA32_5 <= u'7')) :
+                            alt32 = 1
                         else:
-                            alt30 = 2
+                            alt32 = 2
                     else:
-                        alt30 = 3
-                elif ((u'4' <= LA30_1 <= u'7')) :
-                    LA30_3 = self.input.LA(3)
+                        alt32 = 3
+                elif ((u'4' <= LA32_1 <= u'7')) :
+                    LA32_3 = self.input.LA(3)
 
-                    if ((u'0' <= LA30_3 <= u'7')) :
-                        alt30 = 2
+                    if ((u'0' <= LA32_3 <= u'7')) :
+                        alt32 = 2
                     else:
-                        alt30 = 3
+                        alt32 = 3
                 else:
-                    nvae = NoViableAltException("532:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 30, 1, self.input)
+                    nvae = NoViableAltException("542:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 32, 1, self.input)
 
                     raise nvae
 
             else:
-                nvae = NoViableAltException("532:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 30, 0, self.input)
+                nvae = NoViableAltException("542:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 32, 0, self.input)
 
                 raise nvae
 
-            if alt30 == 1:
-                # C.g:534:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+            if alt32 == 1:
+                # C.g:544:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:534:14: ( '0' .. '3' )
-                # C.g:534:15: '0' .. '3'
+                # C.g:544:14: ( '0' .. '3' )
+                # C.g:544:15: '0' .. '3'
                 self.matchRange(u'0', u'3')
 
 
 
 
-                # C.g:534:25: ( '0' .. '7' )
-                # C.g:534:26: '0' .. '7'
+                # C.g:544:25: ( '0' .. '7' )
+                # C.g:544:26: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
 
 
-                # C.g:534:36: ( '0' .. '7' )
-                # C.g:534:37: '0' .. '7'
+                # C.g:544:36: ( '0' .. '7' )
+                # C.g:544:37: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -2960,19 +3066,19 @@ class CLexer(Lexer):
 
 
 
-            elif alt30 == 2:
-                # C.g:535:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+            elif alt32 == 2:
+                # C.g:545:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:535:14: ( '0' .. '7' )
-                # C.g:535:15: '0' .. '7'
+                # C.g:545:14: ( '0' .. '7' )
+                # C.g:545:15: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
 
 
-                # C.g:535:25: ( '0' .. '7' )
-                # C.g:535:26: '0' .. '7'
+                # C.g:545:25: ( '0' .. '7' )
+                # C.g:545:26: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -2980,12 +3086,12 @@ class CLexer(Lexer):
 
 
 
-            elif alt30 == 3:
-                # C.g:536:9: '\\\\' ( '0' .. '7' )
+            elif alt32 == 3:
+                # C.g:546:9: '\\\\' ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:536:14: ( '0' .. '7' )
-                # C.g:536:15: '0' .. '7'
+                # C.g:546:14: ( '0' .. '7' )
+                # C.g:546:15: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -3006,8 +3112,8 @@ class CLexer(Lexer):
     def mUnicodeEscape(self, ):
 
         try:
-            # C.g:541:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            # C.g:541:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            # C.g:551:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            # C.g:551:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             self.match(u'\\')
 
             self.match(u'u')
@@ -3038,8 +3144,8 @@ class CLexer(Lexer):
         try:
             self.type = WS
 
-            # C.g:544:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) )
-            # C.g:544:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' )
+            # C.g:554:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) )
+            # C.g:554: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();
 
@@ -3064,14 +3170,44 @@ class CLexer(Lexer):
 
 
 
+    # $ANTLR start BS
+    def mBS(self, ):
+
+        try:
+            self.type = BS
+
+            # C.g:558:5: ( ( '\\\\' ) )
+            # C.g:558:7: ( '\\\\' )
+            # C.g:558:7: ( '\\\\' )
+            # C.g:558:8: '\\\\'
+            self.match(u'\\')
+
+
+
+
+            #action start
+            self.channel=HIDDEN;
+            #action end
+
+
+
+
+        finally:
+
+            pass
+
+    # $ANTLR end BS
+
+
+
     # $ANTLR start UnicodeVocabulary
     def mUnicodeVocabulary(self, ):
 
         try:
             self.type = UnicodeVocabulary
 
-            # C.g:552:5: ( '\\u0003' .. '\\uFFFE' )
-            # C.g:552:7: '\\u0003' .. '\\uFFFE'
+            # C.g:566:5: ( '\\u0003' .. '\\uFFFE' )
+            # C.g:566:7: '\\u0003' .. '\\uFFFE'
             self.matchRange(u'\u0003', u'\uFFFE')
 
 
@@ -3092,37 +3228,37 @@ class CLexer(Lexer):
         try:
             self.type = COMMENT
 
-            # C.g:555:5: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            # C.g:555:9: '/*' ( options {greedy=false; } : . )* '*/'
+            # C.g:569:5: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            # C.g:569:9: '/*' ( options {greedy=false; } : . )* '*/'
             self.match("/*")
 
 
-            # C.g:555:14: ( options {greedy=false; } : . )*
-            while True: #loop31
-                alt31 = 2
-                LA31_0 = self.input.LA(1)
+            # C.g:569:14: ( options {greedy=false; } : . )*
+            while True: #loop33
+                alt33 = 2
+                LA33_0 = self.input.LA(1)
 
-                if (LA31_0 == u'*') :
-                    LA31_1 = self.input.LA(2)
+                if (LA33_0 == u'*') :
+                    LA33_1 = self.input.LA(2)
 
-                    if (LA31_1 == u'/') :
-                        alt31 = 2
-                    elif ((u'\u0000' <= LA31_1 <= u'.') or (u'0' <= LA31_1 <= u'\uFFFE')) :
-                        alt31 = 1
+                    if (LA33_1 == u'/') :
+                        alt33 = 2
+                    elif ((u'\u0000' <= LA33_1 <= u'.') or (u'0' <= LA33_1 <= u'\uFFFE')) :
+                        alt33 = 1
 
 
-                elif ((u'\u0000' <= LA31_0 <= u')') or (u'+' <= LA31_0 <= u'\uFFFE')) :
-                    alt31 = 1
+                elif ((u'\u0000' <= LA33_0 <= u')') or (u'+' <= LA33_0 <= u'\uFFFE')) :
+                    alt33 = 1
 
 
-                if alt31 == 1:
-                    # C.g:555:42: .
+                if alt33 == 1:
+                    # C.g:569:42: .
                     self.matchAny()
 
 
 
                 else:
-                    break #loop31
+                    break #loop33
 
 
             self.match("*/")
@@ -3149,22 +3285,22 @@ class CLexer(Lexer):
         try:
             self.type = LINE_COMMENT
 
-            # C.g:560:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
-            # C.g:560:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
+            # C.g:574:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
+            # C.g:574:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
             self.match("//")
 
 
-            # C.g:560:12: (~ ( '\\n' | '\\r' ) )*
-            while True: #loop32
-                alt32 = 2
-                LA32_0 = self.input.LA(1)
+            # C.g:574:12: (~ ( '\\n' | '\\r' ) )*
+            while True: #loop34
+                alt34 = 2
+                LA34_0 = self.input.LA(1)
 
-                if ((u'\u0000' <= LA32_0 <= u'\t') or (u'\u000B' <= LA32_0 <= u'\f') or (u'\u000E' <= LA32_0 <= u'\uFFFE')) :
-                    alt32 = 1
+                if ((u'\u0000' <= LA34_0 <= u'\t') or (u'\u000B' <= LA34_0 <= u'\f') or (u'\u000E' <= LA34_0 <= u'\uFFFE')) :
+                    alt34 = 1
 
 
-                if alt32 == 1:
-                    # C.g:560:12: ~ ( '\\n' | '\\r' )
+                if alt34 == 1:
+                    # C.g:574: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();
 
@@ -3177,17 +3313,17 @@ class CLexer(Lexer):
 
 
                 else:
-                    break #loop32
+                    break #loop34
 
 
-            # C.g:560:26: ( '\\r' )?
-            alt33 = 2
-            LA33_0 = self.input.LA(1)
+            # C.g:574:26: ( '\\r' )?
+            alt35 = 2
+            LA35_0 = self.input.LA(1)
 
-            if (LA33_0 == u'\r') :
-                alt33 = 1
-            if alt33 == 1:
-                # C.g:560:26: '\\r'
+            if (LA35_0 == u'\r') :
+                alt35 = 1
+            if alt35 == 1:
+                # C.g:574:26: '\\r'
                 self.match(u'\r')
 
 
@@ -3216,21 +3352,21 @@ class CLexer(Lexer):
         try:
             self.type = LINE_COMMAND
 
-            # C.g:565:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
-            # C.g:565:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
+            # C.g:579:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
+            # C.g:579:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
             self.match(u'#')
 
-            # C.g:565:11: (~ ( '\\n' | '\\r' ) )*
-            while True: #loop34
-                alt34 = 2
-                LA34_0 = self.input.LA(1)
+            # C.g:579:11: (~ ( '\\n' | '\\r' ) )*
+            while True: #loop36
+                alt36 = 2
+                LA36_0 = self.input.LA(1)
 
-                if ((u'\u0000' <= LA34_0 <= u'\t') or (u'\u000B' <= LA34_0 <= u'\f') or (u'\u000E' <= LA34_0 <= u'\uFFFE')) :
-                    alt34 = 1
+                if ((u'\u0000' <= LA36_0 <= u'\t') or (u'\u000B' <= LA36_0 <= u'\f') or (u'\u000E' <= LA36_0 <= u'\uFFFE')) :
+                    alt36 = 1
 
 
-                if alt34 == 1:
-                    # C.g:565:11: ~ ( '\\n' | '\\r' )
+                if alt36 == 1:
+                    # C.g:579: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();
 
@@ -3243,17 +3379,17 @@ class CLexer(Lexer):
 
 
                 else:
-                    break #loop34
+                    break #loop36
 
 
-            # C.g:565:25: ( '\\r' )?
-            alt35 = 2
-            LA35_0 = self.input.LA(1)
+            # C.g:579:25: ( '\\r' )?
+            alt37 = 2
+            LA37_0 = self.input.LA(1)
 
-            if (LA35_0 == u'\r') :
-                alt35 = 1
-            if alt35 == 1:
-                # C.g:565:25: '\\r'
+            if (LA37_0 == u'\r') :
+                alt37 = 1
+            if alt37 == 1:
+                # C.g:579:25: '\\r'
                 self.match(u'\r')
 
 
@@ -3277,557 +3413,581 @@ class CLexer(Lexer):
 
 
     def mTokens(self):
-        # C.g:1:8: ( T24 | T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | T40 | T41 | T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | T66 | T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | T81 | T82 | T83 | T84 | T85 | T86 | T87 | T88 | T89 | T90 | T91 | T92 | T93 | T94 | T95 | T96 | T97 | T98 | T99 | T100 | T101 | T102 | T103 | IDENTIFIER | CHARACTER_LITERAL | STRING_LITERAL | HEX_LITERAL | DECIMAL_LITERAL | OCTAL_LITERAL | FLOATING_POINT_LITERAL | WS | UnicodeVocabulary | COMMENT | LINE_COMMENT | LINE_COMMAND )
-        alt36 = 92
-        alt36 = self.dfa36.predict(self.input)
-        if alt36 == 1:
-            # C.g:1:10: T24
-            self.mT24()
-
-
-
-        elif alt36 == 2:
-            # C.g:1:14: T25
+        # C.g:1:8: ( T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | T40 | T41 | T42 | T43 | T44 | T45 | T46 | T47 | T48 | T49 | T50 | T51 | T52 | T53 | T54 | T55 | T56 | T57 | T58 | T59 | T60 | T61 | T62 | T63 | T64 | T65 | T66 | T67 | T68 | T69 | T70 | T71 | T72 | T73 | T74 | T75 | T76 | T77 | T78 | T79 | T80 | T81 | T82 | T83 | T84 | T85 | T86 | T87 | T88 | T89 | T90 | T91 | T92 | T93 | T94 | T95 | T96 | T97 | T98 | T99 | T100 | T101 | T102 | T103 | T104 | T105 | T106 | T107 | IDENTIFIER | CHARACTER_LITERAL | STRING_LITERAL | HEX_LITERAL | DECIMAL_LITERAL | OCTAL_LITERAL | FLOATING_POINT_LITERAL | WS | BS | UnicodeVocabulary | COMMENT | LINE_COMMENT | LINE_COMMAND )
+        alt38 = 96
+        alt38 = self.dfa38.predict(self.input)
+        if alt38 == 1:
+            # C.g:1:10: T25
             self.mT25()
 
 
 
-        elif alt36 == 3:
-            # C.g:1:18: T26
+        elif alt38 == 2:
+            # C.g:1:14: T26
             self.mT26()
 
 
 
-        elif alt36 == 4:
-            # C.g:1:22: T27
+        elif alt38 == 3:
+            # C.g:1:18: T27
             self.mT27()
 
 
 
-        elif alt36 == 5:
-            # C.g:1:26: T28
+        elif alt38 == 4:
+            # C.g:1:22: T28
             self.mT28()
 
 
 
-        elif alt36 == 6:
-            # C.g:1:30: T29
+        elif alt38 == 5:
+            # C.g:1:26: T29
             self.mT29()
 
 
 
-        elif alt36 == 7:
-            # C.g:1:34: T30
+        elif alt38 == 6:
+            # C.g:1:30: T30
             self.mT30()
 
 
 
-        elif alt36 == 8:
-            # C.g:1:38: T31
+        elif alt38 == 7:
+            # C.g:1:34: T31
             self.mT31()
 
 
 
-        elif alt36 == 9:
-            # C.g:1:42: T32
+        elif alt38 == 8:
+            # C.g:1:38: T32
             self.mT32()
 
 
 
-        elif alt36 == 10:
-            # C.g:1:46: T33
+        elif alt38 == 9:
+            # C.g:1:42: T33
             self.mT33()
 
 
 
-        elif alt36 == 11:
-            # C.g:1:50: T34
+        elif alt38 == 10:
+            # C.g:1:46: T34
             self.mT34()
 
 
 
-        elif alt36 == 12:
-            # C.g:1:54: T35
+        elif alt38 == 11:
+            # C.g:1:50: T35
             self.mT35()
 
 
 
-        elif alt36 == 13:
-            # C.g:1:58: T36
+        elif alt38 == 12:
+            # C.g:1:54: T36
             self.mT36()
 
 
 
-        elif alt36 == 14:
-            # C.g:1:62: T37
+        elif alt38 == 13:
+            # C.g:1:58: T37
             self.mT37()
 
 
 
-        elif alt36 == 15:
-            # C.g:1:66: T38
+        elif alt38 == 14:
+            # C.g:1:62: T38
             self.mT38()
 
 
 
-        elif alt36 == 16:
-            # C.g:1:70: T39
+        elif alt38 == 15:
+            # C.g:1:66: T39
             self.mT39()
 
 
 
-        elif alt36 == 17:
-            # C.g:1:74: T40
+        elif alt38 == 16:
+            # C.g:1:70: T40
             self.mT40()
 
 
 
-        elif alt36 == 18:
-            # C.g:1:78: T41
+        elif alt38 == 17:
+            # C.g:1:74: T41
             self.mT41()
 
 
 
-        elif alt36 == 19:
-            # C.g:1:82: T42
+        elif alt38 == 18:
+            # C.g:1:78: T42
             self.mT42()
 
 
 
-        elif alt36 == 20:
-            # C.g:1:86: T43
+        elif alt38 == 19:
+            # C.g:1:82: T43
             self.mT43()
 
 
 
-        elif alt36 == 21:
-            # C.g:1:90: T44
+        elif alt38 == 20:
+            # C.g:1:86: T44
             self.mT44()
 
 
 
-        elif alt36 == 22:
-            # C.g:1:94: T45
+        elif alt38 == 21:
+            # C.g:1:90: T45
             self.mT45()
 
 
 
-        elif alt36 == 23:
-            # C.g:1:98: T46
+        elif alt38 == 22:
+            # C.g:1:94: T46
             self.mT46()
 
 
 
-        elif alt36 == 24:
-            # C.g:1:102: T47
+        elif alt38 == 23:
+            # C.g:1:98: T47
             self.mT47()
 
 
 
-        elif alt36 == 25:
-            # C.g:1:106: T48
+        elif alt38 == 24:
+            # C.g:1:102: T48
             self.mT48()
 
 
 
-        elif alt36 == 26:
-            # C.g:1:110: T49
+        elif alt38 == 25:
+            # C.g:1:106: T49
             self.mT49()
 
 
 
-        elif alt36 == 27:
-            # C.g:1:114: T50
+        elif alt38 == 26:
+            # C.g:1:110: T50
             self.mT50()
 
 
 
-        elif alt36 == 28:
-            # C.g:1:118: T51
+        elif alt38 == 27:
+            # C.g:1:114: T51
             self.mT51()
 
 
 
-        elif alt36 == 29:
-            # C.g:1:122: T52
+        elif alt38 == 28:
+            # C.g:1:118: T52
             self.mT52()
 
 
 
-        elif alt36 == 30:
-            # C.g:1:126: T53
+        elif alt38 == 29:
+            # C.g:1:122: T53
             self.mT53()
 
 
 
-        elif alt36 == 31:
-            # C.g:1:130: T54
+        elif alt38 == 30:
+            # C.g:1:126: T54
             self.mT54()
 
 
 
-        elif alt36 == 32:
-            # C.g:1:134: T55
+        elif alt38 == 31:
+            # C.g:1:130: T55
             self.mT55()
 
 
 
-        elif alt36 == 33:
-            # C.g:1:138: T56
+        elif alt38 == 32:
+            # C.g:1:134: T56
             self.mT56()
 
 
 
-        elif alt36 == 34:
-            # C.g:1:142: T57
+        elif alt38 == 33:
+            # C.g:1:138: T57
             self.mT57()
 
 
 
-        elif alt36 == 35:
-            # C.g:1:146: T58
+        elif alt38 == 34:
+            # C.g:1:142: T58
             self.mT58()
 
 
 
-        elif alt36 == 36:
-            # C.g:1:150: T59
+        elif alt38 == 35:
+            # C.g:1:146: T59
             self.mT59()
 
 
 
-        elif alt36 == 37:
-            # C.g:1:154: T60
+        elif alt38 == 36:
+            # C.g:1:150: T60
             self.mT60()
 
 
 
-        elif alt36 == 38:
-            # C.g:1:158: T61
+        elif alt38 == 37:
+            # C.g:1:154: T61
             self.mT61()
 
 
 
-        elif alt36 == 39:
-            # C.g:1:162: T62
+        elif alt38 == 38:
+            # C.g:1:158: T62
             self.mT62()
 
 
 
-        elif alt36 == 40:
-            # C.g:1:166: T63
+        elif alt38 == 39:
+            # C.g:1:162: T63
             self.mT63()
 
 
 
-        elif alt36 == 41:
-            # C.g:1:170: T64
+        elif alt38 == 40:
+            # C.g:1:166: T64
             self.mT64()
 
 
 
-        elif alt36 == 42:
-            # C.g:1:174: T65
+        elif alt38 == 41:
+            # C.g:1:170: T65
             self.mT65()
 
 
 
-        elif alt36 == 43:
-            # C.g:1:178: T66
+        elif alt38 == 42:
+            # C.g:1:174: T66
             self.mT66()
 
 
 
-        elif alt36 == 44:
-            # C.g:1:182: T67
+        elif alt38 == 43:
+            # C.g:1:178: T67
             self.mT67()
 
 
 
-        elif alt36 == 45:
-            # C.g:1:186: T68
+        elif alt38 == 44:
+            # C.g:1:182: T68
             self.mT68()
 
 
 
-        elif alt36 == 46:
-            # C.g:1:190: T69
+        elif alt38 == 45:
+            # C.g:1:186: T69
             self.mT69()
 
 
 
-        elif alt36 == 47:
-            # C.g:1:194: T70
+        elif alt38 == 46:
+            # C.g:1:190: T70
             self.mT70()
 
 
 
-        elif alt36 == 48:
-            # C.g:1:198: T71
+        elif alt38 == 47:
+            # C.g:1:194: T71
             self.mT71()
 
 
 
-        elif alt36 == 49:
-            # C.g:1:202: T72
+        elif alt38 == 48:
+            # C.g:1:198: T72
             self.mT72()
 
 
 
-        elif alt36 == 50:
-            # C.g:1:206: T73
+        elif alt38 == 49:
+            # C.g:1:202: T73
             self.mT73()
 
 
 
-        elif alt36 == 51:
-            # C.g:1:210: T74
+        elif alt38 == 50:
+            # C.g:1:206: T74
             self.mT74()
 
 
 
-        elif alt36 == 52:
-            # C.g:1:214: T75
+        elif alt38 == 51:
+            # C.g:1:210: T75
             self.mT75()
 
 
 
-        elif alt36 == 53:
-            # C.g:1:218: T76
+        elif alt38 == 52:
+            # C.g:1:214: T76
             self.mT76()
 
 
 
-        elif alt36 == 54:
-            # C.g:1:222: T77
+        elif alt38 == 53:
+            # C.g:1:218: T77
             self.mT77()
 
 
 
-        elif alt36 == 55:
-            # C.g:1:226: T78
+        elif alt38 == 54:
+            # C.g:1:222: T78
             self.mT78()
 
 
 
-        elif alt36 == 56:
-            # C.g:1:230: T79
+        elif alt38 == 55:
+            # C.g:1:226: T79
             self.mT79()
 
 
 
-        elif alt36 == 57:
-            # C.g:1:234: T80
+        elif alt38 == 56:
+            # C.g:1:230: T80
             self.mT80()
 
 
 
-        elif alt36 == 58:
-            # C.g:1:238: T81
+        elif alt38 == 57:
+            # C.g:1:234: T81
             self.mT81()
 
 
 
-        elif alt36 == 59:
-            # C.g:1:242: T82
+        elif alt38 == 58:
+            # C.g:1:238: T82
             self.mT82()
 
 
 
-        elif alt36 == 60:
-            # C.g:1:246: T83
+        elif alt38 == 59:
+            # C.g:1:242: T83
             self.mT83()
 
 
 
-        elif alt36 == 61:
-            # C.g:1:250: T84
+        elif alt38 == 60:
+            # C.g:1:246: T84
             self.mT84()
 
 
 
-        elif alt36 == 62:
-            # C.g:1:254: T85
+        elif alt38 == 61:
+            # C.g:1:250: T85
             self.mT85()
 
 
 
-        elif alt36 == 63:
-            # C.g:1:258: T86
+        elif alt38 == 62:
+            # C.g:1:254: T86
             self.mT86()
 
 
 
-        elif alt36 == 64:
-            # C.g:1:262: T87
+        elif alt38 == 63:
+            # C.g:1:258: T87
             self.mT87()
 
 
 
-        elif alt36 == 65:
-            # C.g:1:266: T88
+        elif alt38 == 64:
+            # C.g:1:262: T88
             self.mT88()
 
 
 
-        elif alt36 == 66:
-            # C.g:1:270: T89
+        elif alt38 == 65:
+            # C.g:1:266: T89
             self.mT89()
 
 
 
-        elif alt36 == 67:
-            # C.g:1:274: T90
+        elif alt38 == 66:
+            # C.g:1:270: T90
             self.mT90()
 
 
 
-        elif alt36 == 68:
-            # C.g:1:278: T91
+        elif alt38 == 67:
+            # C.g:1:274: T91
             self.mT91()
 
 
 
-        elif alt36 == 69:
-            # C.g:1:282: T92
+        elif alt38 == 68:
+            # C.g:1:278: T92
             self.mT92()
 
 
 
-        elif alt36 == 70:
-            # C.g:1:286: T93
+        elif alt38 == 69:
+            # C.g:1:282: T93
             self.mT93()
 
 
 
-        elif alt36 == 71:
-            # C.g:1:290: T94
+        elif alt38 == 70:
+            # C.g:1:286: T94
             self.mT94()
 
 
 
-        elif alt36 == 72:
-            # C.g:1:294: T95
+        elif alt38 == 71:
+            # C.g:1:290: T95
             self.mT95()
 
 
 
-        elif alt36 == 73:
-            # C.g:1:298: T96
+        elif alt38 == 72:
+            # C.g:1:294: T96
             self.mT96()
 
 
 
-        elif alt36 == 74:
-            # C.g:1:302: T97
+        elif alt38 == 73:
+            # C.g:1:298: T97
             self.mT97()
 
 
 
-        elif alt36 == 75:
-            # C.g:1:306: T98
+        elif alt38 == 74:
+            # C.g:1:302: T98
             self.mT98()
 
 
 
-        elif alt36 == 76:
-            # C.g:1:310: T99
+        elif alt38 == 75:
+            # C.g:1:306: T99
             self.mT99()
 
 
 
-        elif alt36 == 77:
-            # C.g:1:314: T100
+        elif alt38 == 76:
+            # C.g:1:310: T100
             self.mT100()
 
 
 
-        elif alt36 == 78:
-            # C.g:1:319: T101
+        elif alt38 == 77:
+            # C.g:1:315: T101
             self.mT101()
 
 
 
-        elif alt36 == 79:
-            # C.g:1:324: T102
+        elif alt38 == 78:
+            # C.g:1:320: T102
             self.mT102()
 
 
 
-        elif alt36 == 80:
-            # C.g:1:329: T103
+        elif alt38 == 79:
+            # C.g:1:325: T103
             self.mT103()
 
 
 
-        elif alt36 == 81:
-            # C.g:1:334: IDENTIFIER
+        elif alt38 == 80:
+            # C.g:1:330: T104
+            self.mT104()
+
+
+
+        elif alt38 == 81:
+            # C.g:1:335: T105
+            self.mT105()
+
+
+
+        elif alt38 == 82:
+            # C.g:1:340: T106
+            self.mT106()
+
+
+
+        elif alt38 == 83:
+            # C.g:1:345: T107
+            self.mT107()
+
+
+
+        elif alt38 == 84:
+            # C.g:1:350: IDENTIFIER
             self.mIDENTIFIER()
 
 
 
-        elif alt36 == 82:
-            # C.g:1:345: CHARACTER_LITERAL
+        elif alt38 == 85:
+            # C.g:1:361: CHARACTER_LITERAL
             self.mCHARACTER_LITERAL()
 
 
 
-        elif alt36 == 83:
-            # C.g:1:363: STRING_LITERAL
+        elif alt38 == 86:
+            # C.g:1:379: STRING_LITERAL
             self.mSTRING_LITERAL()
 
 
 
-        elif alt36 == 84:
-            # C.g:1:378: HEX_LITERAL
+        elif alt38 == 87:
+            # C.g:1:394: HEX_LITERAL
             self.mHEX_LITERAL()
 
 
 
-        elif alt36 == 85:
-            # C.g:1:390: DECIMAL_LITERAL
+        elif alt38 == 88:
+            # C.g:1:406: DECIMAL_LITERAL
             self.mDECIMAL_LITERAL()
 
 
 
-        elif alt36 == 86:
-            # C.g:1:406: OCTAL_LITERAL
+        elif alt38 == 89:
+            # C.g:1:422: OCTAL_LITERAL
             self.mOCTAL_LITERAL()
 
 
 
-        elif alt36 == 87:
-            # C.g:1:420: FLOATING_POINT_LITERAL
+        elif alt38 == 90:
+            # C.g:1:436: FLOATING_POINT_LITERAL
             self.mFLOATING_POINT_LITERAL()
 
 
 
-        elif alt36 == 88:
-            # C.g:1:443: WS
+        elif alt38 == 91:
+            # C.g:1:459: WS
             self.mWS()
 
 
 
-        elif alt36 == 89:
-            # C.g:1:446: UnicodeVocabulary
+        elif alt38 == 92:
+            # C.g:1:462: BS
+            self.mBS()
+
+
+
+        elif alt38 == 93:
+            # C.g:1:465: UnicodeVocabulary
             self.mUnicodeVocabulary()
 
 
 
-        elif alt36 == 90:
-            # C.g:1:464: COMMENT
+        elif alt38 == 94:
+            # C.g:1:483: COMMENT
             self.mCOMMENT()
 
 
 
-        elif alt36 == 91:
-            # C.g:1:472: LINE_COMMENT
+        elif alt38 == 95:
+            # C.g:1:491: LINE_COMMENT
             self.mLINE_COMMENT()
 
 
 
-        elif alt36 == 92:
-            # C.g:1:485: LINE_COMMAND
+        elif alt38 == 96:
+            # C.g:1:504: LINE_COMMAND
             self.mLINE_COMMAND()
 
 
@@ -3837,34 +3997,34 @@ class CLexer(Lexer):
 
 
 
-    # lookup tables for DFA #26
+    # lookup tables for DFA #28
 
-    DFA26_eot = DFA.unpack(
+    DFA28_eot = DFA.unpack(
         u"\7\uffff\1\10\2\uffff"
         )
 
-    DFA26_eof = DFA.unpack(
+    DFA28_eof = DFA.unpack(
         u"\12\uffff"
         )
 
-    DFA26_min = DFA.unpack(
+    DFA28_min = DFA.unpack(
         u"\2\56\2\uffff\1\53\1\uffff\2\60\2\uffff"
         )
 
-    DFA26_max = DFA.unpack(
+    DFA28_max = DFA.unpack(
         u"\1\71\1\146\2\uffff\1\71\1\uffff\1\71\1\146\2\uffff"
         )
 
-    DFA26_accept = DFA.unpack(
+    DFA28_accept = DFA.unpack(
         u"\2\uffff\1\2\1\1\1\uffff\1\4\2\uffff\2\3"
         )
 
-    DFA26_special = DFA.unpack(
+    DFA28_special = DFA.unpack(
         u"\12\uffff"
         )
 
             
-    DFA26_transition = [
+    DFA28_transition = [
         DFA.unpack(u"\1\2\1\uffff\12\1"),
         DFA.unpack(u"\1\3\1\uffff\12\1\12\uffff\1\5\1\4\1\5\35\uffff\1\5"
         u"\1\4\1\5"),
@@ -3879,193 +4039,204 @@ class CLexer(Lexer):
         DFA.unpack(u"")
     ]
 
-    # class definition for DFA #26
-
-    DFA26 = DFA
-    # lookup tables for DFA #36
-
-    DFA36_eot = DFA.unpack(
-        u"\2\uffff\1\65\1\uffff\1\70\13\65\3\uffff\2\65\4\uffff\1\130\1\132"
-        u"\1\136\1\142\1\146\1\150\1\153\1\uffff\1\156\1\161\1\164\1\166"
-        u"\1\171\1\uffff\4\65\1\62\1\uffff\1\62\2\u0081\1\uffff\1\62\2\uffff"
-        u"\1\65\4\uffff\15\65\1\u0098\4\65\1\u009e\2\65\3\uffff\1\u00a2\1"
-        u"\65\34\uffff\1\u00a5\2\uffff\1\u00a7\10\uffff\3\65\4\uffff\1\u00ab"
-        u"\1\u0081\2\uffff\22\65\1\uffff\1\u00bf\2\65\1\u00c2\1\65\1\uffff"
-        u"\3\65\1\uffff\1\u00c7\4\uffff\3\65\1\uffff\1\65\1\u00cc\1\65\1"
-        u"\u00ce\6\65\1\u00d5\2\65\1\u00d8\3\65\1\u00dc\1\u00dd\1\uffff\1"
-        u"\u00de\1\65\1\uffff\4\65\1\uffff\1\65\1\u00e5\2\65\1\uffff\1\65"
-        u"\1\uffff\4\65\1\u00ed\1\65\1\uffff\2\65\1\uffff\2\65\1\u00f3\3"
-        u"\uffff\1\u00f4\2\65\1\u00f7\1\65\1\u00f9\1\uffff\1\u00fa\1\65\1"
-        u"\u00fc\1\u00fd\1\u00fe\1\u00ff\1\u0100\1\uffff\1\u0101\1\u0102"
-        u"\3\65\2\uffff\1\u0106\1\65\1\uffff\1\65\2\uffff\1\u0109\7\uffff"
-        u"\3\65\1\uffff\1\u010d\1\65\1\uffff\1\u010f\1\u0110\1\u0111\1\uffff"
-        u"\1\u0112\4\uffff"
+    # class definition for DFA #28
+
+    DFA28 = DFA
+    # lookup tables for DFA #38
+
+    DFA38_eot = DFA.unpack(
+        u"\2\uffff\1\70\1\uffff\1\73\14\70\3\uffff\3\70\4\uffff\1\136\1\141"
+        u"\1\144\1\150\1\154\1\156\1\161\1\uffff\1\164\1\167\1\172\1\174"
+        u"\1\177\1\uffff\4\70\1\uffff\2\65\2\u0087\2\uffff\1\65\2\uffff\1"
+        u"\70\4\uffff\16\70\1\u00a0\4\70\1\u00a6\2\70\3\uffff\1\u00aa\3\70"
+        u"\34\uffff\1\u00af\2\uffff\1\u00b1\10\uffff\3\70\4\uffff\1\u00b5"
+        u"\1\u0087\3\uffff\23\70\1\uffff\1\u00ca\2\70\1\u00cd\1\70\1\uffff"
+        u"\3\70\1\uffff\1\u00d2\2\70\4\uffff\3\70\1\uffff\1\70\1\u00d9\1"
+        u"\70\1\u00db\6\70\1\u00e2\4\70\1\u00e7\1\u00e8\2\70\1\u00eb\1\uffff"
+        u"\1\u00ec\1\70\1\uffff\4\70\1\uffff\3\70\1\u00f5\2\70\1\uffff\1"
+        u"\70\1\uffff\2\70\1\u00fb\3\70\1\uffff\4\70\2\uffff\1\70\1\u0104"
+        u"\2\uffff\1\u0105\2\70\1\u0108\3\70\1\u010c\1\uffff\1\u010d\1\70"
+        u"\1\u010f\1\u0110\1\u0111\1\uffff\1\u0112\1\u0113\1\u0114\1\70\1"
+        u"\u0116\1\u0117\2\70\2\uffff\1\u011a\1\70\1\uffff\2\70\1\u011e\2"
+        u"\uffff\1\u011f\6\uffff\1\70\2\uffff\2\70\1\uffff\1\u0123\2\70\2"
+        u"\uffff\1\u0126\1\u0127\1\u0128\1\uffff\1\u0129\1\u012a\5\uffff"
         )
 
-    DFA36_eof = DFA.unpack(
-        u"\u0113\uffff"
+    DFA38_eof = DFA.unpack(
+        u"\u012b\uffff"
         )
 
-    DFA36_min = DFA.unpack(
-        u"\1\3\1\uffff\1\171\1\uffff\1\75\1\154\1\150\1\165\1\145\1\157\1"
-        u"\141\1\146\1\157\1\154\1\145\1\156\3\uffff\1\116\1\125\4\uffff"
-        u"\1\75\1\56\1\53\1\55\1\52\1\75\1\46\1\uffff\1\75\1\74\3\75\1\uffff"
-        u"\1\150\1\157\1\162\1\42\1\0\1\uffff\1\0\2\56\1\uffff\1\0\2\uffff"
-        u"\1\160\4\uffff\1\165\1\164\1\163\1\147\1\141\1\157\1\151\1\164"
-        u"\1\147\1\151\1\156\1\163\1\141\1\44\1\164\1\156\1\157\1\162\1\44"
-        u"\1\146\1\151\3\uffff\1\44\1\124\34\uffff\1\75\2\uffff\1\75\10\uffff"
-        u"\1\151\1\164\1\145\4\uffff\2\56\2\uffff\1\145\1\155\3\145\1\156"
-        u"\1\164\1\165\1\162\1\164\1\157\1\165\1\151\1\144\1\141\1\163\1"
-        u"\145\1\162\1\uffff\1\44\1\147\1\141\1\44\1\142\1\uffff\1\141\1"
-        u"\157\1\151\1\uffff\1\44\4\uffff\1\154\1\157\1\141\1\uffff\1\144"
-        u"\1\44\1\162\1\44\1\157\1\145\1\151\1\143\1\164\1\143\1\44\1\162"
-        u"\1\163\1\44\1\164\1\151\1\164\2\44\1\uffff\1\44\1\164\1\uffff\1"
-        u"\154\1\165\1\156\1\147\1\uffff\1\145\1\44\1\153\1\145\1\uffff\1"
-        u"\156\1\uffff\1\146\1\144\1\143\1\164\1\44\1\150\1\uffff\1\156\1"
-        u"\164\1\uffff\1\151\1\156\1\44\3\uffff\1\44\1\145\1\154\1\44\1\156"
-        u"\1\44\1\uffff\1\44\1\146\5\44\1\uffff\2\44\1\145\1\154\1\165\2"
-        u"\uffff\1\44\1\164\1\uffff\1\145\2\uffff\1\44\7\uffff\1\162\2\145"
-        u"\1\uffff\1\44\1\144\1\uffff\3\44\1\uffff\1\44\4\uffff"
+    DFA38_min = DFA.unpack(
+        u"\1\3\1\uffff\1\171\1\uffff\1\75\1\154\1\150\1\165\1\145\1\124\1"
+        u"\157\1\141\1\146\1\157\1\154\1\145\1\156\3\uffff\1\116\1\120\1"
+        u"\106\4\uffff\1\75\1\56\1\53\1\55\1\52\1\75\1\46\1\uffff\1\75\1"
+        u"\74\3\75\1\uffff\1\150\1\157\1\162\1\42\1\uffff\2\0\2\56\2\uffff"
+        u"\1\0\2\uffff\1\160\4\uffff\1\165\1\164\1\163\1\141\1\157\1\151"
+        u"\1\147\1\164\1\147\1\101\1\151\1\163\1\156\1\141\1\44\1\164\1\156"
+        u"\1\157\1\162\1\44\1\146\1\151\3\uffff\1\44\2\124\1\111\34\uffff"
+        u"\1\75\2\uffff\1\75\10\uffff\1\151\1\164\1\145\4\uffff\2\56\3\uffff"
+        u"\1\145\1\155\2\145\1\165\1\164\1\162\1\164\1\156\1\145\1\157\1"
+        u"\151\1\165\1\124\1\141\1\144\1\145\1\163\1\162\1\uffff\1\44\1\147"
+        u"\1\141\1\44\1\142\1\uffff\1\141\1\157\1\151\1\uffff\1\44\1\111"
+        u"\1\101\4\uffff\1\154\1\157\1\141\1\uffff\1\144\1\44\1\162\1\44"
+        u"\1\143\1\151\1\164\1\143\1\145\1\157\1\44\1\163\1\162\1\111\1\164"
+        u"\2\44\1\151\1\164\1\44\1\uffff\1\44\1\164\1\uffff\1\154\1\165\1"
+        u"\156\1\147\1\uffff\1\117\1\120\1\145\1\44\1\153\1\145\1\uffff\1"
+        u"\156\1\uffff\1\164\1\143\1\44\1\150\1\144\1\146\1\uffff\1\164\1"
+        u"\156\1\103\1\151\2\uffff\1\156\1\44\2\uffff\1\44\1\145\1\154\1"
+        u"\44\1\156\1\116\1\111\1\44\1\uffff\1\44\1\146\3\44\1\uffff\3\44"
+        u"\1\145\2\44\1\154\1\165\2\uffff\1\44\1\164\1\uffff\1\145\1\101"
+        u"\1\44\2\uffff\1\44\6\uffff\1\162\2\uffff\2\145\1\uffff\1\44\1\144"
+        u"\1\114\2\uffff\3\44\1\uffff\2\44\5\uffff"
         )
 
-    DFA36_max = DFA.unpack(
-        u"\1\ufffe\1\uffff\1\171\1\uffff\1\75\1\170\1\167\1\165\1\145\2\157"
-        u"\1\156\3\157\1\156\3\uffff\1\116\1\125\4\uffff\1\75\1\71\1\75\1"
-        u"\76\3\75\1\uffff\2\75\1\76\1\75\1\174\1\uffff\1\150\1\157\1\162"
-        u"\1\42\1\ufffe\1\uffff\1\ufffe\1\170\1\146\1\uffff\1\ufffe\2\uffff"
-        u"\1\160\4\uffff\1\165\1\164\1\163\1\172\1\162\1\157\1\151\2\164"
-        u"\1\154\1\156\1\163\1\141\1\172\1\164\1\156\1\157\1\162\1\172\1"
-        u"\146\1\163\3\uffff\1\172\1\124\34\uffff\1\75\2\uffff\1\75\10\uffff"
-        u"\1\151\1\164\1\145\4\uffff\2\146\2\uffff\1\145\1\155\3\145\1\156"
-        u"\1\164\1\165\1\162\1\164\1\157\1\165\1\151\1\144\1\141\1\164\1"
-        u"\145\1\162\1\uffff\1\172\1\147\1\141\1\172\1\142\1\uffff\1\141"
-        u"\1\157\1\151\1\uffff\1\172\4\uffff\1\154\1\157\1\141\1\uffff\1"
-        u"\144\1\172\1\162\1\172\1\157\1\145\1\151\1\143\1\164\1\143\1\172"
-        u"\1\162\1\163\1\172\1\164\1\151\1\164\2\172\1\uffff\1\172\1\164"
-        u"\1\uffff\1\154\1\165\1\156\1\147\1\uffff\1\145\1\172\1\153\1\145"
-        u"\1\uffff\1\156\1\uffff\1\146\1\144\1\143\1\164\1\172\1\150\1\uffff"
-        u"\1\156\1\164\1\uffff\1\151\1\156\1\172\3\uffff\1\172\1\145\1\154"
-        u"\1\172\1\156\1\172\1\uffff\1\172\1\146\5\172\1\uffff\2\172\1\145"
-        u"\1\154\1\165\2\uffff\1\172\1\164\1\uffff\1\145\2\uffff\1\172\7"
-        u"\uffff\1\162\2\145\1\uffff\1\172\1\144\1\uffff\3\172\1\uffff\1"
-        u"\172\4\uffff"
+    DFA38_max = DFA.unpack(
+        u"\1\ufffe\1\uffff\1\171\1\uffff\1\75\1\170\1\167\1\165\1\145\1\124"
+        u"\2\157\1\156\3\157\1\156\3\uffff\1\116\1\125\1\106\4\uffff\1\75"
+        u"\1\71\1\75\1\76\3\75\1\uffff\2\75\1\76\1\75\1\174\1\uffff\1\150"
+        u"\1\157\1\162\1\47\1\uffff\2\ufffe\1\170\1\146\2\uffff\1\ufffe\2"
+        u"\uffff\1\160\4\uffff\1\165\1\164\1\163\1\162\1\157\1\151\1\172"
+        u"\2\164\1\101\1\154\1\163\1\156\1\141\1\172\1\164\1\156\1\157\1"
+        u"\162\1\172\1\146\1\163\3\uffff\1\172\2\124\1\111\34\uffff\1\75"
+        u"\2\uffff\1\75\10\uffff\1\151\1\164\1\145\4\uffff\2\146\3\uffff"
+        u"\1\145\1\155\2\145\1\165\1\164\1\162\1\164\1\156\1\145\1\157\1"
+        u"\151\1\165\1\124\1\141\1\144\1\145\1\164\1\162\1\uffff\1\172\1"
+        u"\147\1\141\1\172\1\142\1\uffff\1\141\1\157\1\151\1\uffff\1\172"
+        u"\1\111\1\101\4\uffff\1\154\1\157\1\141\1\uffff\1\144\1\172\1\162"
+        u"\1\172\1\143\1\151\1\164\1\143\1\145\1\157\1\172\1\163\1\162\1"
+        u"\111\1\164\2\172\1\151\1\164\1\172\1\uffff\1\172\1\164\1\uffff"
+        u"\1\154\1\165\1\156\1\147\1\uffff\1\117\1\120\1\145\1\172\1\153"
+        u"\1\145\1\uffff\1\156\1\uffff\1\164\1\143\1\172\1\150\1\144\1\146"
+        u"\1\uffff\1\164\1\156\1\103\1\151\2\uffff\1\156\1\172\2\uffff\1"
+        u"\172\1\145\1\154\1\172\1\156\1\116\1\111\1\172\1\uffff\1\172\1"
+        u"\146\3\172\1\uffff\3\172\1\145\2\172\1\154\1\165\2\uffff\1\172"
+        u"\1\164\1\uffff\1\145\1\101\1\172\2\uffff\1\172\6\uffff\1\162\2"
+        u"\uffff\2\145\1\uffff\1\172\1\144\1\114\2\uffff\3\172\1\uffff\2"
+        u"\172\5\uffff"
         )
 
-    DFA36_accept = DFA.unpack(
-        u"\1\uffff\1\1\1\uffff\1\3\14\uffff\1\22\1\23\1\26\2\uffff\1\34\1"
-        u"\35\1\36\1\37\7\uffff\1\54\5\uffff\1\70\5\uffff\1\121\3\uffff\1"
-        u"\130\1\uffff\1\131\1\1\1\uffff\1\121\1\3\1\75\1\4\25\uffff\1\22"
-        u"\1\23\1\26\2\uffff\1\34\1\35\1\36\1\37\1\56\1\40\1\41\1\51\1\127"
-        u"\1\46\1\61\1\42\1\62\1\52\1\47\1\43\1\57\1\132\1\133\1\44\1\60"
-        u"\1\45\1\72\1\65\1\53\1\54\1\76\1\55\1\uffff\1\101\1\77\1\uffff"
-        u"\1\102\1\100\1\66\1\74\1\67\1\71\1\73\1\70\3\uffff\1\123\1\122"
-        u"\1\124\1\125\2\uffff\1\130\1\134\22\uffff\1\107\5\uffff\1\113\3"
-        u"\uffff\1\32\1\uffff\1\63\1\103\1\64\1\104\3\uffff\1\126\23\uffff"
-        u"\1\14\2\uffff\1\114\4\uffff\1\33\4\uffff\1\27\1\uffff\1\110\6\uffff"
-        u"\1\7\2\uffff\1\11\3\uffff\1\105\1\12\1\15\6\uffff\1\115\7\uffff"
-        u"\1\13\5\uffff\1\30\1\16\2\uffff\1\25\1\uffff\1\112\1\117\1\uffff"
-        u"\1\5\1\50\1\20\1\6\1\24\1\111\1\120\3\uffff\1\17\2\uffff\1\2\3"
-        u"\uffff\1\106\1\uffff\1\10\1\31\1\116\1\21"
+    DFA38_accept = DFA.unpack(
+        u"\1\uffff\1\1\1\uffff\1\3\15\uffff\1\23\1\24\1\27\3\uffff\1\37\1"
+        u"\40\1\41\1\42\7\uffff\1\57\5\uffff\1\73\4\uffff\1\124\4\uffff\1"
+        u"\133\1\134\1\uffff\1\135\1\1\1\uffff\1\124\1\3\1\100\1\4\26\uffff"
+        u"\1\23\1\24\1\27\4\uffff\1\37\1\40\1\41\1\42\1\61\1\43\1\44\1\132"
+        u"\1\54\1\64\1\51\1\45\1\52\1\65\1\55\1\46\1\136\1\62\1\137\1\47"
+        u"\1\63\1\50\1\70\1\75\1\56\1\57\1\101\1\60\1\uffff\1\104\1\102\1"
+        u"\uffff\1\105\1\103\1\71\1\77\1\74\1\72\1\76\1\73\3\uffff\1\125"
+        u"\1\126\1\127\1\130\2\uffff\1\133\1\134\1\140\23\uffff\1\112\5\uffff"
+        u"\1\116\3\uffff\1\33\3\uffff\1\66\1\106\1\67\1\107\3\uffff\1\131"
+        u"\24\uffff\1\15\2\uffff\1\117\4\uffff\1\34\6\uffff\1\30\1\uffff"
+        u"\1\113\6\uffff\1\7\4\uffff\1\12\1\110\2\uffff\1\13\1\16\10\uffff"
+        u"\1\120\5\uffff\1\14\10\uffff\1\31\1\17\2\uffff\1\26\3\uffff\1\115"
+        u"\1\122\1\uffff\1\5\1\25\1\6\1\114\1\21\1\53\1\uffff\1\123\1\11"
+        u"\2\uffff\1\20\3\uffff\1\36\1\2\3\uffff\1\111\2\uffff\1\10\1\32"
+        u"\1\121\1\22\1\35"
         )
 
-    DFA36_special = DFA.unpack(
-        u"\u0113\uffff"
+    DFA38_special = DFA.unpack(
+        u"\u012b\uffff"
         )
 
             
-    DFA36_transition = [
-        DFA.unpack(u"\6\62\2\60\1\62\2\60\22\62\1\60\1\41\1\55\1\61\1\54"
-        u"\1\36\1\37\1\53\1\25\1\26\1\31\1\33\1\3\1\34\1\32\1\35\1\56\11"
-        u"\57\1\22\1\1\1\42\1\4\1\43\1\46\1\62\10\54\1\23\2\54\1\52\2\54"
-        u"\1\24\13\54\1\27\1\62\1\30\1\44\1\54\1\62\1\7\1\51\1\12\1\16\1"
-        u"\5\1\15\1\50\1\54\1\13\2\54\1\14\5\54\1\10\1\6\1\2\1\17\1\11\1"
-        u"\47\3\54\1\20\1\45\1\21\1\40\uff80\62"),
-        DFA.unpack(u""),
-        DFA.unpack(u"\1\64"),
+    DFA38_transition = [
+        DFA.unpack(u"\6\65\2\62\1\65\2\62\22\65\1\62\1\43\1\57\1\64\1\55"
+        u"\1\40\1\41\1\56\1\27\1\30\1\33\1\35\1\3\1\36\1\34\1\37\1\60\11"
+        u"\61\1\23\1\1\1\44\1\4\1\45\1\50\1\65\4\55\1\26\3\55\1\24\2\55\1"
+        u"\54\2\55\1\25\3\55\1\11\7\55\1\31\1\63\1\32\1\46\1\55\1\65\1\7"
+        u"\1\53\1\13\1\17\1\5\1\16\1\52\1\55\1\14\2\55\1\15\5\55\1\10\1\6"
+        u"\1\2\1\20\1\12\1\51\3\55\1\21\1\47\1\22\1\42\uff80\65"),
         DFA.unpack(u""),
         DFA.unpack(u"\1\67"),
-        DFA.unpack(u"\1\73\1\uffff\1\71\11\uffff\1\72"),
-        DFA.unpack(u"\1\76\1\74\12\uffff\1\75\2\uffff\1\77"),
-        DFA.unpack(u"\1\100"),
-        DFA.unpack(u"\1\101"),
-        DFA.unpack(u"\1\102"),
-        DFA.unpack(u"\1\104\6\uffff\1\105\6\uffff\1\103"),
-        DFA.unpack(u"\1\106\7\uffff\1\107"),
-        DFA.unpack(u"\1\110"),
-        DFA.unpack(u"\1\111\2\uffff\1\112"),
-        DFA.unpack(u"\1\114\11\uffff\1\113"),
-        DFA.unpack(u"\1\115"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\72"),
+        DFA.unpack(u"\1\76\1\uffff\1\74\11\uffff\1\75"),
+        DFA.unpack(u"\1\100\1\102\12\uffff\1\77\2\uffff\1\101"),
+        DFA.unpack(u"\1\103"),
+        DFA.unpack(u"\1\104"),
+        DFA.unpack(u"\1\105"),
+        DFA.unpack(u"\1\106"),
+        DFA.unpack(u"\1\107\6\uffff\1\111\6\uffff\1\110"),
+        DFA.unpack(u"\1\112\7\uffff\1\113"),
+        DFA.unpack(u"\1\114"),
+        DFA.unpack(u"\1\115\2\uffff\1\116"),
+        DFA.unpack(u"\1\120\11\uffff\1\117"),
+        DFA.unpack(u"\1\121"),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\121"),
-        DFA.unpack(u"\1\122"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\125"),
+        DFA.unpack(u"\1\127\4\uffff\1\126"),
+        DFA.unpack(u"\1\130"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\127"),
-        DFA.unpack(u"\1\131\1\uffff\12\133"),
-        DFA.unpack(u"\1\134\21\uffff\1\135"),
-        DFA.unpack(u"\1\141\17\uffff\1\137\1\140"),
-        DFA.unpack(u"\1\144\4\uffff\1\145\15\uffff\1\143"),
-        DFA.unpack(u"\1\147"),
-        DFA.unpack(u"\1\151\26\uffff\1\152"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\135"),
+        DFA.unpack(u"\1\137\1\uffff\12\140"),
+        DFA.unpack(u"\1\143\21\uffff\1\142"),
+        DFA.unpack(u"\1\145\17\uffff\1\146\1\147"),
+        DFA.unpack(u"\1\151\4\uffff\1\153\15\uffff\1\152"),
         DFA.unpack(u"\1\155"),
-        DFA.unpack(u"\1\157\1\160"),
-        DFA.unpack(u"\1\163\1\162"),
-        DFA.unpack(u"\1\165"),
-        DFA.unpack(u"\1\167\76\uffff\1\170"),
+        DFA.unpack(u"\1\160\26\uffff\1\157"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\163"),
+        DFA.unpack(u"\1\165\1\166"),
+        DFA.unpack(u"\1\171\1\170"),
         DFA.unpack(u"\1\173"),
-        DFA.unpack(u"\1\174"),
-        DFA.unpack(u"\1\175"),
-        DFA.unpack(u"\1\176"),
-        DFA.unpack(u"\47\177\1\uffff\uffd7\177"),
+        DFA.unpack(u"\1\176\76\uffff\1\175"),
         DFA.unpack(u""),
-        DFA.unpack(u"\uffff\176"),
-        DFA.unpack(u"\1\133\1\uffff\10\u0082\2\133\12\uffff\3\133\21\uffff"
-        u"\1\u0080\13\uffff\3\133\21\uffff\1\u0080"),
-        DFA.unpack(u"\1\133\1\uffff\12\u0083\12\uffff\3\133\35\uffff\3\133"),
+        DFA.unpack(u"\1\u0081"),
+        DFA.unpack(u"\1\u0082"),
+        DFA.unpack(u"\1\u0083"),
+        DFA.unpack(u"\1\u0085\4\uffff\1\u0084"),
         DFA.unpack(u""),
+        DFA.unpack(u"\47\u0084\1\uffff\uffd7\u0084"),
         DFA.unpack(u"\uffff\u0085"),
+        DFA.unpack(u"\1\140\1\uffff\10\u0088\2\140\12\uffff\3\140\21\uffff"
+        u"\1\u0086\13\uffff\3\140\21\uffff\1\u0086"),
+        DFA.unpack(u"\1\140\1\uffff\12\u0089\12\uffff\3\140\35\uffff\3\140"),
+        DFA.unpack(u""),
         DFA.unpack(u""),
+        DFA.unpack(u"\uffff\u008c"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u0086"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\u008d"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u0087"),
-        DFA.unpack(u"\1\u0088"),
-        DFA.unpack(u"\1\u0089"),
-        DFA.unpack(u"\1\u008b\22\uffff\1\u008a"),
-        DFA.unpack(u"\1\u008c\20\uffff\1\u008d"),
         DFA.unpack(u"\1\u008e"),
         DFA.unpack(u"\1\u008f"),
         DFA.unpack(u"\1\u0090"),
-        DFA.unpack(u"\1\u0092\14\uffff\1\u0091"),
-        DFA.unpack(u"\1\u0093\2\uffff\1\u0094"),
-        DFA.unpack(u"\1\u0095"),
-        DFA.unpack(u"\1\u0096"),
+        DFA.unpack(u"\1\u0092\20\uffff\1\u0091"),
+        DFA.unpack(u"\1\u0093"),
+        DFA.unpack(u"\1\u0094"),
+        DFA.unpack(u"\1\u0095\22\uffff\1\u0096"),
         DFA.unpack(u"\1\u0097"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\u0099"),
+        DFA.unpack(u"\1\u0098\14\uffff\1\u0099"),
         DFA.unpack(u"\1\u009a"),
-        DFA.unpack(u"\1\u009b"),
-        DFA.unpack(u"\1\u009c"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\24\65\1\u009d\5\65"),
+        DFA.unpack(u"\1\u009c\2\uffff\1\u009b"),
+        DFA.unpack(u"\1\u009d"),
+        DFA.unpack(u"\1\u009e"),
         DFA.unpack(u"\1\u009f"),
-        DFA.unpack(u"\1\u00a0\11\uffff\1\u00a1"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u00a1"),
+        DFA.unpack(u"\1\u00a2"),
+        DFA.unpack(u"\1\u00a3"),
+        DFA.unpack(u"\1\u00a4"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\24\70\1\u00a5\5\70"),
+        DFA.unpack(u"\1\u00a7"),
+        DFA.unpack(u"\1\u00a8\11\uffff\1\u00a9"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\u00a3"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u00ab"),
+        DFA.unpack(u"\1\u00ac"),
+        DFA.unpack(u"\1\u00ad"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
@@ -4094,10 +4265,11 @@ class CLexer(Lexer):
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u00a4"),
+        DFA.unpack(u"\1\u00ae"),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u00a6"),
+        DFA.unpack(u"\1\u00b0"),
+        DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
@@ -4105,195 +4277,215 @@ class CLexer(Lexer):
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\u00b2"),
+        DFA.unpack(u"\1\u00b3"),
+        DFA.unpack(u"\1\u00b4"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u00a8"),
-        DFA.unpack(u"\1\u00a9"),
-        DFA.unpack(u"\1\u00aa"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\140\1\uffff\10\u0088\2\140\12\uffff\3\140\35\uffff"
+        u"\3\140"),
+        DFA.unpack(u"\1\140\1\uffff\12\u0089\12\uffff\3\140\35\uffff\3\140"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\133\1\uffff\10\u0082\2\133\12\uffff\3\133\35\uffff"
-        u"\3\133"),
-        DFA.unpack(u"\1\133\1\uffff\12\u0083\12\uffff\3\133\35\uffff\3\133"),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u00ac"),
-        DFA.unpack(u"\1\u00ad"),
-        DFA.unpack(u"\1\u00ae"),
-        DFA.unpack(u"\1\u00af"),
-        DFA.unpack(u"\1\u00b0"),
-        DFA.unpack(u"\1\u00b1"),
-        DFA.unpack(u"\1\u00b2"),
-        DFA.unpack(u"\1\u00b3"),
-        DFA.unpack(u"\1\u00b4"),
-        DFA.unpack(u"\1\u00b5"),
         DFA.unpack(u"\1\u00b6"),
         DFA.unpack(u"\1\u00b7"),
         DFA.unpack(u"\1\u00b8"),
         DFA.unpack(u"\1\u00b9"),
         DFA.unpack(u"\1\u00ba"),
-        DFA.unpack(u"\1\u00bc\1\u00bb"),
+        DFA.unpack(u"\1\u00bb"),
+        DFA.unpack(u"\1\u00bc"),
         DFA.unpack(u"\1\u00bd"),
         DFA.unpack(u"\1\u00be"),
-        DFA.unpack(u""),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
+        DFA.unpack(u"\1\u00bf"),
         DFA.unpack(u"\1\u00c0"),
         DFA.unpack(u"\1\u00c1"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
+        DFA.unpack(u"\1\u00c2"),
         DFA.unpack(u"\1\u00c3"),
-        DFA.unpack(u""),
         DFA.unpack(u"\1\u00c4"),
         DFA.unpack(u"\1\u00c5"),
         DFA.unpack(u"\1\u00c6"),
-        DFA.unpack(u""),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u""),
-        DFA.unpack(u""),
-        DFA.unpack(u""),
-        DFA.unpack(u""),
-        DFA.unpack(u"\1\u00c8"),
+        DFA.unpack(u"\1\u00c8\1\u00c7"),
         DFA.unpack(u"\1\u00c9"),
-        DFA.unpack(u"\1\u00ca"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
         DFA.unpack(u"\1\u00cb"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\u00cd"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
+        DFA.unpack(u"\1\u00cc"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u00ce"),
+        DFA.unpack(u""),
         DFA.unpack(u"\1\u00cf"),
         DFA.unpack(u"\1\u00d0"),
         DFA.unpack(u"\1\u00d1"),
-        DFA.unpack(u"\1\u00d2"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
         DFA.unpack(u"\1\u00d3"),
         DFA.unpack(u"\1\u00d4"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\u00d5"),
         DFA.unpack(u"\1\u00d6"),
         DFA.unpack(u"\1\u00d7"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\u00d9"),
-        DFA.unpack(u"\1\u00da"),
-        DFA.unpack(u"\1\u00db"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
+        DFA.unpack(u"\1\u00d8"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u00da"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u00dc"),
+        DFA.unpack(u"\1\u00dd"),
+        DFA.unpack(u"\1\u00de"),
         DFA.unpack(u"\1\u00df"),
-        DFA.unpack(u""),
         DFA.unpack(u"\1\u00e0"),
         DFA.unpack(u"\1\u00e1"),
-        DFA.unpack(u"\1\u00e2"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
         DFA.unpack(u"\1\u00e3"),
-        DFA.unpack(u""),
         DFA.unpack(u"\1\u00e4"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
+        DFA.unpack(u"\1\u00e5"),
         DFA.unpack(u"\1\u00e6"),
-        DFA.unpack(u"\1\u00e7"),
-        DFA.unpack(u""),
-        DFA.unpack(u"\1\u00e8"),
-        DFA.unpack(u""),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
         DFA.unpack(u"\1\u00e9"),
         DFA.unpack(u"\1\u00ea"),
-        DFA.unpack(u"\1\u00eb"),
-        DFA.unpack(u"\1\u00ec"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\u00ee"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u00ed"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\u00ee"),
         DFA.unpack(u"\1\u00ef"),
         DFA.unpack(u"\1\u00f0"),
-        DFA.unpack(u""),
         DFA.unpack(u"\1\u00f1"),
+        DFA.unpack(u""),
         DFA.unpack(u"\1\u00f2"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
+        DFA.unpack(u"\1\u00f3"),
+        DFA.unpack(u"\1\u00f4"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u00f6"),
+        DFA.unpack(u"\1\u00f7"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\u00f8"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\u00f9"),
+        DFA.unpack(u"\1\u00fa"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u00fc"),
+        DFA.unpack(u"\1\u00fd"),
+        DFA.unpack(u"\1\u00fe"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\u00f5"),
-        DFA.unpack(u"\1\u00f6"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\u00f8"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
+        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\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\u00fb"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
         DFA.unpack(u"\1\u0103"),
-        DFA.unpack(u"\1\u0104"),
-        DFA.unpack(u"\1\u0105"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u0106"),
         DFA.unpack(u"\1\u0107"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u0109"),
+        DFA.unpack(u"\1\u010a"),
+        DFA.unpack(u"\1\u010b"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u010e"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u0108"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u0115"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u0118"),
+        DFA.unpack(u"\1\u0119"),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u011b"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\u011c"),
+        DFA.unpack(u"\1\u011d"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
         DFA.unpack(u""),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u010a"),
-        DFA.unpack(u"\1\u010b"),
-        DFA.unpack(u"\1\u010c"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\u010e"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
+        DFA.unpack(u"\1\u0120"),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\u0121"),
+        DFA.unpack(u"\1\u0122"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\u0124"),
+        DFA.unpack(u"\1\u0125"),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
+        DFA.unpack(u"\1\70\13\uffff\12\70\7\uffff\32\70\4\uffff\1\70\1\uffff"
+        u"\32\70"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\65\13\uffff\12\65\7\uffff\32\65\4\uffff\1\65\1\uffff"
-        u"\32\65"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u"")
     ]
 
-    # class definition for DFA #36
+    # class definition for DFA #38
 
-    DFA36 = DFA
+    DFA38 = DFA
  
 
index 6568d66..3828e56 100644 (file)
@@ -1,4 +1,4 @@
-# $ANTLR 3.0.1 C.g 2008-01-22 14:44:54
+# $ANTLR 3.0.1 C.g 2008-01-25 19:33:35
 
 from antlr3 import *
 from antlr3.compat import set, frozenset
@@ -17,12 +17,13 @@ LETTER=11
 Exponent=15
 DECIMAL_LITERAL=7
 IntegerTypeSuffix=14
-UnicodeVocabulary=20
+UnicodeVocabulary=21
 HexDigit=13
+BS=20
 WS=19
-LINE_COMMAND=23
-COMMENT=21
-LINE_COMMENT=22
+LINE_COMMAND=24
+COMMENT=22
+LINE_COMMENT=23
 OCTAL_LITERAL=6
 HEX_LITERAL=5
 FLOATING_POINT_LITERAL=10
@@ -40,17 +41,18 @@ tokenNames = [
     "IDENTIFIER", "HEX_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", "CHARACTER_LITERAL", 
     "STRING_LITERAL", "FLOATING_POINT_LITERAL", "LETTER", "EscapeSequence", 
     "HexDigit", "IntegerTypeSuffix", "Exponent", "FloatTypeSuffix", "OctalEscape", 
-    "UnicodeEscape", "WS", "UnicodeVocabulary", "COMMENT", "LINE_COMMENT", 
+    "UnicodeEscape", "WS", "BS", "UnicodeVocabulary", "COMMENT", "LINE_COMMENT", 
     "LINE_COMMAND", "';'", "'typedef'", "','", "'='", "'extern'", "'static'", 
-    "'auto'", "'register'", "'void'", "'char'", "'short'", "'int'", "'long'", 
-    "'float'", "'double'", "'signed'", "'unsigned'", "'{'", "'}'", "'struct'", 
-    "'union'", "':'", "'enum'", "'const'", "'volatile'", "'IN'", "'OUT'", 
-    "'('", "')'", "'['", "']'", "'*'", "'...'", "'+'", "'-'", "'/'", "'%'", 
-    "'++'", "'--'", "'sizeof'", "'.'", "'->'", "'&'", "'~'", "'!'", "'*='", 
-    "'/='", "'%='", "'+='", "'-='", "'<<='", "'>>='", "'&='", "'^='", "'|='", 
-    "'?'", "'||'", "'&&'", "'|'", "'^'", "'=='", "'!='", "'<'", "'>'", "'<='", 
-    "'>='", "'<<'", "'>>'", "'case'", "'default'", "'if'", "'else'", "'switch'", 
-    "'while'", "'do'", "'for'", "'goto'", "'continue'", "'break'", "'return'"
+    "'auto'", "'register'", "'STATIC'", "'void'", "'char'", "'short'", "'int'", 
+    "'long'", "'float'", "'double'", "'signed'", "'unsigned'", "'{'", "'}'", 
+    "'struct'", "'union'", "':'", "'enum'", "'const'", "'volatile'", "'IN'", 
+    "'OUT'", "'OPTIONAL'", "'EFIAPI'", "'('", "')'", "'['", "']'", "'*'", 
+    "'...'", "'+'", "'-'", "'/'", "'%'", "'++'", "'--'", "'sizeof'", "'.'", 
+    "'->'", "'&'", "'~'", "'!'", "'*='", "'/='", "'%='", "'+='", "'-='", 
+    "'<<='", "'>>='", "'&='", "'^='", "'|='", "'?'", "'||'", "'&&'", "'|'", 
+    "'^'", "'=='", "'!='", "'<'", "'>'", "'<='", "'>='", "'<<'", "'>>'", 
+    "'case'", "'default'", "'if'", "'else'", "'switch'", "'while'", "'do'", 
+    "'for'", "'goto'", "'continue'", "'break'", "'return'"
 ]
 
 
@@ -133,7 +135,7 @@ class CParser(Parser):
                     alt1 = 2
                     LA1_0 = self.input.LA(1)
 
-                    if (LA1_0 == IDENTIFIER or LA1_0 == 25 or (28 <= LA1_0 <= 40) or (43 <= LA1_0 <= 44) or (46 <= LA1_0 <= 51) or LA1_0 == 55) :
+                    if (LA1_0 == IDENTIFIER or LA1_0 == 26 or (29 <= LA1_0 <= 42) or (45 <= LA1_0 <= 46) or (48 <= LA1_0 <= 55) or LA1_0 == 59) :
                         alt1 = 1
 
 
@@ -192,7 +194,7 @@ class CParser(Parser):
                 alt3 = 3
                 LA3_0 = self.input.LA(1)
 
-                if ((28 <= LA3_0 <= 31)) :
+                if ((29 <= LA3_0 <= 33)) :
                     LA3_1 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -208,7 +210,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif (LA3_0 == 32) :
+                elif (LA3_0 == 34) :
                     LA3_2 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -224,7 +226,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif (LA3_0 == 33) :
+                elif (LA3_0 == 35) :
                     LA3_3 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -240,7 +242,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif (LA3_0 == 34) :
+                elif (LA3_0 == 36) :
                     LA3_4 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -256,7 +258,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif (LA3_0 == 35) :
+                elif (LA3_0 == 37) :
                     LA3_5 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -272,7 +274,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif (LA3_0 == 36) :
+                elif (LA3_0 == 38) :
                     LA3_6 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -288,7 +290,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif (LA3_0 == 37) :
+                elif (LA3_0 == 39) :
                     LA3_7 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -304,7 +306,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif (LA3_0 == 38) :
+                elif (LA3_0 == 40) :
                     LA3_8 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -320,7 +322,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif (LA3_0 == 39) :
+                elif (LA3_0 == 41) :
                     LA3_9 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -336,7 +338,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif (LA3_0 == 40) :
+                elif (LA3_0 == 42) :
                     LA3_10 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -352,7 +354,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif ((43 <= LA3_0 <= 44)) :
+                elif ((45 <= LA3_0 <= 46)) :
                     LA3_11 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -368,7 +370,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif (LA3_0 == 46) :
+                elif (LA3_0 == 48) :
                     LA3_12 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -402,7 +404,7 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif ((47 <= LA3_0 <= 50)) :
+                elif ((49 <= LA3_0 <= 53)) :
                     LA3_14 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -418,11 +420,13 @@ class CParser(Parser):
 
                         raise nvae
 
-                elif (LA3_0 == 55) and (self.synpred4()):
+                elif (LA3_0 == 54) and (self.synpred4()):
+                    alt3 = 1
+                elif (LA3_0 == 59) and (self.synpred4()):
                     alt3 = 1
-                elif (LA3_0 == 51) and (self.synpred4()):
+                elif (LA3_0 == 55) and (self.synpred4()):
                     alt3 = 1
-                elif (LA3_0 == 25) :
+                elif (LA3_0 == 26) :
                     alt3 = 2
                 else:
                     if self.backtracking > 0:
@@ -462,11 +466,11 @@ class CParser(Parser):
                     alt2 = 2
                     LA2_0 = self.input.LA(1)
 
-                    if (LA2_0 == 24) :
+                    if (LA2_0 == 25) :
                         alt2 = 1
                     if alt2 == 1:
                         # C.g:69:21: ';'
-                        self.match(self.input, 24, self.FOLLOW_24_in_external_declaration116)
+                        self.match(self.input, 25, self.FOLLOW_25_in_external_declaration116)
                         if self.failed:
                             return 
 
@@ -496,19 +500,19 @@ class CParser(Parser):
 
 
     # $ANTLR start function_definition
-    # C.g:74:1: function_definition : ( declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) ;
+    # C.g:74:1: function_definition : (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) ;
     def function_definition(self, ):
         self.function_definition_stack.append(function_definition_scope())
         retval = self.function_definition_return()
         retval.start = self.input.LT(1)
         function_definition_StartIndex = self.input.index()
+        d = None
+
         a = None
 
         b = None
 
-        declaration_specifiers1 = None
-
-        declarator2 = None
+        declarator1 = None
 
 
                \r
@@ -524,32 +528,29 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 3):
                     return retval
 
-                # C.g:94:2: ( ( declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) )
-                # C.g:94:4: ( declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement )
-                # C.g:94:4: ( declaration_specifiers )?
+                # C.g:94:2: ( (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement ) )
+                # C.g:94:4: (d= declaration_specifiers )? declarator ( ( declaration )+ a= compound_statement | b= compound_statement )
+                # C.g:94:5: (d= declaration_specifiers )?
                 alt4 = 2
                 LA4_0 = self.input.LA(1)
 
-                if ((28 <= LA4_0 <= 40) or (43 <= LA4_0 <= 44) or (46 <= LA4_0 <= 50)) :
+                if ((29 <= LA4_0 <= 42) or (45 <= LA4_0 <= 46) or (48 <= LA4_0 <= 53)) :
                     alt4 = 1
                 elif (LA4_0 == IDENTIFIER) :
                     LA4 = self.input.LA(2)
-                    if LA4 == 51:
-                        LA4_18 = self.input.LA(3)
-
-                        if (self.synpred7()) :
-                            alt4 = 1
-                    elif LA4 == 28 or LA4 == 29 or LA4 == 30 or LA4 == 31:
+                    if LA4 == 54 or LA4 == 59:
+                        alt4 = 1
+                    elif LA4 == IDENTIFIER:
                         LA4_20 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 32:
+                    elif LA4 == 55:
                         LA4_21 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 33:
+                    elif LA4 == 29 or LA4 == 30 or LA4 == 31 or LA4 == 32 or LA4 == 33:
                         LA4_22 = self.input.LA(3)
 
                         if (self.synpred7()) :
@@ -589,40 +590,43 @@ class CParser(Parser):
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 43 or LA4 == 44:
+                    elif LA4 == 41:
                         LA4_30 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 46:
+                    elif LA4 == 42:
                         LA4_31 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == IDENTIFIER:
+                    elif LA4 == 45 or LA4 == 46:
                         LA4_32 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 47 or LA4 == 48 or LA4 == 49 or LA4 == 50:
+                    elif LA4 == 48:
                         LA4_33 = self.input.LA(3)
 
                         if (self.synpred7()) :
                             alt4 = 1
-                    elif LA4 == 55:
-                        alt4 = 1
+                    elif LA4 == 49 or LA4 == 50 or LA4 == 51 or LA4 == 52 or LA4 == 53:
+                        LA4_34 = self.input.LA(3)
+
+                        if (self.synpred7()) :
+                            alt4 = 1
                 if alt4 == 1:
-                    # C.g:0:0: declaration_specifiers
-                    self.following.append(self.FOLLOW_declaration_specifiers_in_function_definition145)
-                    declaration_specifiers1 = self.declaration_specifiers()
+                    # C.g:0:0: d= declaration_specifiers
+                    self.following.append(self.FOLLOW_declaration_specifiers_in_function_definition147)
+                    d = self.declaration_specifiers()
                     self.following.pop()
                     if self.failed:
                         return retval
 
 
 
-                self.following.append(self.FOLLOW_declarator_in_function_definition148)
-                declarator2 = self.declarator()
+                self.following.append(self.FOLLOW_declarator_in_function_definition150)
+                declarator1 = self.declarator()
                 self.following.pop()
                 if self.failed:
                     return retval
@@ -630,9 +634,9 @@ class CParser(Parser):
                 alt6 = 2
                 LA6_0 = self.input.LA(1)
 
-                if (LA6_0 == IDENTIFIER or LA6_0 == 25 or (28 <= LA6_0 <= 40) or (43 <= LA6_0 <= 44) or (46 <= LA6_0 <= 50)) :
+                if (LA6_0 == IDENTIFIER or LA6_0 == 26 or (29 <= LA6_0 <= 42) or (45 <= LA6_0 <= 46) or (48 <= LA6_0 <= 53)) :
                     alt6 = 1
-                elif (LA6_0 == 41) :
+                elif (LA6_0 == 43) :
                     alt6 = 2
                 else:
                     if self.backtracking > 0:
@@ -651,13 +655,13 @@ class CParser(Parser):
                         alt5 = 2
                         LA5_0 = self.input.LA(1)
 
-                        if (LA5_0 == IDENTIFIER or LA5_0 == 25 or (28 <= LA5_0 <= 40) or (43 <= LA5_0 <= 44) or (46 <= LA5_0 <= 50)) :
+                        if (LA5_0 == IDENTIFIER or LA5_0 == 26 or (29 <= LA5_0 <= 42) or (45 <= LA5_0 <= 46) or (48 <= LA5_0 <= 53)) :
                             alt5 = 1
 
 
                         if alt5 == 1:
                             # C.g:0:0: declaration
-                            self.following.append(self.FOLLOW_declaration_in_function_definition154)
+                            self.following.append(self.FOLLOW_declaration_in_function_definition156)
                             self.declaration()
                             self.following.pop()
                             if self.failed:
@@ -678,7 +682,7 @@ class CParser(Parser):
                         cnt5 += 1
 
 
-                    self.following.append(self.FOLLOW_compound_statement_in_function_definition159)
+                    self.following.append(self.FOLLOW_compound_statement_in_function_definition161)
                     a = self.compound_statement()
                     self.following.pop()
                     if self.failed:
@@ -687,7 +691,7 @@ class CParser(Parser):
 
                 elif alt6 == 2:
                     # C.g:96:5: b= compound_statement
-                    self.following.append(self.FOLLOW_compound_statement_in_function_definition168)
+                    self.following.append(self.FOLLOW_compound_statement_in_function_definition170)
                     b = self.compound_statement()
                     self.following.pop()
                     if self.failed:
@@ -696,10 +700,14 @@ class CParser(Parser):
 
 
                 if self.backtracking == 0:
-                    self.function_definition_stack[-1].ModifierText = self.input.toString(declaration_specifiers1.start,declaration_specifiers1.stop)\r
-                    self.function_definition_stack[-1].DeclText = self.input.toString(declarator2.start,declarator2.stop)\r
-                    self.function_definition_stack[-1].DeclLine = declarator2.start.line\r
-                    self.function_definition_stack[-1].DeclOffset = declarator2.start.charPositionInLine\r
+                          \r
+                    if d != None:\r
+                      self.function_definition_stack[-1].ModifierText = self.input.toString(d.start,d.stop)\r
+                    else:\r
+                      self.function_definition_stack[-1].ModifierText = ''\r
+                    self.function_definition_stack[-1].DeclText = self.input.toString(declarator1.start,declarator1.stop)\r
+                    self.function_definition_stack[-1].DeclLine = declarator1.start.line\r
+                    self.function_definition_stack[-1].DeclOffset = declarator1.start.charPositionInLine\r
                     if a != None:\r
                       self.function_definition_stack[-1].LBLine = a.start.line\r
                       self.function_definition_stack[-1].LBOffset = a.start.charPositionInLine\r
@@ -735,7 +743,7 @@ class CParser(Parser):
 
 
     # $ANTLR start declaration
-    # C.g:110:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' );
+    # C.g:114:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' );
     def declaration(self, ):
 
         declaration_StartIndex = self.input.index()
@@ -756,48 +764,48 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 4):
                     return 
 
-                # C.g:111:2: (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' )
+                # C.g:115:2: (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' )
                 alt9 = 2
                 LA9_0 = self.input.LA(1)
 
-                if (LA9_0 == 25) :
+                if (LA9_0 == 26) :
                     alt9 = 1
-                elif (LA9_0 == IDENTIFIER or (28 <= LA9_0 <= 40) or (43 <= LA9_0 <= 44) or (46 <= LA9_0 <= 50)) :
+                elif (LA9_0 == IDENTIFIER or (29 <= LA9_0 <= 42) or (45 <= LA9_0 <= 46) or (48 <= LA9_0 <= 53)) :
                     alt9 = 2
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("110:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' );", 9, 0, self.input)
+                    nvae = NoViableAltException("114:1: declaration : (a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';' | s= declaration_specifiers (t= init_declarator_list )? e= ';' );", 9, 0, self.input)
 
                     raise nvae
 
                 if alt9 == 1:
-                    # C.g:111:4: a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';'
+                    # C.g:115:4: a= 'typedef' (b= declaration_specifiers )? c= init_declarator_list d= ';'
                     a = self.input.LT(1)
-                    self.match(self.input, 25, self.FOLLOW_25_in_declaration191)
+                    self.match(self.input, 26, self.FOLLOW_26_in_declaration193)
                     if self.failed:
                         return 
-                    # C.g:111:17: (b= declaration_specifiers )?
+                    # C.g:115:17: (b= declaration_specifiers )?
                     alt7 = 2
                     LA7_0 = self.input.LA(1)
 
-                    if ((28 <= LA7_0 <= 40) or (43 <= LA7_0 <= 44) or (46 <= LA7_0 <= 50)) :
+                    if ((29 <= LA7_0 <= 42) or (45 <= LA7_0 <= 46) or (48 <= LA7_0 <= 53)) :
                         alt7 = 1
                     elif (LA7_0 == IDENTIFIER) :
                         LA7_13 = self.input.LA(2)
 
-                        if (LA7_13 == IDENTIFIER or (28 <= LA7_13 <= 40) or (43 <= LA7_13 <= 44) or (46 <= LA7_13 <= 50) or LA7_13 == 55) :
-                            alt7 = 1
-                        elif (LA7_13 == 51) :
+                        if (LA7_13 == 55) :
                             LA7_19 = 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 <= 54) or LA7_13 == 59) :
+                            alt7 = 1
                     if alt7 == 1:
                         # C.g:0:0: b= declaration_specifiers
-                        self.following.append(self.FOLLOW_declaration_specifiers_in_declaration195)
+                        self.following.append(self.FOLLOW_declaration_specifiers_in_declaration197)
                         b = self.declaration_specifiers()
                         self.following.pop()
                         if self.failed:
@@ -805,13 +813,13 @@ class CParser(Parser):
 
 
 
-                    self.following.append(self.FOLLOW_init_declarator_list_in_declaration204)
+                    self.following.append(self.FOLLOW_init_declarator_list_in_declaration206)
                     c = self.init_declarator_list()
                     self.following.pop()
                     if self.failed:
                         return 
                     d = self.input.LT(1)
-                    self.match(self.input, 24, self.FOLLOW_24_in_declaration208)
+                    self.match(self.input, 25, self.FOLLOW_25_in_declaration210)
                     if self.failed:
                         return 
                     if self.backtracking == 0:
@@ -825,21 +833,21 @@ class CParser(Parser):
 
 
                 elif alt9 == 2:
-                    # C.g:119:4: s= declaration_specifiers (t= init_declarator_list )? e= ';'
-                    self.following.append(self.FOLLOW_declaration_specifiers_in_declaration222)
+                    # C.g:123:4: s= declaration_specifiers (t= init_declarator_list )? e= ';'
+                    self.following.append(self.FOLLOW_declaration_specifiers_in_declaration224)
                     s = self.declaration_specifiers()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:119:30: (t= init_declarator_list )?
+                    # C.g:123:30: (t= init_declarator_list )?
                     alt8 = 2
                     LA8_0 = self.input.LA(1)
 
-                    if (LA8_0 == IDENTIFIER or LA8_0 == 51 or LA8_0 == 55) :
+                    if (LA8_0 == IDENTIFIER or (54 <= LA8_0 <= 55) or LA8_0 == 59) :
                         alt8 = 1
                     if alt8 == 1:
                         # C.g:0:0: t= init_declarator_list
-                        self.following.append(self.FOLLOW_init_declarator_list_in_declaration226)
+                        self.following.append(self.FOLLOW_init_declarator_list_in_declaration228)
                         t = self.init_declarator_list()
                         self.following.pop()
                         if self.failed:
@@ -848,11 +856,14 @@ class CParser(Parser):
 
 
                     e = self.input.LT(1)
-                    self.match(self.input, 24, self.FOLLOW_24_in_declaration231)
+                    self.match(self.input, 25, self.FOLLOW_25_in_declaration233)
                     if self.failed:
                         return 
                     if self.backtracking == 0:
-                        self.StoreVariableDeclaration(s.start.line, s.start.charPositionInLine, e.line, e.charPositionInLine, self.input.toString(s.start,s.stop), self.input.toString(t.start,t.stop))
+                          \r
+                        if t != None:\r
+                          self.StoreVariableDeclaration(s.start.line, s.start.charPositionInLine, e.line, e.charPositionInLine, self.input.toString(s.start,s.stop), self.input.toString(t.start,t.stop))\r
+                               
 
 
 
@@ -878,7 +889,7 @@ class CParser(Parser):
 
 
     # $ANTLR start declaration_specifiers
-    # C.g:123:1: declaration_specifiers : ( storage_class_specifier | type_specifier | type_qualifier )+ ;
+    # C.g:130:1: declaration_specifiers : ( storage_class_specifier | type_specifier ( pointer )? | type_qualifier )+ ;
     def declaration_specifiers(self, ):
 
         retval = self.declaration_specifiers_return()
@@ -889,48 +900,67 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 5):
                     return retval
 
-                # C.g:124:2: ( ( storage_class_specifier | type_specifier | type_qualifier )+ )
-                # C.g:124:6: ( storage_class_specifier | type_specifier | type_qualifier )+
-                # C.g:124:6: ( storage_class_specifier | type_specifier | type_qualifier )+
-                cnt10 = 0
-                while True: #loop10
-                    alt10 = 4
-                    LA10 = self.input.LA(1)
-                    if LA10 == IDENTIFIER:
-                        LA10_2 = self.input.LA(2)
+                # C.g:131:2: ( ( storage_class_specifier | type_specifier ( pointer )? | type_qualifier )+ )
+                # C.g:131:6: ( storage_class_specifier | type_specifier ( pointer )? | type_qualifier )+
+                # C.g:131:6: ( storage_class_specifier | type_specifier ( pointer )? | type_qualifier )+
+                cnt11 = 0
+                while True: #loop11
+                    alt11 = 4
+                    LA11 = self.input.LA(1)
+                    if LA11 == IDENTIFIER:
+                        LA11_3 = self.input.LA(2)
 
-                        if (self.synpred14()) :
-                            alt10 = 2
+                        if (self.synpred15()) :
+                            alt11 = 2
 
 
-                    elif LA10 == 28 or LA10 == 29 or LA10 == 30 or LA10 == 31:
-                        alt10 = 1
-                    elif LA10 == 32 or LA10 == 33 or LA10 == 34 or LA10 == 35 or LA10 == 36 or LA10 == 37 or LA10 == 38 or LA10 == 39 or LA10 == 40 or LA10 == 43 or LA10 == 44 or LA10 == 46:
-                        alt10 = 2
-                    elif LA10 == 47 or LA10 == 48 or LA10 == 49 or LA10 == 50:
-                        alt10 = 3
+                    elif LA11 == 29 or LA11 == 30 or LA11 == 31 or LA11 == 32 or LA11 == 33:
+                        alt11 = 1
+                    elif LA11 == 34 or LA11 == 35 or LA11 == 36 or LA11 == 37 or LA11 == 38 or LA11 == 39 or LA11 == 40 or LA11 == 41 or LA11 == 42 or LA11 == 45 or LA11 == 46 or LA11 == 48:
+                        alt11 = 2
+                    elif LA11 == 49 or LA11 == 50 or LA11 == 51 or LA11 == 52 or LA11 == 53:
+                        alt11 = 3
 
-                    if alt10 == 1:
-                        # C.g:124:10: storage_class_specifier
-                        self.following.append(self.FOLLOW_storage_class_specifier_in_declaration_specifiers252)
+                    if alt11 == 1:
+                        # C.g:131:10: storage_class_specifier
+                        self.following.append(self.FOLLOW_storage_class_specifier_in_declaration_specifiers254)
                         self.storage_class_specifier()
                         self.following.pop()
                         if self.failed:
                             return retval
 
 
-                    elif alt10 == 2:
-                        # C.g:125:7: type_specifier
-                        self.following.append(self.FOLLOW_type_specifier_in_declaration_specifiers260)
+                    elif alt11 == 2:
+                        # C.g:132:7: type_specifier ( pointer )?
+                        self.following.append(self.FOLLOW_type_specifier_in_declaration_specifiers262)
                         self.type_specifier()
                         self.following.pop()
                         if self.failed:
                             return retval
+                        # C.g:132:22: ( pointer )?
+                        alt10 = 2
+                        LA10_0 = self.input.LA(1)
+
+                        if (LA10_0 == 59) :
+                            LA10_1 = self.input.LA(2)
+
+                            if (self.synpred14()) :
+                                alt10 = 1
+                        if alt10 == 1:
+                            # C.g:0:0: pointer
+                            self.following.append(self.FOLLOW_pointer_in_declaration_specifiers264)
+                            self.pointer()
+                            self.following.pop()
+                            if self.failed:
+                                return retval
+
+
+
 
 
-                    elif alt10 == 3:
-                        # C.g:126:13: type_qualifier
-                        self.following.append(self.FOLLOW_type_qualifier_in_declaration_specifiers274)
+                    elif alt11 == 3:
+                        # C.g:133:13: type_qualifier
+                        self.following.append(self.FOLLOW_type_qualifier_in_declaration_specifiers279)
                         self.type_qualifier()
                         self.following.pop()
                         if self.failed:
@@ -938,17 +968,17 @@ class CParser(Parser):
 
 
                     else:
-                        if cnt10 >= 1:
-                            break #loop10
+                        if cnt11 >= 1:
+                            break #loop11
 
                         if self.backtracking > 0:
                             self.failed = True
                             return retval
 
-                        eee = EarlyExitException(10, self.input)
+                        eee = EarlyExitException(11, self.input)
                         raise eee
 
-                    cnt10 += 1
+                    cnt11 += 1
 
 
 
@@ -978,7 +1008,7 @@ class CParser(Parser):
 
 
     # $ANTLR start init_declarator_list
-    # C.g:130:1: init_declarator_list : init_declarator ( ',' init_declarator )* ;
+    # C.g:137:1: init_declarator_list : init_declarator ( ',' init_declarator )* ;
     def init_declarator_list(self, ):
 
         retval = self.init_declarator_list_return()
@@ -989,28 +1019,28 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 6):
                     return retval
 
-                # C.g:131:2: ( init_declarator ( ',' init_declarator )* )
-                # C.g:131:4: init_declarator ( ',' init_declarator )*
-                self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list296)
+                # C.g:138:2: ( init_declarator ( ',' init_declarator )* )
+                # C.g:138:4: init_declarator ( ',' init_declarator )*
+                self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list301)
                 self.init_declarator()
                 self.following.pop()
                 if self.failed:
                     return retval
-                # C.g:131:20: ( ',' init_declarator )*
-                while True: #loop11
-                    alt11 = 2
-                    LA11_0 = self.input.LA(1)
+                # C.g:138:20: ( ',' init_declarator )*
+                while True: #loop12
+                    alt12 = 2
+                    LA12_0 = self.input.LA(1)
 
-                    if (LA11_0 == 26) :
-                        alt11 = 1
+                    if (LA12_0 == 27) :
+                        alt12 = 1
 
 
-                    if alt11 == 1:
-                        # C.g:131:21: ',' init_declarator
-                        self.match(self.input, 26, self.FOLLOW_26_in_init_declarator_list299)
+                    if alt12 == 1:
+                        # C.g:138:21: ',' init_declarator
+                        self.match(self.input, 27, self.FOLLOW_27_in_init_declarator_list304)
                         if self.failed:
                             return retval
-                        self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list301)
+                        self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list306)
                         self.init_declarator()
                         self.following.pop()
                         if self.failed:
@@ -1018,7 +1048,7 @@ class CParser(Parser):
 
 
                     else:
-                        break #loop11
+                        break #loop12
 
 
 
@@ -1042,7 +1072,7 @@ class CParser(Parser):
 
 
     # $ANTLR start init_declarator
-    # C.g:134:1: init_declarator : declarator ( '=' initializer )? ;
+    # C.g:141:1: init_declarator : declarator ( '=' initializer )? ;
     def init_declarator(self, ):
 
         init_declarator_StartIndex = self.input.index()
@@ -1051,25 +1081,25 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 7):
                     return 
 
-                # C.g:135:2: ( declarator ( '=' initializer )? )
-                # C.g:135:4: declarator ( '=' initializer )?
-                self.following.append(self.FOLLOW_declarator_in_init_declarator314)
+                # C.g:142:2: ( declarator ( '=' initializer )? )
+                # C.g:142:4: declarator ( '=' initializer )?
+                self.following.append(self.FOLLOW_declarator_in_init_declarator319)
                 self.declarator()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:135:15: ( '=' initializer )?
-                alt12 = 2
-                LA12_0 = self.input.LA(1)
+                # C.g:142:15: ( '=' initializer )?
+                alt13 = 2
+                LA13_0 = self.input.LA(1)
 
-                if (LA12_0 == 27) :
-                    alt12 = 1
-                if alt12 == 1:
-                    # C.g:135:16: '=' initializer
-                    self.match(self.input, 27, self.FOLLOW_27_in_init_declarator317)
+                if (LA13_0 == 28) :
+                    alt13 = 1
+                if alt13 == 1:
+                    # C.g:142:16: '=' initializer
+                    self.match(self.input, 28, self.FOLLOW_28_in_init_declarator322)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_initializer_in_init_declarator319)
+                    self.following.append(self.FOLLOW_initializer_in_init_declarator324)
                     self.initializer()
                     self.following.pop()
                     if self.failed:
@@ -1096,7 +1126,7 @@ class CParser(Parser):
 
 
     # $ANTLR start storage_class_specifier
-    # C.g:138:1: storage_class_specifier : ( 'extern' | 'static' | 'auto' | 'register' );
+    # C.g:145:1: storage_class_specifier : ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' );
     def storage_class_specifier(self, ):
 
         storage_class_specifier_StartIndex = self.input.index()
@@ -1105,9 +1135,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 8):
                     return 
 
-                # C.g:139:2: ( 'extern' | 'static' | 'auto' | 'register' )
+                # C.g:146:2: ( 'extern' | 'static' | 'auto' | 'register' | 'STATIC' )
                 # C.g:
-                if (28 <= self.input.LA(1) <= 31):
+                if (29 <= self.input.LA(1) <= 33):
                     self.input.consume();
                     self.errorRecovery = False
                     self.failed = False
@@ -1143,7 +1173,7 @@ class CParser(Parser):
 
 
     # $ANTLR start type_specifier
-    # C.g:145:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER declarator )=> type_id );
+    # C.g:153:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER declarator )=> type_id );
     def type_specifier(self, ):
 
         type_specifier_StartIndex = self.input.index()
@@ -1157,109 +1187,109 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 9):
                     return 
 
-                # C.g:146:2: ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER declarator )=> type_id )
-                alt13 = 12
-                LA13_0 = self.input.LA(1)
+                # C.g:154:2: ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER declarator )=> type_id )
+                alt14 = 12
+                LA14_0 = self.input.LA(1)
 
-                if (LA13_0 == 32) :
-                    alt13 = 1
-                elif (LA13_0 == 33) :
-                    alt13 = 2
-                elif (LA13_0 == 34) :
-                    alt13 = 3
-                elif (LA13_0 == 35) :
-                    alt13 = 4
-                elif (LA13_0 == 36) :
-                    alt13 = 5
-                elif (LA13_0 == 37) :
-                    alt13 = 6
-                elif (LA13_0 == 38) :
-                    alt13 = 7
-                elif (LA13_0 == 39) :
-                    alt13 = 8
-                elif (LA13_0 == 40) :
-                    alt13 = 9
-                elif ((43 <= LA13_0 <= 44)) :
-                    alt13 = 10
-                elif (LA13_0 == 46) :
-                    alt13 = 11
-                elif (LA13_0 == IDENTIFIER) and (self.synpred32()):
-                    alt13 = 12
+                if (LA14_0 == 34) :
+                    alt14 = 1
+                elif (LA14_0 == 35) :
+                    alt14 = 2
+                elif (LA14_0 == 36) :
+                    alt14 = 3
+                elif (LA14_0 == 37) :
+                    alt14 = 4
+                elif (LA14_0 == 38) :
+                    alt14 = 5
+                elif (LA14_0 == 39) :
+                    alt14 = 6
+                elif (LA14_0 == 40) :
+                    alt14 = 7
+                elif (LA14_0 == 41) :
+                    alt14 = 8
+                elif (LA14_0 == 42) :
+                    alt14 = 9
+                elif ((45 <= LA14_0 <= 46)) :
+                    alt14 = 10
+                elif (LA14_0 == 48) :
+                    alt14 = 11
+                elif (LA14_0 == IDENTIFIER) and (self.synpred34()):
+                    alt14 = 12
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("145:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER declarator )=> type_id );", 13, 0, self.input)
+                    nvae = NoViableAltException("153:1: type_specifier : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | s= struct_or_union_specifier | e= enum_specifier | ( IDENTIFIER declarator )=> type_id );", 14, 0, self.input)
 
                     raise nvae
 
-                if alt13 == 1:
-                    # C.g:146:4: 'void'
-                    self.match(self.input, 32, self.FOLLOW_32_in_type_specifier359)
+                if alt14 == 1:
+                    # C.g:154:4: 'void'
+                    self.match(self.input, 34, self.FOLLOW_34_in_type_specifier369)
                     if self.failed:
                         return 
 
 
-                elif alt13 == 2:
-                    # C.g:147:4: 'char'
-                    self.match(self.input, 33, self.FOLLOW_33_in_type_specifier364)
+                elif alt14 == 2:
+                    # C.g:155:4: 'char'
+                    self.match(self.input, 35, self.FOLLOW_35_in_type_specifier374)
                     if self.failed:
                         return 
 
 
-                elif alt13 == 3:
-                    # C.g:148:4: 'short'
-                    self.match(self.input, 34, self.FOLLOW_34_in_type_specifier369)
+                elif alt14 == 3:
+                    # C.g:156:4: 'short'
+                    self.match(self.input, 36, self.FOLLOW_36_in_type_specifier379)
                     if self.failed:
                         return 
 
 
-                elif alt13 == 4:
-                    # C.g:149:4: 'int'
-                    self.match(self.input, 35, self.FOLLOW_35_in_type_specifier374)
+                elif alt14 == 4:
+                    # C.g:157:4: 'int'
+                    self.match(self.input, 37, self.FOLLOW_37_in_type_specifier384)
                     if self.failed:
                         return 
 
 
-                elif alt13 == 5:
-                    # C.g:150:4: 'long'
-                    self.match(self.input, 36, self.FOLLOW_36_in_type_specifier379)
+                elif alt14 == 5:
+                    # C.g:158:4: 'long'
+                    self.match(self.input, 38, self.FOLLOW_38_in_type_specifier389)
                     if self.failed:
                         return 
 
 
-                elif alt13 == 6:
-                    # C.g:151:4: 'float'
-                    self.match(self.input, 37, self.FOLLOW_37_in_type_specifier384)
+                elif alt14 == 6:
+                    # C.g:159:4: 'float'
+                    self.match(self.input, 39, self.FOLLOW_39_in_type_specifier394)
                     if self.failed:
                         return 
 
 
-                elif alt13 == 7:
-                    # C.g:152:4: 'double'
-                    self.match(self.input, 38, self.FOLLOW_38_in_type_specifier389)
+                elif alt14 == 7:
+                    # C.g:160:4: 'double'
+                    self.match(self.input, 40, self.FOLLOW_40_in_type_specifier399)
                     if self.failed:
                         return 
 
 
-                elif alt13 == 8:
-                    # C.g:153:4: 'signed'
-                    self.match(self.input, 39, self.FOLLOW_39_in_type_specifier394)
+                elif alt14 == 8:
+                    # C.g:161:4: 'signed'
+                    self.match(self.input, 41, self.FOLLOW_41_in_type_specifier404)
                     if self.failed:
                         return 
 
 
-                elif alt13 == 9:
-                    # C.g:154:4: 'unsigned'
-                    self.match(self.input, 40, self.FOLLOW_40_in_type_specifier399)
+                elif alt14 == 9:
+                    # C.g:162:4: 'unsigned'
+                    self.match(self.input, 42, self.FOLLOW_42_in_type_specifier409)
                     if self.failed:
                         return 
 
 
-                elif alt13 == 10:
-                    # C.g:155:4: s= struct_or_union_specifier
-                    self.following.append(self.FOLLOW_struct_or_union_specifier_in_type_specifier406)
+                elif alt14 == 10:
+                    # C.g:163:4: s= struct_or_union_specifier
+                    self.following.append(self.FOLLOW_struct_or_union_specifier_in_type_specifier416)
                     s = self.struct_or_union_specifier()
                     self.following.pop()
                     if self.failed:
@@ -1269,9 +1299,9 @@ class CParser(Parser):
 
 
 
-                elif alt13 == 11:
-                    # C.g:156:4: e= enum_specifier
-                    self.following.append(self.FOLLOW_enum_specifier_in_type_specifier415)
+                elif alt14 == 11:
+                    # C.g:164:4: e= enum_specifier
+                    self.following.append(self.FOLLOW_enum_specifier_in_type_specifier425)
                     e = self.enum_specifier()
                     self.following.pop()
                     if self.failed:
@@ -1281,9 +1311,9 @@ class CParser(Parser):
 
 
 
-                elif alt13 == 12:
-                    # C.g:157:4: ( IDENTIFIER declarator )=> type_id
-                    self.following.append(self.FOLLOW_type_id_in_type_specifier429)
+                elif alt14 == 12:
+                    # C.g:165:4: ( IDENTIFIER declarator )=> type_id
+                    self.following.append(self.FOLLOW_type_id_in_type_specifier439)
                     self.type_id()
                     self.following.pop()
                     if self.failed:
@@ -1306,7 +1336,7 @@ class CParser(Parser):
 
 
     # $ANTLR start type_id
-    # C.g:160:1: type_id : IDENTIFIER ;
+    # C.g:168:1: type_id : IDENTIFIER ;
     def type_id(self, ):
 
         type_id_StartIndex = self.input.index()
@@ -1315,9 +1345,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 10):
                     return 
 
-                # C.g:161:5: ( IDENTIFIER )
-                # C.g:161:9: IDENTIFIER
-                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_type_id445)
+                # C.g:169:5: ( IDENTIFIER )
+                # C.g:169:9: IDENTIFIER
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_type_id455)
                 if self.failed:
                     return 
 
@@ -1345,7 +1375,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_or_union_specifier
-    # C.g:165:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );
+    # C.g:173: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()
@@ -1356,37 +1386,37 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 11):
                     return retval
 
-                # C.g:167:2: ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER )
-                alt15 = 2
-                LA15_0 = self.input.LA(1)
+                # C.g:175:2: ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER )
+                alt16 = 2
+                LA16_0 = self.input.LA(1)
 
-                if ((43 <= LA15_0 <= 44)) :
-                    LA15_1 = self.input.LA(2)
+                if ((45 <= LA16_0 <= 46)) :
+                    LA16_1 = self.input.LA(2)
 
-                    if (LA15_1 == IDENTIFIER) :
-                        LA15_2 = self.input.LA(3)
+                    if (LA16_1 == IDENTIFIER) :
+                        LA16_2 = self.input.LA(3)
 
-                        if (LA15_2 == 41) :
-                            alt15 = 1
-                        elif (LA15_2 == EOF or LA15_2 == IDENTIFIER or LA15_2 == 24 or (28 <= LA15_2 <= 40) or (43 <= LA15_2 <= 53) or LA15_2 == 55) :
-                            alt15 = 2
+                        if (LA16_2 == 43) :
+                            alt16 = 1
+                        elif (LA16_2 == EOF or LA16_2 == IDENTIFIER or LA16_2 == 25 or (29 <= LA16_2 <= 42) or (45 <= LA16_2 <= 57) or LA16_2 == 59) :
+                            alt16 = 2
                         else:
                             if self.backtracking > 0:
                                 self.failed = True
                                 return retval
 
-                            nvae = NoViableAltException("165: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("173:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 16, 2, self.input)
 
                             raise nvae
 
-                    elif (LA15_1 == 41) :
-                        alt15 = 1
+                    elif (LA16_1 == 43) :
+                        alt16 = 1
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return retval
 
-                        nvae = NoViableAltException("165: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("173:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 16, 1, self.input)
 
                         raise nvae
 
@@ -1395,52 +1425,52 @@ class CParser(Parser):
                         self.failed = True
                         return retval
 
-                    nvae = NoViableAltException("165: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("173:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 16, 0, self.input)
 
                     raise nvae
 
-                if alt15 == 1:
-                    # C.g:167:4: struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}'
-                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier473)
+                if alt16 == 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)
                     self.struct_or_union()
                     self.following.pop()
                     if self.failed:
                         return retval
-                    # C.g:167:20: ( IDENTIFIER )?
-                    alt14 = 2
-                    LA14_0 = self.input.LA(1)
+                    # C.g:175:20: ( IDENTIFIER )?
+                    alt15 = 2
+                    LA15_0 = self.input.LA(1)
 
-                    if (LA14_0 == IDENTIFIER) :
-                        alt14 = 1
-                    if alt14 == 1:
+                    if (LA15_0 == IDENTIFIER) :
+                        alt15 = 1
+                    if alt15 == 1:
                         # C.g:0:0: IDENTIFIER
-                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier475)
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier484)
                         if self.failed:
                             return retval
 
 
 
-                    self.match(self.input, 41, self.FOLLOW_41_in_struct_or_union_specifier478)
+                    self.match(self.input, 43, self.FOLLOW_43_in_struct_or_union_specifier487)
                     if self.failed:
                         return retval
-                    self.following.append(self.FOLLOW_struct_declaration_list_in_struct_or_union_specifier480)
+                    self.following.append(self.FOLLOW_struct_declaration_list_in_struct_or_union_specifier489)
                     self.struct_declaration_list()
                     self.following.pop()
                     if self.failed:
                         return retval
-                    self.match(self.input, 42, self.FOLLOW_42_in_struct_or_union_specifier482)
+                    self.match(self.input, 44, self.FOLLOW_44_in_struct_or_union_specifier491)
                     if self.failed:
                         return retval
 
 
-                elif alt15 == 2:
-                    # C.g:168:4: struct_or_union IDENTIFIER
-                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier487)
+                elif alt16 == 2:
+                    # C.g:176:4: struct_or_union IDENTIFIER
+                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier496)
                     self.struct_or_union()
                     self.following.pop()
                     if self.failed:
                         return retval
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier489)
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier498)
                     if self.failed:
                         return retval
 
@@ -1463,7 +1493,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_or_union
-    # C.g:171:1: struct_or_union : ( 'struct' | 'union' );
+    # C.g:179:1: struct_or_union : ( 'struct' | 'union' );
     def struct_or_union(self, ):
 
         struct_or_union_StartIndex = self.input.index()
@@ -1472,9 +1502,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 12):
                     return 
 
-                # C.g:172:2: ( 'struct' | 'union' )
+                # C.g:180:2: ( 'struct' | 'union' )
                 # C.g:
-                if (43 <= self.input.LA(1) <= 44):
+                if (45 <= self.input.LA(1) <= 46):
                     self.input.consume();
                     self.errorRecovery = False
                     self.failed = False
@@ -1510,7 +1540,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declaration_list
-    # C.g:176:1: struct_declaration_list : ( struct_declaration )+ ;
+    # C.g:184:1: struct_declaration_list : ( struct_declaration )+ ;
     def struct_declaration_list(self, ):
 
         struct_declaration_list_StartIndex = self.input.index()
@@ -1519,21 +1549,21 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 13):
                     return 
 
-                # C.g:177:2: ( ( struct_declaration )+ )
-                # C.g:177:4: ( struct_declaration )+
-                # C.g:177:4: ( struct_declaration )+
-                cnt16 = 0
-                while True: #loop16
-                    alt16 = 2
-                    LA16_0 = self.input.LA(1)
+                # C.g:185:2: ( ( struct_declaration )+ )
+                # C.g:185:4: ( struct_declaration )+
+                # C.g:185:4: ( struct_declaration )+
+                cnt17 = 0
+                while True: #loop17
+                    alt17 = 2
+                    LA17_0 = self.input.LA(1)
 
-                    if (LA16_0 == IDENTIFIER or (32 <= LA16_0 <= 40) or (43 <= LA16_0 <= 44) or (46 <= LA16_0 <= 50)) :
-                        alt16 = 1
+                    if (LA17_0 == IDENTIFIER or (34 <= LA17_0 <= 42) or (45 <= LA17_0 <= 46) or (48 <= LA17_0 <= 53)) :
+                        alt17 = 1
 
 
-                    if alt16 == 1:
+                    if alt17 == 1:
                         # C.g:0:0: struct_declaration
-                        self.following.append(self.FOLLOW_struct_declaration_in_struct_declaration_list516)
+                        self.following.append(self.FOLLOW_struct_declaration_in_struct_declaration_list525)
                         self.struct_declaration()
                         self.following.pop()
                         if self.failed:
@@ -1541,17 +1571,17 @@ class CParser(Parser):
 
 
                     else:
-                        if cnt16 >= 1:
-                            break #loop16
+                        if cnt17 >= 1:
+                            break #loop17
 
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        eee = EarlyExitException(16, self.input)
+                        eee = EarlyExitException(17, self.input)
                         raise eee
 
-                    cnt16 += 1
+                    cnt17 += 1
 
 
 
@@ -1573,7 +1603,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declaration
-    # C.g:180:1: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ;
+    # C.g:188:1: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ;
     def struct_declaration(self, ):
 
         struct_declaration_StartIndex = self.input.index()
@@ -1582,19 +1612,19 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 14):
                     return 
 
-                # C.g:181:2: ( specifier_qualifier_list struct_declarator_list ';' )
-                # C.g:181:4: specifier_qualifier_list struct_declarator_list ';'
-                self.following.append(self.FOLLOW_specifier_qualifier_list_in_struct_declaration528)
+                # 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)
                 self.specifier_qualifier_list()
                 self.following.pop()
                 if self.failed:
                     return 
-                self.following.append(self.FOLLOW_struct_declarator_list_in_struct_declaration530)
+                self.following.append(self.FOLLOW_struct_declarator_list_in_struct_declaration539)
                 self.struct_declarator_list()
                 self.following.pop()
                 if self.failed:
                     return 
-                self.match(self.input, 24, self.FOLLOW_24_in_struct_declaration532)
+                self.match(self.input, 25, self.FOLLOW_25_in_struct_declaration541)
                 if self.failed:
                     return 
 
@@ -1616,7 +1646,7 @@ class CParser(Parser):
 
 
     # $ANTLR start specifier_qualifier_list
-    # C.g:184:1: specifier_qualifier_list : ( type_qualifier | type_specifier )+ ;
+    # C.g:192:1: specifier_qualifier_list : ( type_qualifier | type_specifier )+ ;
     def specifier_qualifier_list(self, ):
 
         specifier_qualifier_list_StartIndex = self.input.index()
@@ -1625,56 +1655,56 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 15):
                     return 
 
-                # C.g:185:2: ( ( type_qualifier | type_specifier )+ )
-                # C.g:185:4: ( type_qualifier | type_specifier )+
-                # C.g:185:4: ( type_qualifier | type_specifier )+
-                cnt17 = 0
-                while True: #loop17
-                    alt17 = 3
-                    LA17 = self.input.LA(1)
-                    if LA17 == IDENTIFIER:
-                        LA17 = self.input.LA(2)
-                        if LA17 == EOF or LA17 == IDENTIFIER or LA17 == 32 or LA17 == 33 or LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 43 or LA17 == 44 or LA17 == 46 or LA17 == 47 or LA17 == 48 or LA17 == 49 or LA17 == 50 or LA17 == 52 or LA17 == 55:
-                            alt17 = 2
-                        elif LA17 == 51:
-                            LA17_22 = self.input.LA(3)
+                # C.g:193:2: ( ( type_qualifier | type_specifier )+ )
+                # C.g:193:4: ( type_qualifier | type_specifier )+
+                # C.g:193:4: ( type_qualifier | type_specifier )+
+                cnt18 = 0
+                while True: #loop18
+                    alt18 = 3
+                    LA18 = self.input.LA(1)
+                    if LA18 == IDENTIFIER:
+                        LA18 = self.input.LA(2)
+                        if LA18 == EOF or LA18 == IDENTIFIER or LA18 == 34 or LA18 == 35 or LA18 == 36 or LA18 == 37 or LA18 == 38 or LA18 == 39 or LA18 == 40 or LA18 == 41 or LA18 == 42 or LA18 == 45 or LA18 == 46 or LA18 == 48 or LA18 == 49 or LA18 == 50 or LA18 == 51 or LA18 == 52 or LA18 == 53 or LA18 == 54 or LA18 == 56 or LA18 == 59:
+                            alt18 = 2
+                        elif LA18 == 55:
+                            LA18_24 = self.input.LA(3)
 
-                            if (self.synpred38()) :
-                                alt17 = 2
+                            if (self.synpred40()) :
+                                alt18 = 2
 
 
-                        elif LA17 == 45:
-                            LA17_23 = self.input.LA(3)
+                        elif LA18 == 47:
+                            LA18_25 = self.input.LA(3)
 
-                            if (self.synpred38()) :
-                                alt17 = 2
+                            if (self.synpred40()) :
+                                alt18 = 2
 
 
-                        elif LA17 == 53:
-                            LA17_24 = self.input.LA(3)
+                        elif LA18 == 57:
+                            LA18_26 = self.input.LA(3)
 
-                            if (self.synpred38()) :
-                                alt17 = 2
+                            if (self.synpred40()) :
+                                alt18 = 2
 
 
 
-                    elif LA17 == 47 or LA17 == 48 or LA17 == 49 or LA17 == 50:
-                        alt17 = 1
-                    elif LA17 == 32 or LA17 == 33 or LA17 == 34 or LA17 == 35 or LA17 == 36 or LA17 == 37 or LA17 == 38 or LA17 == 39 or LA17 == 40 or LA17 == 43 or LA17 == 44 or LA17 == 46:
-                        alt17 = 2
+                    elif LA18 == 49 or LA18 == 50 or LA18 == 51 or LA18 == 52 or LA18 == 53:
+                        alt18 = 1
+                    elif LA18 == 34 or LA18 == 35 or LA18 == 36 or LA18 == 37 or LA18 == 38 or LA18 == 39 or LA18 == 40 or LA18 == 41 or LA18 == 42 or LA18 == 45 or LA18 == 46 or LA18 == 48:
+                        alt18 = 2
 
-                    if alt17 == 1:
-                        # C.g:185:6: type_qualifier
-                        self.following.append(self.FOLLOW_type_qualifier_in_specifier_qualifier_list545)
+                    if alt18 == 1:
+                        # C.g:193:6: type_qualifier
+                        self.following.append(self.FOLLOW_type_qualifier_in_specifier_qualifier_list554)
                         self.type_qualifier()
                         self.following.pop()
                         if self.failed:
                             return 
 
 
-                    elif alt17 == 2:
-                        # C.g:185:23: type_specifier
-                        self.following.append(self.FOLLOW_type_specifier_in_specifier_qualifier_list549)
+                    elif alt18 == 2:
+                        # C.g:193:23: type_specifier
+                        self.following.append(self.FOLLOW_type_specifier_in_specifier_qualifier_list558)
                         self.type_specifier()
                         self.following.pop()
                         if self.failed:
@@ -1682,17 +1712,17 @@ class CParser(Parser):
 
 
                     else:
-                        if cnt17 >= 1:
-                            break #loop17
+                        if cnt18 >= 1:
+                            break #loop18
 
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        eee = EarlyExitException(17, self.input)
+                        eee = EarlyExitException(18, self.input)
                         raise eee
 
-                    cnt17 += 1
+                    cnt18 += 1
 
 
 
@@ -1714,7 +1744,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declarator_list
-    # C.g:188:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ;
+    # C.g:196:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ;
     def struct_declarator_list(self, ):
 
         struct_declarator_list_StartIndex = self.input.index()
@@ -1723,28 +1753,28 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 16):
                     return 
 
-                # C.g:189:2: ( struct_declarator ( ',' struct_declarator )* )
-                # C.g:189:4: struct_declarator ( ',' struct_declarator )*
-                self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list563)
+                # 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)
                 self.struct_declarator()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:189:22: ( ',' struct_declarator )*
-                while True: #loop18
-                    alt18 = 2
-                    LA18_0 = self.input.LA(1)
+                # C.g:197:22: ( ',' struct_declarator )*
+                while True: #loop19
+                    alt19 = 2
+                    LA19_0 = self.input.LA(1)
 
-                    if (LA18_0 == 26) :
-                        alt18 = 1
+                    if (LA19_0 == 27) :
+                        alt19 = 1
 
 
-                    if alt18 == 1:
-                        # C.g:189:23: ',' struct_declarator
-                        self.match(self.input, 26, self.FOLLOW_26_in_struct_declarator_list566)
+                    if alt19 == 1:
+                        # C.g:197:23: ',' struct_declarator
+                        self.match(self.input, 27, self.FOLLOW_27_in_struct_declarator_list575)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list568)
+                        self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list577)
                         self.struct_declarator()
                         self.following.pop()
                         if self.failed:
@@ -1752,7 +1782,7 @@ class CParser(Parser):
 
 
                     else:
-                        break #loop18
+                        break #loop19
 
 
 
@@ -1774,7 +1804,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declarator
-    # C.g:192:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );
+    # C.g:200:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );
     def struct_declarator(self, ):
 
         struct_declarator_StartIndex = self.input.index()
@@ -1783,42 +1813,42 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 17):
                     return 
 
-                # C.g:193:2: ( declarator ( ':' constant_expression )? | ':' constant_expression )
-                alt20 = 2
-                LA20_0 = self.input.LA(1)
+                # C.g:201:2: ( declarator ( ':' constant_expression )? | ':' constant_expression )
+                alt21 = 2
+                LA21_0 = self.input.LA(1)
 
-                if (LA20_0 == IDENTIFIER or LA20_0 == 51 or LA20_0 == 55) :
-                    alt20 = 1
-                elif (LA20_0 == 45) :
-                    alt20 = 2
+                if (LA21_0 == IDENTIFIER or (54 <= LA21_0 <= 55) or LA21_0 == 59) :
+                    alt21 = 1
+                elif (LA21_0 == 47) :
+                    alt21 = 2
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("192:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );", 20, 0, self.input)
+                    nvae = NoViableAltException("200:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );", 21, 0, self.input)
 
                     raise nvae
 
-                if alt20 == 1:
-                    # C.g:193:4: declarator ( ':' constant_expression )?
-                    self.following.append(self.FOLLOW_declarator_in_struct_declarator581)
+                if alt21 == 1:
+                    # C.g:201:4: declarator ( ':' constant_expression )?
+                    self.following.append(self.FOLLOW_declarator_in_struct_declarator590)
                     self.declarator()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:193:15: ( ':' constant_expression )?
-                    alt19 = 2
-                    LA19_0 = self.input.LA(1)
+                    # C.g:201:15: ( ':' constant_expression )?
+                    alt20 = 2
+                    LA20_0 = self.input.LA(1)
 
-                    if (LA19_0 == 45) :
-                        alt19 = 1
-                    if alt19 == 1:
-                        # C.g:193:16: ':' constant_expression
-                        self.match(self.input, 45, self.FOLLOW_45_in_struct_declarator584)
+                    if (LA20_0 == 47) :
+                        alt20 = 1
+                    if alt20 == 1:
+                        # C.g:201:16: ':' constant_expression
+                        self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator593)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_constant_expression_in_struct_declarator586)
+                        self.following.append(self.FOLLOW_constant_expression_in_struct_declarator595)
                         self.constant_expression()
                         self.following.pop()
                         if self.failed:
@@ -1828,12 +1858,12 @@ class CParser(Parser):
 
 
 
-                elif alt20 == 2:
-                    # C.g:194:4: ':' constant_expression
-                    self.match(self.input, 45, self.FOLLOW_45_in_struct_declarator593)
+                elif alt21 == 2:
+                    # C.g:202:4: ':' constant_expression
+                    self.match(self.input, 47, self.FOLLOW_47_in_struct_declarator602)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_constant_expression_in_struct_declarator595)
+                    self.following.append(self.FOLLOW_constant_expression_in_struct_declarator604)
                     self.constant_expression()
                     self.following.pop()
                     if self.failed:
@@ -1862,7 +1892,7 @@ class CParser(Parser):
 
 
     # $ANTLR start enum_specifier
-    # C.g:197:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );
+    # C.g:205:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );
     def enum_specifier(self, ):
 
         retval = self.enum_specifier_return()
@@ -1873,37 +1903,37 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 18):
                     return retval
 
-                # C.g:199:2: ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER )
-                alt21 = 3
-                LA21_0 = self.input.LA(1)
+                # C.g:207:2: ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER )
+                alt22 = 3
+                LA22_0 = self.input.LA(1)
 
-                if (LA21_0 == 46) :
-                    LA21_1 = self.input.LA(2)
+                if (LA22_0 == 48) :
+                    LA22_1 = self.input.LA(2)
 
-                    if (LA21_1 == IDENTIFIER) :
-                        LA21_2 = self.input.LA(3)
+                    if (LA22_1 == IDENTIFIER) :
+                        LA22_2 = self.input.LA(3)
 
-                        if (LA21_2 == 41) :
-                            alt21 = 2
-                        elif (LA21_2 == EOF or LA21_2 == IDENTIFIER or LA21_2 == 24 or (28 <= LA21_2 <= 40) or (43 <= LA21_2 <= 53) or LA21_2 == 55) :
-                            alt21 = 3
+                        if (LA22_2 == 43) :
+                            alt22 = 2
+                        elif (LA22_2 == EOF or LA22_2 == IDENTIFIER or LA22_2 == 25 or (29 <= LA22_2 <= 42) or (45 <= LA22_2 <= 57) or LA22_2 == 59) :
+                            alt22 = 3
                         else:
                             if self.backtracking > 0:
                                 self.failed = True
                                 return retval
 
-                            nvae = NoViableAltException("197:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 21, 2, self.input)
+                            nvae = NoViableAltException("205:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 22, 2, self.input)
 
                             raise nvae
 
-                    elif (LA21_1 == 41) :
-                        alt21 = 1
+                    elif (LA22_1 == 43) :
+                        alt22 = 1
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return retval
 
-                        nvae = NoViableAltException("197:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 21, 1, self.input)
+                        nvae = NoViableAltException("205:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 22, 1, self.input)
 
                         raise nvae
 
@@ -1912,55 +1942,55 @@ class CParser(Parser):
                         self.failed = True
                         return retval
 
-                    nvae = NoViableAltException("197:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 21, 0, self.input)
+                    nvae = NoViableAltException("205:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 22, 0, self.input)
 
                     raise nvae
 
-                if alt21 == 1:
-                    # C.g:199:4: 'enum' '{' enumerator_list '}'
-                    self.match(self.input, 46, self.FOLLOW_46_in_enum_specifier613)
+                if alt22 == 1:
+                    # C.g:207:4: 'enum' '{' enumerator_list '}'
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier622)
                     if self.failed:
                         return retval
-                    self.match(self.input, 41, self.FOLLOW_41_in_enum_specifier615)
+                    self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier624)
                     if self.failed:
                         return retval
-                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier617)
+                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier626)
                     self.enumerator_list()
                     self.following.pop()
                     if self.failed:
                         return retval
-                    self.match(self.input, 42, self.FOLLOW_42_in_enum_specifier619)
+                    self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier628)
                     if self.failed:
                         return retval
 
 
-                elif alt21 == 2:
-                    # C.g:200:4: 'enum' IDENTIFIER '{' enumerator_list '}'
-                    self.match(self.input, 46, self.FOLLOW_46_in_enum_specifier624)
+                elif alt22 == 2:
+                    # C.g:208:4: 'enum' IDENTIFIER '{' enumerator_list '}'
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier633)
                     if self.failed:
                         return retval
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier626)
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier635)
                     if self.failed:
                         return retval
-                    self.match(self.input, 41, self.FOLLOW_41_in_enum_specifier628)
+                    self.match(self.input, 43, self.FOLLOW_43_in_enum_specifier637)
                     if self.failed:
                         return retval
-                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier630)
+                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier639)
                     self.enumerator_list()
                     self.following.pop()
                     if self.failed:
                         return retval
-                    self.match(self.input, 42, self.FOLLOW_42_in_enum_specifier632)
+                    self.match(self.input, 44, self.FOLLOW_44_in_enum_specifier641)
                     if self.failed:
                         return retval
 
 
-                elif alt21 == 3:
-                    # C.g:201:4: 'enum' IDENTIFIER
-                    self.match(self.input, 46, self.FOLLOW_46_in_enum_specifier637)
+                elif alt22 == 3:
+                    # C.g:209:4: 'enum' IDENTIFIER
+                    self.match(self.input, 48, self.FOLLOW_48_in_enum_specifier646)
                     if self.failed:
                         return retval
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier639)
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier648)
                     if self.failed:
                         return retval
 
@@ -1983,7 +2013,7 @@ class CParser(Parser):
 
 
     # $ANTLR start enumerator_list
-    # C.g:204:1: enumerator_list : enumerator ( ',' enumerator )* ;
+    # C.g:212:1: enumerator_list : enumerator ( ',' enumerator )* ;
     def enumerator_list(self, ):
 
         enumerator_list_StartIndex = self.input.index()
@@ -1992,28 +2022,28 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 19):
                     return 
 
-                # C.g:205:2: ( enumerator ( ',' enumerator )* )
-                # C.g:205:4: enumerator ( ',' enumerator )*
-                self.following.append(self.FOLLOW_enumerator_in_enumerator_list650)
+                # C.g:213:2: ( enumerator ( ',' enumerator )* )
+                # C.g:213:4: enumerator ( ',' enumerator )*
+                self.following.append(self.FOLLOW_enumerator_in_enumerator_list659)
                 self.enumerator()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:205:15: ( ',' enumerator )*
-                while True: #loop22
-                    alt22 = 2
-                    LA22_0 = self.input.LA(1)
+                # C.g:213:15: ( ',' enumerator )*
+                while True: #loop23
+                    alt23 = 2
+                    LA23_0 = self.input.LA(1)
 
-                    if (LA22_0 == 26) :
-                        alt22 = 1
+                    if (LA23_0 == 27) :
+                        alt23 = 1
 
 
-                    if alt22 == 1:
-                        # C.g:205:16: ',' enumerator
-                        self.match(self.input, 26, self.FOLLOW_26_in_enumerator_list653)
+                    if alt23 == 1:
+                        # C.g:213:16: ',' enumerator
+                        self.match(self.input, 27, self.FOLLOW_27_in_enumerator_list662)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_enumerator_in_enumerator_list655)
+                        self.following.append(self.FOLLOW_enumerator_in_enumerator_list664)
                         self.enumerator()
                         self.following.pop()
                         if self.failed:
@@ -2021,7 +2051,7 @@ class CParser(Parser):
 
 
                     else:
-                        break #loop22
+                        break #loop23
 
 
 
@@ -2043,7 +2073,7 @@ class CParser(Parser):
 
 
     # $ANTLR start enumerator
-    # C.g:208:1: enumerator : IDENTIFIER ( '=' constant_expression )? ;
+    # C.g:216:1: enumerator : IDENTIFIER ( '=' constant_expression )? ;
     def enumerator(self, ):
 
         enumerator_StartIndex = self.input.index()
@@ -2052,23 +2082,23 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 20):
                     return 
 
-                # C.g:209:2: ( IDENTIFIER ( '=' constant_expression )? )
-                # C.g:209:4: IDENTIFIER ( '=' constant_expression )?
-                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enumerator668)
+                # C.g:217:2: ( IDENTIFIER ( '=' constant_expression )? )
+                # C.g:217:4: IDENTIFIER ( '=' constant_expression )?
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enumerator677)
                 if self.failed:
                     return 
-                # C.g:209:15: ( '=' constant_expression )?
-                alt23 = 2
-                LA23_0 = self.input.LA(1)
+                # C.g:217:15: ( '=' constant_expression )?
+                alt24 = 2
+                LA24_0 = self.input.LA(1)
 
-                if (LA23_0 == 27) :
-                    alt23 = 1
-                if alt23 == 1:
-                    # C.g:209:16: '=' constant_expression
-                    self.match(self.input, 27, self.FOLLOW_27_in_enumerator671)
+                if (LA24_0 == 28) :
+                    alt24 = 1
+                if alt24 == 1:
+                    # C.g:217:16: '=' constant_expression
+                    self.match(self.input, 28, self.FOLLOW_28_in_enumerator680)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_constant_expression_in_enumerator673)
+                    self.following.append(self.FOLLOW_constant_expression_in_enumerator682)
                     self.constant_expression()
                     self.following.pop()
                     if self.failed:
@@ -2095,7 +2125,7 @@ class CParser(Parser):
 
 
     # $ANTLR start type_qualifier
-    # C.g:212:1: type_qualifier : ( 'const' | 'volatile' | 'IN' | 'OUT' );
+    # C.g:220:1: type_qualifier : ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' );
     def type_qualifier(self, ):
 
         type_qualifier_StartIndex = self.input.index()
@@ -2104,9 +2134,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 21):
                     return 
 
-                # C.g:213:2: ( 'const' | 'volatile' | 'IN' | 'OUT' )
+                # C.g:221:2: ( 'const' | 'volatile' | 'IN' | 'OUT' | 'OPTIONAL' )
                 # C.g:
-                if (47 <= self.input.LA(1) <= 50):
+                if (49 <= self.input.LA(1) <= 53):
                     self.input.consume();
                     self.errorRecovery = False
                     self.failed = False
@@ -2148,7 +2178,7 @@ class CParser(Parser):
 
 
     # $ANTLR start declarator
-    # C.g:219:1: declarator : ( ( pointer )? direct_declarator | pointer );
+    # C.g:228:1: declarator : ( ( 'EFIAPI' )? ( pointer )? direct_declarator | pointer );
     def declarator(self, ):
 
         retval = self.declarator_return()
@@ -2159,48 +2189,62 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 22):
                     return retval
 
-                # C.g:220:2: ( ( pointer )? direct_declarator | pointer )
-                alt25 = 2
-                LA25_0 = self.input.LA(1)
+                # C.g:229:2: ( ( 'EFIAPI' )? ( pointer )? direct_declarator | pointer )
+                alt27 = 2
+                LA27_0 = self.input.LA(1)
 
-                if (LA25_0 == 55) :
-                    LA25_1 = self.input.LA(2)
+                if (LA27_0 == IDENTIFIER or (54 <= LA27_0 <= 55)) :
+                    alt27 = 1
+                elif (LA27_0 == 59) :
+                    LA27_2 = self.input.LA(2)
 
-                    if (self.synpred50()) :
-                        alt25 = 1
+                    if (self.synpred54()) :
+                        alt27 = 1
                     elif (True) :
-                        alt25 = 2
+                        alt27 = 2
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return retval
 
-                        nvae = NoViableAltException("219:1: declarator : ( ( pointer )? direct_declarator | pointer );", 25, 1, self.input)
+                        nvae = NoViableAltException("228:1: declarator : ( ( 'EFIAPI' )? ( pointer )? direct_declarator | pointer );", 27, 2, self.input)
 
                         raise nvae
 
-                elif (LA25_0 == IDENTIFIER or LA25_0 == 51) :
-                    alt25 = 1
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return retval
 
-                    nvae = NoViableAltException("219:1: declarator : ( ( pointer )? direct_declarator | pointer );", 25, 0, self.input)
+                    nvae = NoViableAltException("228:1: declarator : ( ( 'EFIAPI' )? ( pointer )? direct_declarator | pointer );", 27, 0, self.input)
 
                     raise nvae
 
-                if alt25 == 1:
-                    # C.g:220:4: ( pointer )? direct_declarator
-                    # C.g:220:4: ( pointer )?
-                    alt24 = 2
-                    LA24_0 = self.input.LA(1)
+                if alt27 == 1:
+                    # C.g:229:4: ( 'EFIAPI' )? ( pointer )? direct_declarator
+                    # C.g:229:4: ( 'EFIAPI' )?
+                    alt25 = 2
+                    LA25_0 = self.input.LA(1)
+
+                    if (LA25_0 == 54) :
+                        alt25 = 1
+                    if alt25 == 1:
+                        # C.g:229:5: 'EFIAPI'
+                        self.match(self.input, 54, self.FOLLOW_54_in_declarator727)
+                        if self.failed:
+                            return retval
+
 
-                    if (LA24_0 == 55) :
-                        alt24 = 1
-                    if alt24 == 1:
+
+                    # C.g:229:16: ( pointer )?
+                    alt26 = 2
+                    LA26_0 = self.input.LA(1)
+
+                    if (LA26_0 == 59) :
+                        alt26 = 1
+                    if alt26 == 1:
                         # C.g:0:0: pointer
-                        self.following.append(self.FOLLOW_pointer_in_declarator712)
+                        self.following.append(self.FOLLOW_pointer_in_declarator731)
                         self.pointer()
                         self.following.pop()
                         if self.failed:
@@ -2208,16 +2252,16 @@ class CParser(Parser):
 
 
 
-                    self.following.append(self.FOLLOW_direct_declarator_in_declarator715)
+                    self.following.append(self.FOLLOW_direct_declarator_in_declarator734)
                     self.direct_declarator()
                     self.following.pop()
                     if self.failed:
                         return retval
 
 
-                elif alt25 == 2:
-                    # C.g:221:4: pointer
-                    self.following.append(self.FOLLOW_pointer_in_declarator720)
+                elif alt27 == 2:
+                    # C.g:230:4: pointer
+                    self.following.append(self.FOLLOW_pointer_in_declarator739)
                     self.pointer()
                     self.following.pop()
                     if self.failed:
@@ -2242,7 +2286,7 @@ class CParser(Parser):
 
 
     # $ANTLR start direct_declarator
-    # C.g:224:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ );
+    # C.g:233:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ );
     def direct_declarator(self, ):
 
         direct_declarator_StartIndex = self.input.index()
@@ -2251,205 +2295,240 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 23):
                     return 
 
-                # C.g:225:2: ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ )
-                alt28 = 2
-                LA28_0 = self.input.LA(1)
+                # C.g:234:2: ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ )
+                alt30 = 2
+                LA30_0 = self.input.LA(1)
 
-                if (LA28_0 == IDENTIFIER) :
-                    alt28 = 1
-                elif (LA28_0 == 51) :
-                    alt28 = 2
+                if (LA30_0 == IDENTIFIER) :
+                    alt30 = 1
+                elif (LA30_0 == 55) :
+                    alt30 = 2
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("224:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ );", 28, 0, self.input)
+                    nvae = NoViableAltException("233:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ );", 30, 0, self.input)
 
                     raise nvae
 
-                if alt28 == 1:
-                    # C.g:225:4: IDENTIFIER ( declarator_suffix )*
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator731)
+                if alt30 == 1:
+                    # C.g:234:4: IDENTIFIER ( declarator_suffix )*
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator750)
                     if self.failed:
                         return 
-                    # C.g:225:15: ( declarator_suffix )*
-                    while True: #loop26
-                        alt26 = 2
-                        LA26_0 = self.input.LA(1)
+                    # C.g:234:15: ( declarator_suffix )*
+                    while True: #loop28
+                        alt28 = 2
+                        LA28_0 = self.input.LA(1)
+
+                        if (LA28_0 == 55) :
+                            LA28 = self.input.LA(2)
+                            if LA28 == 56:
+                                LA28_28 = self.input.LA(3)
+
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                        if (LA26_0 == 51) :
-                            LA26 = self.input.LA(2)
-                            if LA26 == 52:
-                                LA26_26 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 29 or LA28 == 30 or LA28 == 31 or LA28 == 32 or LA28 == 33:
+                                LA28_32 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 28 or LA26 == 29 or LA26 == 30 or LA26 == 31:
-                                LA26_30 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 34:
+                                LA28_33 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 32:
-                                LA26_31 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 35:
+                                LA28_34 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 33:
-                                LA26_32 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 36:
+                                LA28_35 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 34:
-                                LA26_33 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 37:
+                                LA28_36 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 35:
-                                LA26_34 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 38:
+                                LA28_37 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 36:
-                                LA26_35 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 39:
+                                LA28_38 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 37:
-                                LA26_36 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 40:
+                                LA28_39 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 38:
-                                LA26_37 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 41:
+                                LA28_40 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 39:
-                                LA26_38 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 42:
+                                LA28_41 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 40:
-                                LA26_39 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 45 or LA28 == 46:
+                                LA28_42 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 43 or LA26 == 44:
-                                LA26_40 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 48:
+                                LA28_43 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 46:
-                                LA26_41 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == IDENTIFIER:
+                                LA28_44 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == IDENTIFIER:
-                                LA26_42 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 49 or LA28 == 50 or LA28 == 51 or LA28 == 52 or LA28 == 53:
+                                LA28_45 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 47 or LA26 == 48 or LA26 == 49 or LA26 == 50:
-                                LA26_43 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
 
+                        elif (LA28_0 == 57) :
+                            LA28 = self.input.LA(2)
+                            if LA28 == 58:
+                                LA28_47 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                        elif (LA26_0 == 53) :
-                            LA26 = self.input.LA(2)
-                            if LA26 == 54:
-                                LA26_44 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == 55:
+                                LA28_48 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == 51:
-                                LA26_45 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == IDENTIFIER:
+                                LA28_49 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == IDENTIFIER:
-                                LA26_46 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == HEX_LITERAL:
+                                LA28_50 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1
 
-                            elif LA26 == HEX_LITERAL or LA26 == OCTAL_LITERAL or LA26 == DECIMAL_LITERAL or LA26 == CHARACTER_LITERAL or LA26 == STRING_LITERAL or LA26 == FLOATING_POINT_LITERAL:
-                                LA26_47 = self.input.LA(3)
 
-                                if (self.synpred51()) :
-                                    alt26 = 1
+                            elif LA28 == OCTAL_LITERAL:
+                                LA28_51 = self.input.LA(3)
 
+                                if (self.synpred55()) :
+                                    alt28 = 1