generate parser that have the ability to recognize function contents and start, end...
authorjlin16 <jlin16@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 11 Dec 2007 07:14:41 +0000 (07:14 +0000)
committerjlin16 <jlin16@7335b38e-4728-0410-8992-fb3ffe349368>
Tue, 11 Dec 2007 07:14:41 +0000 (07:14 +0000)
git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@918 7335b38e-4728-0410-8992-fb3ffe349368

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

index 08ccd73..aea7b2b 100644 (file)
@@ -9,6 +9,7 @@ options {
 \r
 scope Symbols {\r
        types;\r
+       inFunc;\r
 }\r
 \r
 @members {\r
@@ -18,6 +19,12 @@ scope Symbols {
                 return True\r
 \r
         return False\r
+        \r
+    def printTokenInfo(self, line, offset, tokenText):\r
+       print str(line)+ ',' + str(offset) + ':' + str(tokenText)\r
+       \r
+    def printFuncHeader(self, line, offset, tokenText):\r
+        print str(line)+ ',' + str(offset) + ':' + str(tokenText) + ' is function header.'\r
 \r
 }\r
 \r
@@ -25,24 +32,12 @@ translation_unit
 scope Symbols; // entire file is a scope\r
 @init {\r
   $Symbols::types = set()\r
+  $Symbols::inFunc = False\r
 }\r
        : external_declaration+\r
        ;\r
 \r
-/** Either a function definition or any other kind of C decl/def.\r
- *  The LL(*) analysis algorithm fails to deal with this due to\r
- *  recursion in the declarator rules.  I'm putting in a\r
- *  manual predicate here so that we don't backtrack over\r
- *  the entire function.  Further, you get a better error\r
- *  as errors within the function itself don't make it fail\r
- *  to predict that it's a function.  Weird errors previously.\r
- *  Remember: the goal is to avoid backtrack like the plague\r
- *  because it makes debugging, actions, and errors harder.\r
- *\r
- *  Note that k=1 results in a much smaller predictor for the \r
- *  fixed lookahead; k=2 made a few extra thousand lines. ;)\r
- *  I'll have to optimize that in the future.\r
- */\r
+\r
 /*function_declaration\r
 @after{\r
   print $function_declaration.text\r
@@ -64,14 +59,17 @@ options {k=1;}
 \r
 \r
 function_definition\r
-scope Symbols; // put parameters and locals into same scope for now\r
-@init {\r
-  $Symbols::types = set()\r
+scope Symbols;\r
+@init{\r
+  $Symbols::inFunc = True\r
+}\r
+@after{\r
+  print str($function_definition.stop.line) + ',' + str($function_definition.stop.charPositionInLine)\r
 }\r
        :       declaration_specifiers? declarator\r
                (       declaration+ compound_statement // K&R style\r
                |       compound_statement                              // ANSI style\r
-               )\r
+               ) //{self.printFuncHeader($declarator.start.line, $declarator.start.charPositionInLine, $declarator.text)}\r
        ;\r
 \r
 declaration\r
@@ -81,7 +79,7 @@ scope {
 @init {\r
   $declaration::isTypedef = False;\r
 }\r
-       : 'typedef' declaration_specifiers? {$declaration::isTypedef=True}\r
+       : a='typedef' declaration_specifiers? //{self.printTokenInfo($a.line, $a.pos, $a.text)}\r
          init_declarator_list ';' // special case, looking for typedef \r
        | declaration_specifiers init_declarator_list? ';'\r
        //| function_declaration\r
@@ -99,7 +97,8 @@ init_declarator_list
        ;\r
 \r
 init_declarator\r
-       : declarator ('=' initializer)?\r
+       : declarator ('=' initializer)? \r
+       //{if not $Symbols::inFunc: self.printTokenInfo($declarator.start.line, $declarator.start.charPositionInLine, $declarator.text)}\r
        ;\r
 \r
 storage_class_specifier\r
@@ -127,7 +126,7 @@ options {k=3;}
 \r
 type_id\r
     :   IDENTIFIER \r
-       //{print str($IDENTIFIER.line) + ":" + $IDENTIFIER.text + " is a type"}\r
+       //{self.printTokenInfo($a.line, $a.pos, $a.text)}\r
     ;\r
 \r
 struct_or_union_specifier\r
@@ -194,9 +193,10 @@ declarator
        ;\r
 \r
 direct_declarator\r
-       :   IDENTIFIER declarator_suffix*\r
-                       //{print "declarator "+$IDENTIFIER.text}\r
-               |       '(' declarator ')' declarator_suffix+\r
+scope Symbols;\r
+       : IDENTIFIER declarator_suffix*\r
+         //{if $Symbols::inFunc: self.printFuncName($IDENTIFIER.line, $IDENTIFIER.charPositonInLine, $IDENTIFIER.text)}\r
+       | '(' declarator ')' declarator_suffix+\r
        ;\r
 \r
 declarator_suffix\r
@@ -210,7 +210,7 @@ declarator_suffix
 pointer\r
        : '*' type_qualifier+ pointer?\r
        | '*' pointer\r
-       | '*'\r
+       | s='*'\r
        ;\r
 \r
 parameter_type_list\r
@@ -258,7 +258,7 @@ initializer
        ;\r
 \r
 initializer_list\r
-       : initializer (',' initializer)*\r
+       : initializer (',' initializer )*\r
        ;\r
 \r
 // E x p r e s s i o n s\r
@@ -407,7 +407,7 @@ statement
        ;\r
 \r
 macro_statement\r
-       : IDENTIFIER '(' (IDENTIFIER | statement_list | declaration) ')'\r
+       : IDENTIFIER '(' (IDENTIFIER | declaration*  statement_list?) ')'\r
        ;\r
        \r
 labeled_statement\r
@@ -471,7 +471,7 @@ CHARACTER_LITERAL
 STRING_LITERAL\r
     :  ('L')? '"' ( EscapeSequence | ~('\\'|'"') )* '"'\r
     ;\r
-\r
+    \r
 HEX_LITERAL : '0' ('x'|'X') HexDigit+ IntegerTypeSuffix? ;\r
 \r
 DECIMAL_LITERAL : ('0' | '1'..'9' '0'..'9'*) IntegerTypeSuffix? ;\r
@@ -521,10 +521,18 @@ 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
+//    ;\r
+UnicodeVocabulary\r
+    : '\u0003'..'\uFFFE'\r
+    ;\r
 COMMENT\r
     :   '/*' ( options {greedy=false;} : . )* '*/' {$channel=HIDDEN;}\r
     ;\r
 \r
+\r
 LINE_COMMENT\r
     : '//' ~('\n'|'\r')* '\r'? '\n' {$channel=HIDDEN;}\r
     ;\r
index 0045097..804d6d1 100644 (file)
@@ -3,11 +3,12 @@ LETTER=11
 Exponent=15
 DECIMAL_LITERAL=7
 IntegerTypeSuffix=14
+UnicodeVocabulary=20
 HexDigit=13
 WS=19
-LINE_COMMAND=22
-COMMENT=20
-LINE_COMMENT=21
+LINE_COMMAND=23
+COMMENT=21
+LINE_COMMENT=22
 OCTAL_LITERAL=6
 HEX_LITERAL=5
 FLOATING_POINT_LITERAL=10
@@ -17,83 +18,83 @@ STRING_LITERAL=9
 OctalEscape=17
 IDENTIFIER=4
 FloatTypeSuffix=16
-'<'=85
-'goto'=99
-'-='=72
-'>'=86
-'case'=91
-'else'=94
-'/='=69
-'-'=57
-'?'=78
-'!='=84
-'%='=70
-'>='=88
-'do'=97
-'<<'=89
-'signed'=38
-'auto'=29
-'register'=30
-'sizeof'=62
-'<='=87
-'||'=79
-'double'=37
-'typedef'=23
-'='=26
-'volatile'=47
-'*='=68
-'OUT'=49
-'|='=77
-'struct'=42
-'++'=60
-'union'=43
-'{'=40
-'void'=31
-'float'=36
-':'=44
-'for'=98
-'.'=63
-'short'=33
-'*'=54
-'}'=41
-'~'=66
-'->'=64
-'break'=101
-'<<='=73
-'unsigned'=39
-'extern'=27
-'%'=59
-';'=24
-'default'=92
-']'=53
-','=25
-'&'=65
-'&&'=80
-'int'=34
-'&='=75
-'while'=96
-'continue'=100
-'const'=46
-'['=52
-'^'=82
-'long'=35
-'/'=58
-'return'=102
-'|'=81
-'enum'=45
-')'=51
-'>>='=74
-'IN'=48
-'=='=83
-'static'=28
-'if'=93
-'char'=32
-'!'=67
-'+='=71
-'switch'=95
-'('=50
-'>>'=90
-'--'=61
-'^='=76
-'+'=56
-'...'=55
+'<'=86
+'goto'=100
+'-='=73
+'>'=87
+'case'=92
+'else'=95
+'/='=70
+'-'=58
+'?'=79
+'!='=85
+'%='=71
+'>='=89
+'do'=98
+'<<'=90
+'signed'=39
+'auto'=30
+'register'=31
+'sizeof'=63
+'<='=88
+'||'=80
+'double'=38
+'typedef'=24
+'='=27
+'volatile'=48
+'*='=69
+'OUT'=50
+'|='=78
+'struct'=43
+'++'=61
+'union'=44
+'{'=41
+'void'=32
+'float'=37
+':'=45
+'for'=99
+'.'=64
+'short'=34
+'*'=55
+'}'=42
+'~'=67
+'->'=65
+'break'=102
+'<<='=74
+'unsigned'=40
+'extern'=28
+'%'=60
+';'=25
+'default'=93
+']'=54
+','=26
+'&'=66
+'&&'=81
+'int'=35
+'&='=76
+'while'=97
+'continue'=101
+'const'=47
+'['=53
+'^'=83
+'long'=36
+'/'=59
+'return'=103
+'|'=82
+'enum'=46
+')'=52
+'>>='=75
+'IN'=49
+'=='=84
+'static'=29
+'if'=94
+'char'=33
+'!'=68
+'+='=72
+'switch'=96
+'('=51
+'>>'=91
+'--'=62
+'^='=77
+'+'=57
+'...'=56
index 5bd28e9..b6fa7b7 100644 (file)
@@ -1,4 +1,4 @@
-# $ANTLR 3.0.1 C.g 2007-11-26 17:02:19
+# $ANTLR 3.0.1 C.g 2007-11-30 17:29:47
 
 from antlr3 import *
 from antlr3.compat import set, frozenset
@@ -14,6 +14,7 @@ T70=70
 T74=74
 T85=85
 T102=102
+T103=103
 STRING_LITERAL=9
 T32=32
 T81=81
@@ -27,13 +28,14 @@ T68=68
 T73=73
 T84=84
 T33=33
+UnicodeVocabulary=20
 T78=78
 WS=19
-LINE_COMMAND=22
+LINE_COMMAND=23
 T42=42
 T96=96
 T71=71
-LINE_COMMENT=21
+LINE_COMMENT=22
 T72=72
 T94=94
 FLOATING_POINT_LITERAL=10
@@ -84,10 +86,9 @@ T50=50
 T92=92
 T43=43
 T28=28
-T23=23
 T40=40
 T66=66
-COMMENT=20
+COMMENT=21
 T88=88
 T63=63
 T57=57
@@ -102,7 +103,7 @@ T48=48
 T54=54
 EOF=-1
 T47=47
-Tokens=103
+Tokens=104
 T53=53
 OctalEscape=17
 T99=99
@@ -142,11 +143,11 @@ class CLexer(Lexer):
 
 
 
-    # $ANTLR start T23
-    def mT23(self, ):
+    # $ANTLR start T24
+    def mT24(self, ):
 
         try:
-            self.type = T23
+            self.type = T24
 
             # C.g:7:5: ( 'typedef' )
             # C.g:7:7: 'typedef'
@@ -157,28 +158,6 @@ class CLexer(Lexer):
 
 
 
-        finally:
-
-            pass
-
-    # $ANTLR end T23
-
-
-
-    # $ANTLR start T24
-    def mT24(self, ):
-
-        try:
-            self.type = T24
-
-            # C.g:8:5: ( ';' )
-            # C.g:8:7: ';'
-            self.match(u';')
-
-
-
-
-
         finally:
 
             pass
@@ -193,9 +172,9 @@ class CLexer(Lexer):
         try:
             self.type = T25
 
-            # C.g:9:5: ( ',' )
-            # C.g:9:7: ','
-            self.match(u',')
+            # C.g:8:5: ( ';' )
+            # C.g:8:7: ';'
+            self.match(u';')
 
 
 
@@ -215,9 +194,9 @@ class CLexer(Lexer):
         try:
             self.type = T26
 
-            # C.g:10:5: ( '=' )
-            # C.g:10:7: '='
-            self.match(u'=')
+            # C.g:9:5: ( ',' )
+            # C.g:9:7: ','
+            self.match(u',')
 
 
 
@@ -237,10 +216,9 @@ class CLexer(Lexer):
         try:
             self.type = T27
 
-            # C.g:11:5: ( 'extern' )
-            # C.g:11:7: 'extern'
-            self.match("extern")
-
+            # C.g:10:5: ( '=' )
+            # C.g:10:7: '='
+            self.match(u'=')
 
 
 
@@ -260,9 +238,9 @@ class CLexer(Lexer):
         try:
             self.type = T28
 
-            # 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")
 
 
 
@@ -283,9 +261,9 @@ class CLexer(Lexer):
         try:
             self.type = T29
 
-            # 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")
 
 
 
@@ -306,9 +284,9 @@ class CLexer(Lexer):
         try:
             self.type = T30
 
-            # 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")
 
 
 
@@ -329,9 +307,9 @@ class CLexer(Lexer):
         try:
             self.type = T31
 
-            # 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")
 
 
 
@@ -352,9 +330,9 @@ class CLexer(Lexer):
         try:
             self.type = T32
 
-            # C.g:16:5: ( 'char' )
-            # C.g:16:7: 'char'
-            self.match("char")
+            # C.g:15:5: ( 'void' )
+            # C.g:15:7: 'void'
+            self.match("void")
 
 
 
@@ -375,9 +353,9 @@ class CLexer(Lexer):
         try:
             self.type = T33
 
-            # C.g:17:5: ( 'short' )
-            # C.g:17:7: 'short'
-            self.match("short")
+            # C.g:16:5: ( 'char' )
+            # C.g:16:7: 'char'
+            self.match("char")
 
 
 
@@ -398,9 +376,9 @@ class CLexer(Lexer):
         try:
             self.type = T34
 
-            # C.g:18:5: ( 'int' )
-            # C.g:18:7: 'int'
-            self.match("int")
+            # C.g:17:5: ( 'short' )
+            # C.g:17:7: 'short'
+            self.match("short")
 
 
 
@@ -421,9 +399,9 @@ class CLexer(Lexer):
         try:
             self.type = T35
 
-            # C.g:19:5: ( 'long' )
-            # C.g:19:7: 'long'
-            self.match("long")
+            # C.g:18:5: ( 'int' )
+            # C.g:18:7: 'int'
+            self.match("int")
 
 
 
@@ -444,9 +422,9 @@ class CLexer(Lexer):
         try:
             self.type = T36
 
-            # C.g:20:5: ( 'float' )
-            # C.g:20:7: 'float'
-            self.match("float")
+            # C.g:19:5: ( 'long' )
+            # C.g:19:7: 'long'
+            self.match("long")
 
 
 
@@ -467,9 +445,9 @@ class CLexer(Lexer):
         try:
             self.type = T37
 
-            # C.g:21:5: ( 'double' )
-            # C.g:21:7: 'double'
-            self.match("double")
+            # C.g:20:5: ( 'float' )
+            # C.g:20:7: 'float'
+            self.match("float")
 
 
 
@@ -490,9 +468,9 @@ class CLexer(Lexer):
         try:
             self.type = T38
 
-            # C.g:22:5: ( 'signed' )
-            # C.g:22:7: 'signed'
-            self.match("signed")
+            # C.g:21:5: ( 'double' )
+            # C.g:21:7: 'double'
+            self.match("double")
 
 
 
@@ -513,9 +491,9 @@ class CLexer(Lexer):
         try:
             self.type = T39
 
-            # C.g:23:5: ( 'unsigned' )
-            # C.g:23:7: 'unsigned'
-            self.match("unsigned")
+            # C.g:22:5: ( 'signed' )
+            # C.g:22:7: 'signed'
+            self.match("signed")
 
 
 
@@ -536,9 +514,10 @@ class CLexer(Lexer):
         try:
             self.type = T40
 
-            # C.g:24:5: ( '{' )
-            # C.g:24:7: '{'
-            self.match(u'{')
+            # C.g:23:5: ( 'unsigned' )
+            # C.g:23:7: 'unsigned'
+            self.match("unsigned")
+
 
 
 
@@ -558,9 +537,9 @@ class CLexer(Lexer):
         try:
             self.type = T41
 
-            # C.g:25:5: ( '}' )
-            # C.g:25:7: '}'
-            self.match(u'}')
+            # C.g:24:5: ( '{' )
+            # C.g:24:7: '{'
+            self.match(u'{')
 
 
 
@@ -580,10 +559,9 @@ class CLexer(Lexer):
         try:
             self.type = T42
 
-            # C.g:26:5: ( 'struct' )
-            # C.g:26:7: 'struct'
-            self.match("struct")
-
+            # C.g:25:5: ( '}' )
+            # C.g:25:7: '}'
+            self.match(u'}')
 
 
 
@@ -603,9 +581,9 @@ class CLexer(Lexer):
         try:
             self.type = T43
 
-            # C.g:27:5: ( 'union' )
-            # C.g:27:7: 'union'
-            self.match("union")
+            # C.g:26:5: ( 'struct' )
+            # C.g:26:7: 'struct'
+            self.match("struct")
 
 
 
@@ -626,9 +604,10 @@ class CLexer(Lexer):
         try:
             self.type = T44
 
-            # C.g:28:5: ( ':' )
-            # C.g:28:7: ':'
-            self.match(u':')
+            # C.g:27:5: ( 'union' )
+            # C.g:27:7: 'union'
+            self.match("union")
+
 
 
 
@@ -648,10 +627,9 @@ class CLexer(Lexer):
         try:
             self.type = T45
 
-            # C.g:29:5: ( 'enum' )
-            # C.g:29:7: 'enum'
-            self.match("enum")
-
+            # C.g:28:5: ( ':' )
+            # C.g:28:7: ':'
+            self.match(u':')
 
 
 
@@ -671,9 +649,9 @@ class CLexer(Lexer):
         try:
             self.type = T46
 
-            # C.g:30:5: ( 'const' )
-            # C.g:30:7: 'const'
-            self.match("const")
+            # C.g:29:5: ( 'enum' )
+            # C.g:29:7: 'enum'
+            self.match("enum")
 
 
 
@@ -694,9 +672,9 @@ class CLexer(Lexer):
         try:
             self.type = T47
 
-            # C.g:31:5: ( 'volatile' )
-            # C.g:31:7: 'volatile'
-            self.match("volatile")
+            # C.g:30:5: ( 'const' )
+            # C.g:30:7: 'const'
+            self.match("const")
 
 
 
@@ -717,9 +695,9 @@ class CLexer(Lexer):
         try:
             self.type = T48
 
-            # C.g:32:5: ( 'IN' )
-            # C.g:32:7: 'IN'
-            self.match("IN")
+            # C.g:31:5: ( 'volatile' )
+            # C.g:31:7: 'volatile'
+            self.match("volatile")
 
 
 
@@ -740,9 +718,9 @@ class CLexer(Lexer):
         try:
             self.type = T49
 
-            # C.g:33:5: ( 'OUT' )
-            # C.g:33:7: 'OUT'
-            self.match("OUT")
+            # C.g:32:5: ( 'IN' )
+            # C.g:32:7: 'IN'
+            self.match("IN")
 
 
 
@@ -763,9 +741,10 @@ class CLexer(Lexer):
         try:
             self.type = T50
 
-            # C.g:34:5: ( '(' )
-            # C.g:34:7: '('
-            self.match(u'(')
+            # C.g:33:5: ( 'OUT' )
+            # C.g:33:7: 'OUT'
+            self.match("OUT")
+
 
 
 
@@ -785,9 +764,9 @@ class CLexer(Lexer):
         try:
             self.type = T51
 
-            # C.g:35:5: ( ')' )
-            # C.g:35:7: ')'
-            self.match(u')')
+            # C.g:34:5: ( '(' )
+            # C.g:34:7: '('
+            self.match(u'(')
 
 
 
@@ -807,9 +786,9 @@ class CLexer(Lexer):
         try:
             self.type = T52
 
-            # C.g:36:5: ( '[' )
-            # C.g:36:7: '['
-            self.match(u'[')
+            # C.g:35:5: ( ')' )
+            # C.g:35:7: ')'
+            self.match(u')')
 
 
 
@@ -829,9 +808,9 @@ class CLexer(Lexer):
         try:
             self.type = T53
 
-            # C.g:37:5: ( ']' )
-            # C.g:37:7: ']'
-            self.match(u']')
+            # C.g:36:5: ( '[' )
+            # C.g:36:7: '['
+            self.match(u'[')
 
 
 
@@ -851,9 +830,9 @@ class CLexer(Lexer):
         try:
             self.type = T54
 
-            # C.g:38:5: ( '*' )
-            # C.g:38:7: '*'
-            self.match(u'*')
+            # C.g:37:5: ( ']' )
+            # C.g:37:7: ']'
+            self.match(u']')
 
 
 
@@ -873,10 +852,9 @@ class CLexer(Lexer):
         try:
             self.type = T55
 
-            # C.g:39:5: ( '...' )
-            # C.g:39:7: '...'
-            self.match("...")
-
+            # C.g:38:5: ( '*' )
+            # C.g:38:7: '*'
+            self.match(u'*')
 
 
 
@@ -896,9 +874,10 @@ class CLexer(Lexer):
         try:
             self.type = T56
 
-            # C.g:40:5: ( '+' )
-            # C.g:40:7: '+'
-            self.match(u'+')
+            # C.g:39:5: ( '...' )
+            # C.g:39:7: '...'
+            self.match("...")
+
 
 
 
@@ -918,9 +897,9 @@ class CLexer(Lexer):
         try:
             self.type = T57
 
-            # C.g:41:5: ( '-' )
-            # C.g:41:7: '-'
-            self.match(u'-')
+            # C.g:40:5: ( '+' )
+            # C.g:40:7: '+'
+            self.match(u'+')
 
 
 
@@ -940,9 +919,9 @@ class CLexer(Lexer):
         try:
             self.type = T58
 
-            # C.g:42:5: ( '/' )
-            # C.g:42:7: '/'
-            self.match(u'/')
+            # C.g:41:5: ( '-' )
+            # C.g:41:7: '-'
+            self.match(u'-')
 
 
 
@@ -962,9 +941,9 @@ class CLexer(Lexer):
         try:
             self.type = T59
 
-            # C.g:43:5: ( '%' )
-            # C.g:43:7: '%'
-            self.match(u'%')
+            # C.g:42:5: ( '/' )
+            # C.g:42:7: '/'
+            self.match(u'/')
 
 
 
@@ -984,10 +963,9 @@ class CLexer(Lexer):
         try:
             self.type = T60
 
-            # C.g:44:5: ( '++' )
-            # C.g:44:7: '++'
-            self.match("++")
-
+            # C.g:43:5: ( '%' )
+            # C.g:43:7: '%'
+            self.match(u'%')
 
 
 
@@ -1007,9 +985,9 @@ class CLexer(Lexer):
         try:
             self.type = T61
 
-            # C.g:45:5: ( '--' )
-            # C.g:45:7: '--'
-            self.match("--")
+            # C.g:44:5: ( '++' )
+            # C.g:44:7: '++'
+            self.match("++")
 
 
 
@@ -1030,9 +1008,9 @@ class CLexer(Lexer):
         try:
             self.type = T62
 
-            # C.g:46:5: ( 'sizeof' )
-            # C.g:46:7: 'sizeof'
-            self.match("sizeof")
+            # C.g:45:5: ( '--' )
+            # C.g:45:7: '--'
+            self.match("--")
 
 
 
@@ -1053,9 +1031,10 @@ class CLexer(Lexer):
         try:
             self.type = T63
 
-            # C.g:47:5: ( '.' )
-            # C.g:47:7: '.'
-            self.match(u'.')
+            # C.g:46:5: ( 'sizeof' )
+            # C.g:46:7: 'sizeof'
+            self.match("sizeof")
+
 
 
 
@@ -1075,10 +1054,9 @@ class CLexer(Lexer):
         try:
             self.type = T64
 
-            # C.g:48:5: ( '->' )
-            # C.g:48:7: '->'
-            self.match("->")
-
+            # C.g:47:5: ( '.' )
+            # C.g:47:7: '.'
+            self.match(u'.')
 
 
 
@@ -1098,9 +1076,10 @@ class CLexer(Lexer):
         try:
             self.type = T65
 
-            # C.g:49:5: ( '&' )
-            # C.g:49:7: '&'
-            self.match(u'&')
+            # C.g:48:5: ( '->' )
+            # C.g:48:7: '->'
+            self.match("->")
+
 
 
 
@@ -1120,9 +1099,9 @@ class CLexer(Lexer):
         try:
             self.type = T66
 
-            # C.g:50:5: ( '~' )
-            # C.g:50:7: '~'
-            self.match(u'~')
+            # C.g:49:5: ( '&' )
+            # C.g:49:7: '&'
+            self.match(u'&')
 
 
 
@@ -1142,9 +1121,9 @@ class CLexer(Lexer):
         try:
             self.type = T67
 
-            # C.g:51:5: ( '!' )
-            # C.g:51:7: '!'
-            self.match(u'!')
+            # C.g:50:5: ( '~' )
+            # C.g:50:7: '~'
+            self.match(u'~')
 
 
 
@@ -1164,10 +1143,9 @@ class CLexer(Lexer):
         try:
             self.type = T68
 
-            # C.g:52:5: ( '*=' )
-            # C.g:52:7: '*='
-            self.match("*=")
-
+            # C.g:51:5: ( '!' )
+            # C.g:51:7: '!'
+            self.match(u'!')
 
 
 
@@ -1187,9 +1165,9 @@ class CLexer(Lexer):
         try:
             self.type = T69
 
-            # C.g:53:5: ( '/=' )
-            # C.g:53:7: '/='
-            self.match("/=")
+            # C.g:52:5: ( '*=' )
+            # C.g:52:7: '*='
+            self.match("*=")
 
 
 
@@ -1210,9 +1188,9 @@ class CLexer(Lexer):
         try:
             self.type = T70
 
-            # C.g:54:5: ( '%=' )
-            # C.g:54:7: '%='
-            self.match("%=")
+            # C.g:53:5: ( '/=' )
+            # C.g:53:7: '/='
+            self.match("/=")
 
 
 
@@ -1233,9 +1211,9 @@ class CLexer(Lexer):
         try:
             self.type = T71
 
-            # C.g:55:5: ( '+=' )
-            # C.g:55:7: '+='
-            self.match("+=")
+            # C.g:54:5: ( '%=' )
+            # C.g:54:7: '%='
+            self.match("%=")
 
 
 
@@ -1256,9 +1234,9 @@ class CLexer(Lexer):
         try:
             self.type = T72
 
-            # C.g:56:5: ( '-=' )
-            # C.g:56:7: '-='
-            self.match("-=")
+            # C.g:55:5: ( '+=' )
+            # C.g:55:7: '+='
+            self.match("+=")
 
 
 
@@ -1279,9 +1257,9 @@ class CLexer(Lexer):
         try:
             self.type = T73
 
-            # C.g:57:5: ( '<<=' )
-            # C.g:57:7: '<<='
-            self.match("<<=")
+            # C.g:56:5: ( '-=' )
+            # C.g:56:7: '-='
+            self.match("-=")
 
 
 
@@ -1302,9 +1280,9 @@ class CLexer(Lexer):
         try:
             self.type = T74
 
-            # C.g:58:5: ( '>>=' )
-            # C.g:58:7: '>>='
-            self.match(">>=")
+            # C.g:57:5: ( '<<=' )
+            # C.g:57:7: '<<='
+            self.match("<<=")
 
 
 
@@ -1325,9 +1303,9 @@ class CLexer(Lexer):
         try:
             self.type = T75
 
-            # C.g:59:5: ( '&=' )
-            # C.g:59:7: '&='
-            self.match("&=")
+            # C.g:58:5: ( '>>=' )
+            # C.g:58:7: '>>='
+            self.match(">>=")
 
 
 
@@ -1348,9 +1326,9 @@ class CLexer(Lexer):
         try:
             self.type = T76
 
-            # C.g:60:5: ( '^=' )
-            # C.g:60:7: '^='
-            self.match("^=")
+            # C.g:59:5: ( '&=' )
+            # C.g:59:7: '&='
+            self.match("&=")
 
 
 
@@ -1371,9 +1349,9 @@ class CLexer(Lexer):
         try:
             self.type = T77
 
-            # C.g:61:5: ( '|=' )
-            # C.g:61:7: '|='
-            self.match("|=")
+            # C.g:60:5: ( '^=' )
+            # C.g:60:7: '^='
+            self.match("^=")
 
 
 
@@ -1394,9 +1372,10 @@ class CLexer(Lexer):
         try:
             self.type = T78
 
-            # C.g:62:5: ( '?' )
-            # C.g:62:7: '?'
-            self.match(u'?')
+            # C.g:61:5: ( '|=' )
+            # C.g:61:7: '|='
+            self.match("|=")
+
 
 
 
@@ -1416,10 +1395,9 @@ class CLexer(Lexer):
         try:
             self.type = T79
 
-            # C.g:63:5: ( '||' )
-            # C.g:63:7: '||'
-            self.match("||")
-
+            # C.g:62:5: ( '?' )
+            # C.g:62:7: '?'
+            self.match(u'?')
 
 
 
@@ -1439,9 +1417,9 @@ class CLexer(Lexer):
         try:
             self.type = T80
 
-            # C.g:64:5: ( '&&' )
-            # C.g:64:7: '&&'
-            self.match("&&")
+            # C.g:63:5: ( '||' )
+            # C.g:63:7: '||'
+            self.match("||")
 
 
 
@@ -1462,9 +1440,10 @@ class CLexer(Lexer):
         try:
             self.type = T81
 
-            # C.g:65:5: ( '|' )
-            # C.g:65:7: '|'
-            self.match(u'|')
+            # C.g:64:5: ( '&&' )
+            # C.g:64:7: '&&'
+            self.match("&&")
+
 
 
 
@@ -1484,9 +1463,9 @@ class CLexer(Lexer):
         try:
             self.type = T82
 
-            # C.g:66:5: ( '^' )
-            # C.g:66:7: '^'
-            self.match(u'^')
+            # C.g:65:5: ( '|' )
+            # C.g:65:7: '|'
+            self.match(u'|')
 
 
 
@@ -1506,10 +1485,9 @@ class CLexer(Lexer):
         try:
             self.type = T83
 
-            # C.g:67:5: ( '==' )
-            # C.g:67:7: '=='
-            self.match("==")
-
+            # C.g:66:5: ( '^' )
+            # C.g:66:7: '^'
+            self.match(u'^')
 
 
 
@@ -1529,9 +1507,9 @@ class CLexer(Lexer):
         try:
             self.type = T84
 
-            # C.g:68:5: ( '!=' )
-            # C.g:68:7: '!='
-            self.match("!=")
+            # C.g:67:5: ( '==' )
+            # C.g:67:7: '=='
+            self.match("==")
 
 
 
@@ -1552,9 +1530,10 @@ class CLexer(Lexer):
         try:
             self.type = T85
 
-            # C.g:69:5: ( '<' )
-            # C.g:69:7: '<'
-            self.match(u'<')
+            # C.g:68:5: ( '!=' )
+            # C.g:68:7: '!='
+            self.match("!=")
+
 
 
 
@@ -1574,9 +1553,9 @@ class CLexer(Lexer):
         try:
             self.type = T86
 
-            # C.g:70:5: ( '>' )
-            # C.g:70:7: '>'
-            self.match(u'>')
+            # C.g:69:5: ( '<' )
+            # C.g:69:7: '<'
+            self.match(u'<')
 
 
 
@@ -1596,10 +1575,9 @@ class CLexer(Lexer):
         try:
             self.type = T87
 
-            # C.g:71:5: ( '<=' )
-            # C.g:71:7: '<='
-            self.match("<=")
-
+            # C.g:70:5: ( '>' )
+            # C.g:70:7: '>'
+            self.match(u'>')
 
 
 
@@ -1619,9 +1597,9 @@ class CLexer(Lexer):
         try:
             self.type = T88
 
-            # C.g:72:5: ( '>=' )
-            # C.g:72:7: '>='
-            self.match(">=")
+            # C.g:71:5: ( '<=' )
+            # C.g:71:7: '<='
+            self.match("<=")
 
 
 
@@ -1642,9 +1620,9 @@ class CLexer(Lexer):
         try:
             self.type = T89
 
-            # C.g:73:5: ( '<<' )
-            # C.g:73:7: '<<'
-            self.match("<<")
+            # C.g:72:5: ( '>=' )
+            # C.g:72:7: '>='
+            self.match(">=")
 
 
 
@@ -1665,9 +1643,9 @@ class CLexer(Lexer):
         try:
             self.type = T90
 
-            # C.g:74:5: ( '>>' )
-            # C.g:74:7: '>>'
-            self.match(">>")
+            # C.g:73:5: ( '<<' )
+            # C.g:73:7: '<<'
+            self.match("<<")
 
 
 
@@ -1688,9 +1666,9 @@ class CLexer(Lexer):
         try:
             self.type = T91
 
-            # C.g:75:5: ( 'case' )
-            # C.g:75:7: 'case'
-            self.match("case")
+            # C.g:74:5: ( '>>' )
+            # C.g:74:7: '>>'
+            self.match(">>")
 
 
 
@@ -1711,9 +1689,9 @@ class CLexer(Lexer):
         try:
             self.type = T92
 
-            # C.g:76:5: ( 'default' )
-            # C.g:76:7: 'default'
-            self.match("default")
+            # C.g:75:5: ( 'case' )
+            # C.g:75:7: 'case'
+            self.match("case")
 
 
 
@@ -1734,9 +1712,9 @@ class CLexer(Lexer):
         try:
             self.type = T93
 
-            # C.g:77:5: ( 'if' )
-            # C.g:77:7: 'if'
-            self.match("if")
+            # C.g:76:5: ( 'default' )
+            # C.g:76:7: 'default'
+            self.match("default")
 
 
 
@@ -1757,9 +1735,9 @@ class CLexer(Lexer):
         try:
             self.type = T94
 
-            # C.g:78:5: ( 'else' )
-            # C.g:78:7: 'else'
-            self.match("else")
+            # C.g:77:5: ( 'if' )
+            # C.g:77:7: 'if'
+            self.match("if")
 
 
 
@@ -1780,9 +1758,9 @@ class CLexer(Lexer):
         try:
             self.type = T95
 
-            # C.g:79:5: ( 'switch' )
-            # C.g:79:7: 'switch'
-            self.match("switch")
+            # C.g:78:5: ( 'else' )
+            # C.g:78:7: 'else'
+            self.match("else")
 
 
 
@@ -1803,9 +1781,9 @@ class CLexer(Lexer):
         try:
             self.type = T96
 
-            # C.g:80:5: ( 'while' )
-            # C.g:80:7: 'while'
-            self.match("while")
+            # C.g:79:5: ( 'switch' )
+            # C.g:79:7: 'switch'
+            self.match("switch")
 
 
 
@@ -1826,9 +1804,9 @@ class CLexer(Lexer):
         try:
             self.type = T97
 
-            # C.g:81:5: ( 'do' )
-            # C.g:81:7: 'do'
-            self.match("do")
+            # C.g:80:5: ( 'while' )
+            # C.g:80:7: 'while'
+            self.match("while")
 
 
 
@@ -1849,9 +1827,9 @@ class CLexer(Lexer):
         try:
             self.type = T98
 
-            # C.g:82:5: ( 'for' )
-            # C.g:82:7: 'for'
-            self.match("for")
+            # C.g:81:5: ( 'do' )
+            # C.g:81:7: 'do'
+            self.match("do")
 
 
 
@@ -1872,9 +1850,9 @@ class CLexer(Lexer):
         try:
             self.type = T99
 
-            # C.g:83:5: ( 'goto' )
-            # C.g:83:7: 'goto'
-            self.match("goto")
+            # C.g:82:5: ( 'for' )
+            # C.g:82:7: 'for'
+            self.match("for")
 
 
 
@@ -1895,9 +1873,9 @@ class CLexer(Lexer):
         try:
             self.type = T100
 
-            # C.g:84:6: ( 'continue' )
-            # C.g:84:8: 'continue'
-            self.match("continue")
+            # C.g:83:6: ( 'goto' )
+            # C.g:83:8: 'goto'
+            self.match("goto")
 
 
 
@@ -1918,9 +1896,9 @@ class CLexer(Lexer):
         try:
             self.type = T101
 
-            # C.g:85:6: ( 'break' )
-            # C.g:85:8: 'break'
-            self.match("break")
+            # C.g:84:6: ( 'continue' )
+            # C.g:84:8: 'continue'
+            self.match("continue")
 
 
 
@@ -1939,7 +1917,30 @@ class CLexer(Lexer):
     def mT102(self, ):
 
         try:
-            self.type = T102
+            self.type = T102
+
+            # C.g:85:6: ( 'break' )
+            # C.g:85:8: 'break'
+            self.match("break")
+
+
+
+
+
+
+        finally:
+
+            pass
+
+    # $ANTLR end T102
+
+
+
+    # $ANTLR start T103
+    def mT103(self, ):
+
+        try:
+            self.type = T103
 
             # C.g:86:6: ( 'return' )
             # C.g:86:8: 'return'
@@ -1954,7 +1955,7 @@ class CLexer(Lexer):
 
             pass
 
-    # $ANTLR end T102
+    # $ANTLR end T103
 
 
 
@@ -1964,11 +1965,11 @@ class CLexer(Lexer):
         try:
             self.type = IDENTIFIER
 
-            # C.g:487:2: ( LETTER ( LETTER | '0' .. '9' )* )
-            # C.g:487:4: LETTER ( LETTER | '0' .. '9' )*
+            # C.g:456:2: ( LETTER ( LETTER | '0' .. '9' )* )
+            # C.g:456:4: LETTER ( LETTER | '0' .. '9' )*
             self.mLETTER()
 
-            # C.g:487:11: ( LETTER | '0' .. '9' )*
+            # C.g:456:11: ( LETTER | '0' .. '9' )*
             while True: #loop1
                 alt1 = 2
                 LA1_0 = self.input.LA(1)
@@ -2010,7 +2011,7 @@ class CLexer(Lexer):
     def mLETTER(self, ):
 
         try:
-            # C.g:492:2: ( '$' | 'A' .. 'Z' | 'a' .. 'z' | '_' )
+            # C.g:461: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();
@@ -2039,11 +2040,11 @@ class CLexer(Lexer):
         try:
             self.type = CHARACTER_LITERAL
 
-            # C.g:499:5: ( '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' )
-            # C.g:499:9: '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\''
+            # C.g:468:5: ( '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\'' )
+            # C.g:468:9: '\\'' ( EscapeSequence | ~ ( '\\'' | '\\\\' ) ) '\\''
             self.match(u'\'')
 
-            # C.g:499:14: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )
+            # C.g:468:14: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )
             alt2 = 2
             LA2_0 = self.input.LA(1)
 
@@ -2052,18 +2053,18 @@ class CLexer(Lexer):
             elif ((u'\u0000' <= LA2_0 <= u'&') or (u'(' <= LA2_0 <= u'[') or (u']' <= LA2_0 <= u'\uFFFE')) :
                 alt2 = 2
             else:
-                nvae = NoViableAltException("499:14: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 2, 0, self.input)
+                nvae = NoViableAltException("468:14: ( EscapeSequence | ~ ( '\\'' | '\\\\' ) )", 2, 0, self.input)
 
                 raise nvae
 
             if alt2 == 1:
-                # C.g:499:16: EscapeSequence
+                # C.g:468:16: EscapeSequence
                 self.mEscapeSequence()
 
 
 
             elif alt2 == 2:
-                # C.g:499:33: ~ ( '\\'' | '\\\\' )
+                # C.g:468:33: ~ ( '\\'' | '\\\\' )
                 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();
 
@@ -2096,16 +2097,16 @@ class CLexer(Lexer):
         try:
             self.type = STRING_LITERAL
 
-            # C.g:503:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
-            # C.g:503:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
-            # C.g:503:8: ( 'L' )?
+            # C.g:472:5: ( ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"' )
+            # C.g:472:8: ( 'L' )? '\"' ( EscapeSequence | ~ ( '\\\\' | '\"' ) )* '\"'
+            # C.g:472:8: ( 'L' )?
             alt3 = 2
             LA3_0 = self.input.LA(1)
 
             if (LA3_0 == u'L') :
                 alt3 = 1
             if alt3 == 1:
-                # C.g:503:9: 'L'
+                # C.g:472:9: 'L'
                 self.match(u'L')
 
 
@@ -2113,7 +2114,7 @@ class CLexer(Lexer):
 
             self.match(u'"')
 
-            # C.g:503:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
+            # C.g:472:19: ( EscapeSequence | ~ ( '\\\\' | '\"' ) )*
             while True: #loop4
                 alt4 = 3
                 LA4_0 = self.input.LA(1)
@@ -2125,13 +2126,13 @@ class CLexer(Lexer):
 
 
                 if alt4 == 1:
-                    # C.g:503:21: EscapeSequence
+                    # C.g:472:21: EscapeSequence
                     self.mEscapeSequence()
 
 
 
                 elif alt4 == 2:
-                    # C.g:503:38: ~ ( '\\\\' | '\"' )
+                    # C.g:472: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();
 
@@ -2167,8 +2168,8 @@ class CLexer(Lexer):
         try:
             self.type = HEX_LITERAL
 
-            # C.g:506:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? )
-            # C.g:506:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )?
+            # C.g:475:13: ( '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )? )
+            # C.g:475:15: '0' ( 'x' | 'X' ) ( HexDigit )+ ( IntegerTypeSuffix )?
             self.match(u'0')
 
             if self.input.LA(1) == u'X' or self.input.LA(1) == u'x':
@@ -2180,7 +2181,7 @@ class CLexer(Lexer):
                 raise mse
 
 
-            # C.g:506:29: ( HexDigit )+
+            # C.g:475:29: ( HexDigit )+
             cnt5 = 0
             while True: #loop5
                 alt5 = 2
@@ -2191,7 +2192,7 @@ class CLexer(Lexer):
 
 
                 if alt5 == 1:
-                    # C.g:506:29: HexDigit
+                    # C.g:475:29: HexDigit
                     self.mHexDigit()
 
 
@@ -2206,14 +2207,14 @@ class CLexer(Lexer):
                 cnt5 += 1
 
 
-            # C.g:506:39: ( IntegerTypeSuffix )?
+            # C.g:475:39: ( IntegerTypeSuffix )?
             alt6 = 2
             LA6_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:506:39: IntegerTypeSuffix
+                # C.g:475:39: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2237,9 +2238,9 @@ class CLexer(Lexer):
         try:
             self.type = DECIMAL_LITERAL
 
-            # C.g:508:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? )
-            # C.g:508:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )?
-            # C.g:508:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )
+            # C.g:477:17: ( ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )? )
+            # C.g:477:19: ( '0' | '1' .. '9' ( '0' .. '9' )* ) ( IntegerTypeSuffix )?
+            # C.g:477:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )
             alt8 = 2
             LA8_0 = self.input.LA(1)
 
@@ -2248,21 +2249,21 @@ class CLexer(Lexer):
             elif ((u'1' <= LA8_0 <= u'9')) :
                 alt8 = 2
             else:
-                nvae = NoViableAltException("508:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 8, 0, self.input)
+                nvae = NoViableAltException("477:19: ( '0' | '1' .. '9' ( '0' .. '9' )* )", 8, 0, self.input)
 
                 raise nvae
 
             if alt8 == 1:
-                # C.g:508:20: '0'
+                # C.g:477:20: '0'
                 self.match(u'0')
 
 
 
             elif alt8 == 2:
-                # C.g:508:26: '1' .. '9' ( '0' .. '9' )*
+                # C.g:477:26: '1' .. '9' ( '0' .. '9' )*
                 self.matchRange(u'1', u'9')
 
-                # C.g:508:35: ( '0' .. '9' )*
+                # C.g:477:35: ( '0' .. '9' )*
                 while True: #loop7
                     alt7 = 2
                     LA7_0 = self.input.LA(1)
@@ -2272,7 +2273,7 @@ class CLexer(Lexer):
 
 
                     if alt7 == 1:
-                        # C.g:508:35: '0' .. '9'
+                        # C.g:477:35: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2284,14 +2285,14 @@ class CLexer(Lexer):
 
 
 
-            # C.g:508:46: ( IntegerTypeSuffix )?
+            # C.g:477:46: ( IntegerTypeSuffix )?
             alt9 = 2
             LA9_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:508:46: IntegerTypeSuffix
+                # C.g:477:46: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2315,11 +2316,11 @@ class CLexer(Lexer):
         try:
             self.type = OCTAL_LITERAL
 
-            # C.g:510:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? )
-            # C.g:510:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )?
+            # C.g:479:15: ( '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )? )
+            # C.g:479:17: '0' ( '0' .. '7' )+ ( IntegerTypeSuffix )?
             self.match(u'0')
 
-            # C.g:510:21: ( '0' .. '7' )+
+            # C.g:479:21: ( '0' .. '7' )+
             cnt10 = 0
             while True: #loop10
                 alt10 = 2
@@ -2330,7 +2331,7 @@ class CLexer(Lexer):
 
 
                 if alt10 == 1:
-                    # C.g:510:22: '0' .. '7'
+                    # C.g:479:22: '0' .. '7'
                     self.matchRange(u'0', u'7')
 
 
@@ -2345,14 +2346,14 @@ class CLexer(Lexer):
                 cnt10 += 1
 
 
-            # C.g:510:33: ( IntegerTypeSuffix )?
+            # C.g:479:33: ( IntegerTypeSuffix )?
             alt11 = 2
             LA11_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:510:33: IntegerTypeSuffix
+                # C.g:479:33: IntegerTypeSuffix
                 self.mIntegerTypeSuffix()
 
 
@@ -2374,8 +2375,8 @@ class CLexer(Lexer):
     def mHexDigit(self, ):
 
         try:
-            # C.g:513:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
-            # C.g:513:12: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' )
+            # C.g:482:10: ( ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) )
+            # C.g:482: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();
 
@@ -2401,7 +2402,7 @@ class CLexer(Lexer):
     def mIntegerTypeSuffix(self, ):
 
         try:
-            # C.g:517:2: ( ( 'u' | 'U' )? ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' )? )
+            # C.g:486:2: ( ( 'u' | 'U' )? ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' )? )
             alt14 = 2
             LA14_0 = self.input.LA(1)
 
@@ -2415,13 +2416,13 @@ class CLexer(Lexer):
             elif (LA14_0 == u'L' or LA14_0 == u'l') :
                 alt14 = 1
             else:
-                nvae = NoViableAltException("515:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' )? ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' )? );", 14, 0, self.input)
+                nvae = NoViableAltException("484:1: fragment IntegerTypeSuffix : ( ( 'u' | 'U' )? ( 'l' | 'L' ) | ( 'u' | 'U' ) ( 'l' | 'L' )? );", 14, 0, self.input)
 
                 raise nvae
 
             if alt14 == 1:
-                # C.g:517:4: ( 'u' | 'U' )? ( 'l' | 'L' )
-                # C.g:517:4: ( 'u' | 'U' )?
+                # C.g:486:4: ( 'u' | 'U' )? ( 'l' | 'L' )
+                # C.g:486:4: ( 'u' | 'U' )?
                 alt12 = 2
                 LA12_0 = self.input.LA(1)
 
@@ -2453,7 +2454,7 @@ class CLexer(Lexer):
 
 
             elif alt14 == 2:
-                # C.g:518:4: ( 'u' | 'U' ) ( 'l' | 'L' )?
+                # C.g:487:4: ( 'u' | 'U' ) ( 'l' | 'L' )?
                 if self.input.LA(1) == u'U' or self.input.LA(1) == u'u':
                     self.input.consume();
 
@@ -2463,7 +2464,7 @@ class CLexer(Lexer):
                     raise mse
 
 
-                # C.g:518:15: ( 'l' | 'L' )?
+                # C.g:487:15: ( 'l' | 'L' )?
                 alt13 = 2
                 LA13_0 = self.input.LA(1)
 
@@ -2500,12 +2501,12 @@ class CLexer(Lexer):
         try:
             self.type = FLOATING_POINT_LITERAL
 
-            # C.g:522:5: ( ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )? | '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )? | ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )? | ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix )
+            # C.g:491: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:522:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )?
-                # C.g:522:9: ( '0' .. '9' )+
+                # C.g:491:9: ( '0' .. '9' )+ '.' ( '0' .. '9' )* ( Exponent )? ( FloatTypeSuffix )?
+                # C.g:491:9: ( '0' .. '9' )+
                 cnt15 = 0
                 while True: #loop15
                     alt15 = 2
@@ -2516,7 +2517,7 @@ class CLexer(Lexer):
 
 
                     if alt15 == 1:
-                        # C.g:522:10: '0' .. '9'
+                        # C.g:491:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2533,7 +2534,7 @@ class CLexer(Lexer):
 
                 self.match(u'.')
 
-                # C.g:522:25: ( '0' .. '9' )*
+                # C.g:491:25: ( '0' .. '9' )*
                 while True: #loop16
                     alt16 = 2
                     LA16_0 = self.input.LA(1)
@@ -2543,7 +2544,7 @@ class CLexer(Lexer):
 
 
                     if alt16 == 1:
-                        # C.g:522:26: '0' .. '9'
+                        # C.g:491:26: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2552,27 +2553,27 @@ class CLexer(Lexer):
                         break #loop16
 
 
-                # C.g:522:37: ( Exponent )?
+                # C.g:491:37: ( Exponent )?
                 alt17 = 2
                 LA17_0 = self.input.LA(1)
 
                 if (LA17_0 == u'E' or LA17_0 == u'e') :
                     alt17 = 1
                 if alt17 == 1:
-                    # C.g:522:37: Exponent
+                    # C.g:491:37: Exponent
                     self.mExponent()
 
 
 
 
-                # C.g:522:47: ( FloatTypeSuffix )?
+                # C.g:491:47: ( FloatTypeSuffix )?
                 alt18 = 2
                 LA18_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:522:47: FloatTypeSuffix
+                    # C.g:491:47: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2581,10 +2582,10 @@ class CLexer(Lexer):
 
 
             elif alt26 == 2:
-                # C.g:523:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )?
+                # C.g:492:9: '.' ( '0' .. '9' )+ ( Exponent )? ( FloatTypeSuffix )?
                 self.match(u'.')
 
-                # C.g:523:13: ( '0' .. '9' )+
+                # C.g:492:13: ( '0' .. '9' )+
                 cnt19 = 0
                 while True: #loop19
                     alt19 = 2
@@ -2595,7 +2596,7 @@ class CLexer(Lexer):
 
 
                     if alt19 == 1:
-                        # C.g:523:14: '0' .. '9'
+                        # C.g:492:14: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2610,27 +2611,27 @@ class CLexer(Lexer):
                     cnt19 += 1
 
 
-                # C.g:523:25: ( Exponent )?
+                # C.g:492:25: ( Exponent )?
                 alt20 = 2
                 LA20_0 = self.input.LA(1)
 
                 if (LA20_0 == u'E' or LA20_0 == u'e') :
                     alt20 = 1
                 if alt20 == 1:
-                    # C.g:523:25: Exponent
+                    # C.g:492:25: Exponent
                     self.mExponent()
 
 
 
 
-                # C.g:523:35: ( FloatTypeSuffix )?
+                # C.g:492:35: ( FloatTypeSuffix )?
                 alt21 = 2
                 LA21_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:523:35: FloatTypeSuffix
+                    # C.g:492:35: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2639,8 +2640,8 @@ class CLexer(Lexer):
 
 
             elif alt26 == 3:
-                # C.g:524:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )?
-                # C.g:524:9: ( '0' .. '9' )+
+                # C.g:493:9: ( '0' .. '9' )+ Exponent ( FloatTypeSuffix )?
+                # C.g:493:9: ( '0' .. '9' )+
                 cnt22 = 0
                 while True: #loop22
                     alt22 = 2
@@ -2651,7 +2652,7 @@ class CLexer(Lexer):
 
 
                     if alt22 == 1:
-                        # C.g:524:10: '0' .. '9'
+                        # C.g:493:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2668,14 +2669,14 @@ class CLexer(Lexer):
 
                 self.mExponent()
 
-                # C.g:524:30: ( FloatTypeSuffix )?
+                # C.g:493:30: ( FloatTypeSuffix )?
                 alt23 = 2
                 LA23_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:524:30: FloatTypeSuffix
+                    # C.g:493:30: FloatTypeSuffix
                     self.mFloatTypeSuffix()
 
 
@@ -2684,8 +2685,8 @@ class CLexer(Lexer):
 
 
             elif alt26 == 4:
-                # C.g:525:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix
-                # C.g:525:9: ( '0' .. '9' )+
+                # C.g:494:9: ( '0' .. '9' )+ ( Exponent )? FloatTypeSuffix
+                # C.g:494:9: ( '0' .. '9' )+
                 cnt24 = 0
                 while True: #loop24
                     alt24 = 2
@@ -2696,7 +2697,7 @@ class CLexer(Lexer):
 
 
                     if alt24 == 1:
-                        # C.g:525:10: '0' .. '9'
+                        # C.g:494:10: '0' .. '9'
                         self.matchRange(u'0', u'9')
 
 
@@ -2711,14 +2712,14 @@ class CLexer(Lexer):
                     cnt24 += 1
 
 
-                # C.g:525:21: ( Exponent )?
+                # C.g:494:21: ( Exponent )?
                 alt25 = 2
                 LA25_0 = self.input.LA(1)
 
                 if (LA25_0 == u'E' or LA25_0 == u'e') :
                     alt25 = 1
                 if alt25 == 1:
-                    # C.g:525:21: Exponent
+                    # C.g:494:21: Exponent
                     self.mExponent()
 
 
@@ -2741,8 +2742,8 @@ class CLexer(Lexer):
     def mExponent(self, ):
 
         try:
-            # C.g:529:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )
-            # C.g:529:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
+            # C.g:498:10: ( ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+ )
+            # C.g:498:12: ( 'e' | 'E' ) ( '+' | '-' )? ( '0' .. '9' )+
             if self.input.LA(1) == u'E' or self.input.LA(1) == u'e':
                 self.input.consume();
 
@@ -2752,7 +2753,7 @@ class CLexer(Lexer):
                 raise mse
 
 
-            # C.g:529:22: ( '+' | '-' )?
+            # C.g:498:22: ( '+' | '-' )?
             alt27 = 2
             LA27_0 = self.input.LA(1)
 
@@ -2772,7 +2773,7 @@ class CLexer(Lexer):
 
 
 
-            # C.g:529:33: ( '0' .. '9' )+
+            # C.g:498:33: ( '0' .. '9' )+
             cnt28 = 0
             while True: #loop28
                 alt28 = 2
@@ -2783,7 +2784,7 @@ class CLexer(Lexer):
 
 
                 if alt28 == 1:
-                    # C.g:529:34: '0' .. '9'
+                    # C.g:498:34: '0' .. '9'
                     self.matchRange(u'0', u'9')
 
 
@@ -2814,8 +2815,8 @@ class CLexer(Lexer):
     def mFloatTypeSuffix(self, ):
 
         try:
-            # C.g:532:17: ( ( 'f' | 'F' | 'd' | 'D' ) )
-            # C.g:532:19: ( 'f' | 'F' | 'd' | 'D' )
+            # C.g:501:17: ( ( 'f' | 'F' | 'd' | 'D' ) )
+            # C.g:501: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();
 
@@ -2841,7 +2842,7 @@ class CLexer(Lexer):
     def mEscapeSequence(self, ):
 
         try:
-            # C.g:536:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape )
+            # C.g:505:5: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape )
             alt29 = 2
             LA29_0 = self.input.LA(1)
 
@@ -2853,17 +2854,17 @@ class CLexer(Lexer):
                 elif ((u'0' <= LA29_1 <= u'7')) :
                     alt29 = 2
                 else:
-                    nvae = NoViableAltException("534:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 29, 1, self.input)
+                    nvae = NoViableAltException("503:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 29, 1, self.input)
 
                     raise nvae
 
             else:
-                nvae = NoViableAltException("534:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 29, 0, self.input)
+                nvae = NoViableAltException("503:1: fragment EscapeSequence : ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' ) | OctalEscape );", 29, 0, self.input)
 
                 raise nvae
 
             if alt29 == 1:
-                # C.g:536:9: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | '\\\"' | '\\'' | '\\\\' )
+                # C.g:505:9: '\\\\' ( '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,7 +2879,7 @@ class CLexer(Lexer):
 
 
             elif alt29 == 2:
-                # C.g:537:9: OctalEscape
+                # C.g:506:9: OctalEscape
                 self.mOctalEscape()
 
 
@@ -2896,7 +2897,7 @@ class CLexer(Lexer):
     def mOctalEscape(self, ):
 
         try:
-            # C.g:542:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
+            # C.g:511:5: ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) )
             alt30 = 3
             LA30_0 = self.input.LA(1)
 
@@ -2923,35 +2924,35 @@ class CLexer(Lexer):
                     else:
                         alt30 = 3
                 else:
-                    nvae = NoViableAltException("540:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 30, 1, self.input)
+                    nvae = NoViableAltException("509:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 30, 1, self.input)
 
                     raise nvae
 
             else:
-                nvae = NoViableAltException("540:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 30, 0, self.input)
+                nvae = NoViableAltException("509:1: fragment OctalEscape : ( '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) ( '0' .. '7' ) | '\\\\' ( '0' .. '7' ) );", 30, 0, self.input)
 
                 raise nvae
 
             if alt30 == 1:
-                # C.g:542:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
+                # C.g:511:9: '\\\\' ( '0' .. '3' ) ( '0' .. '7' ) ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:542:14: ( '0' .. '3' )
-                # C.g:542:15: '0' .. '3'
+                # C.g:511:14: ( '0' .. '3' )
+                # C.g:511:15: '0' .. '3'
                 self.matchRange(u'0', u'3')
 
 
 
 
-                # C.g:542:25: ( '0' .. '7' )
-                # C.g:542:26: '0' .. '7'
+                # C.g:511:25: ( '0' .. '7' )
+                # C.g:511:26: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
 
 
-                # C.g:542:36: ( '0' .. '7' )
-                # C.g:542:37: '0' .. '7'
+                # C.g:511:36: ( '0' .. '7' )
+                # C.g:511:37: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -2960,18 +2961,18 @@ class CLexer(Lexer):
 
 
             elif alt30 == 2:
-                # C.g:543:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
+                # C.g:512:9: '\\\\' ( '0' .. '7' ) ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:543:14: ( '0' .. '7' )
-                # C.g:543:15: '0' .. '7'
+                # C.g:512:14: ( '0' .. '7' )
+                # C.g:512:15: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
 
 
-                # C.g:543:25: ( '0' .. '7' )
-                # C.g:543:26: '0' .. '7'
+                # C.g:512:25: ( '0' .. '7' )
+                # C.g:512:26: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -2980,11 +2981,11 @@ class CLexer(Lexer):
 
 
             elif alt30 == 3:
-                # C.g:544:9: '\\\\' ( '0' .. '7' )
+                # C.g:513:9: '\\\\' ( '0' .. '7' )
                 self.match(u'\\')
 
-                # C.g:544:14: ( '0' .. '7' )
-                # C.g:544:15: '0' .. '7'
+                # C.g:513:14: ( '0' .. '7' )
+                # C.g:513:15: '0' .. '7'
                 self.matchRange(u'0', u'7')
 
 
@@ -3005,8 +3006,8 @@ class CLexer(Lexer):
     def mUnicodeEscape(self, ):
 
         try:
-            # C.g:549:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
-            # C.g:549:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
+            # C.g:518:5: ( '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit )
+            # C.g:518:9: '\\\\' 'u' HexDigit HexDigit HexDigit HexDigit
             self.match(u'\\')
 
             self.match(u'u')
@@ -3037,8 +3038,8 @@ class CLexer(Lexer):
         try:
             self.type = WS
 
-            # C.g:552:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) )
-            # C.g:552:8: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' )
+            # C.g:521:5: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) )
+            # C.g:521: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();
 
@@ -3063,18 +3064,40 @@ class CLexer(Lexer):
 
 
 
+    # $ANTLR start UnicodeVocabulary
+    def mUnicodeVocabulary(self, ):
+
+        try:
+            self.type = UnicodeVocabulary
+
+            # C.g:529:5: ( '\\u0003' .. '\\uFFFE' )
+            # C.g:529:7: '\\u0003' .. '\\uFFFE'
+            self.matchRange(u'\u0003', u'\uFFFE')
+
+
+
+
+
+        finally:
+
+            pass
+
+    # $ANTLR end UnicodeVocabulary
+
+
+
     # $ANTLR start COMMENT
     def mCOMMENT(self, ):
 
         try:
             self.type = COMMENT
 
-            # C.g:556:5: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            # C.g:556:9: '/*' ( options {greedy=false; } : . )* '*/'
+            # C.g:532:5: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            # C.g:532:9: '/*' ( options {greedy=false; } : . )* '*/'
             self.match("/*")
 
 
-            # C.g:556:14: ( options {greedy=false; } : . )*
+            # C.g:532:14: ( options {greedy=false; } : . )*
             while True: #loop31
                 alt31 = 2
                 LA31_0 = self.input.LA(1)
@@ -3093,7 +3116,7 @@ class CLexer(Lexer):
 
 
                 if alt31 == 1:
-                    # C.g:556:42: .
+                    # C.g:532:42: .
                     self.matchAny()
 
 
@@ -3126,12 +3149,12 @@ 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:537:5: ( '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
+            # C.g:537:7: '//' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
             self.match("//")
 
 
-            # C.g:560:12: (~ ( '\\n' | '\\r' ) )*
+            # C.g:537:12: (~ ( '\\n' | '\\r' ) )*
             while True: #loop32
                 alt32 = 2
                 LA32_0 = self.input.LA(1)
@@ -3141,7 +3164,7 @@ class CLexer(Lexer):
 
 
                 if alt32 == 1:
-                    # C.g:560:12: ~ ( '\\n' | '\\r' )
+                    # C.g:537: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();
 
@@ -3157,14 +3180,14 @@ class CLexer(Lexer):
                     break #loop32
 
 
-            # C.g:560:26: ( '\\r' )?
+            # C.g:537:26: ( '\\r' )?
             alt33 = 2
             LA33_0 = self.input.LA(1)
 
             if (LA33_0 == u'\r') :
                 alt33 = 1
             if alt33 == 1:
-                # C.g:560:26: '\\r'
+                # C.g:537:26: '\\r'
                 self.match(u'\r')
 
 
@@ -3193,11 +3216,11 @@ 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:542:5: ( '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n' )
+            # C.g:542:7: '#' (~ ( '\\n' | '\\r' ) )* ( '\\r' )? '\\n'
             self.match(u'#')
 
-            # C.g:565:11: (~ ( '\\n' | '\\r' ) )*
+            # C.g:542:11: (~ ( '\\n' | '\\r' ) )*
             while True: #loop34
                 alt34 = 2
                 LA34_0 = self.input.LA(1)
@@ -3207,7 +3230,7 @@ class CLexer(Lexer):
 
 
                 if alt34 == 1:
-                    # C.g:565:11: ~ ( '\\n' | '\\r' )
+                    # C.g:542: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();
 
@@ -3223,14 +3246,14 @@ class CLexer(Lexer):
                     break #loop34
 
 
-            # C.g:565:25: ( '\\r' )?
+            # C.g:542:25: ( '\\r' )?
             alt35 = 2
             LA35_0 = self.input.LA(1)
 
             if (LA35_0 == u'\r') :
                 alt35 = 1
             if alt35 == 1:
-                # C.g:565:25: '\\r'
+                # C.g:542:25: '\\r'
                 self.match(u'\r')
 
 
@@ -3254,551 +3277,557 @@ class CLexer(Lexer):
 
 
     def mTokens(self):
-        # C.g:1:8: ( T23 | 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 | IDENTIFIER | CHARACTER_LITERAL | STRING_LITERAL | HEX_LITERAL | DECIMAL_LITERAL | OCTAL_LITERAL | FLOATING_POINT_LITERAL | WS | COMMENT | LINE_COMMENT | LINE_COMMAND )
-        alt36 = 91
+        # 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: T23
-            self.mT23()
+            # C.g:1:10: T24
+            self.mT24()
 
 
 
         elif alt36 == 2:
-            # C.g:1:14: T24
-            self.mT24()
+            # C.g:1:14: T25
+            self.mT25()
 
 
 
         elif alt36 == 3:
-            # C.g:1:18: T25
-            self.mT25()
+            # C.g:1:18: T26
+            self.mT26()
 
 
 
         elif alt36 == 4:
-            # C.g:1:22: T26
-            self.mT26()
+            # C.g:1:22: T27
+            self.mT27()
 
 
 
         elif alt36 == 5:
-            # C.g:1:26: T27
-            self.mT27()
+            # C.g:1:26: T28
+            self.mT28()
 
 
 
         elif alt36 == 6:
-            # C.g:1:30: T28
-            self.mT28()
+            # C.g:1:30: T29
+            self.mT29()
 
 
 
         elif alt36 == 7:
-            # C.g:1:34: T29
-            self.mT29()
+            # C.g:1:34: T30
+            self.mT30()
 
 
 
         elif alt36 == 8:
-            # C.g:1:38: T30
-            self.mT30()
+            # C.g:1:38: T31
+            self.mT31()
 
 
 
         elif alt36 == 9:
-            # C.g:1:42: T31
-            self.mT31()
+            # C.g:1:42: T32
+            self.mT32()
 
 
 
         elif alt36 == 10:
-            # C.g:1:46: T32
-            self.mT32()
+            # C.g:1:46: T33
+            self.mT33()
 
 
 
         elif alt36 == 11:
-            # C.g:1:50: T33
-            self.mT33()
+            # C.g:1:50: T34
+            self.mT34()
 
 
 
         elif alt36 == 12:
-            # C.g:1:54: T34
-            self.mT34()
+            # C.g:1:54: T35
+            self.mT35()
 
 
 
         elif alt36 == 13:
-            # C.g:1:58: T35
-            self.mT35()
+            # C.g:1:58: T36
+            self.mT36()
 
 
 
         elif alt36 == 14:
-            # C.g:1:62: T36
-            self.mT36()
+            # C.g:1:62: T37
+            self.mT37()
 
 
 
         elif alt36 == 15:
-            # C.g:1:66: T37
-            self.mT37()
+            # C.g:1:66: T38
+            self.mT38()
 
 
 
         elif alt36 == 16:
-            # C.g:1:70: T38
-            self.mT38()
+            # C.g:1:70: T39
+            self.mT39()
 
 
 
         elif alt36 == 17:
-            # C.g:1:74: T39
-            self.mT39()
+            # C.g:1:74: T40
+            self.mT40()
 
 
 
         elif alt36 == 18:
-            # C.g:1:78: T40
-            self.mT40()
+            # C.g:1:78: T41
+            self.mT41()
 
 
 
         elif alt36 == 19:
-            # C.g:1:82: T41
-            self.mT41()
+            # C.g:1:82: T42
+            self.mT42()
 
 
 
         elif alt36 == 20:
-            # C.g:1:86: T42
-            self.mT42()
+            # C.g:1:86: T43
+            self.mT43()
 
 
 
         elif alt36 == 21:
-            # C.g:1:90: T43
-            self.mT43()
+            # C.g:1:90: T44
+            self.mT44()
 
 
 
         elif alt36 == 22:
-            # C.g:1:94: T44
-            self.mT44()
+            # C.g:1:94: T45
+            self.mT45()
 
 
 
         elif alt36 == 23:
-            # C.g:1:98: T45
-            self.mT45()
+            # C.g:1:98: T46
+            self.mT46()
 
 
 
         elif alt36 == 24:
-            # C.g:1:102: T46
-            self.mT46()
+            # C.g:1:102: T47
+            self.mT47()
 
 
 
         elif alt36 == 25:
-            # C.g:1:106: T47
-            self.mT47()
+            # C.g:1:106: T48
+            self.mT48()
 
 
 
         elif alt36 == 26:
-            # C.g:1:110: T48
-            self.mT48()
+            # C.g:1:110: T49
+            self.mT49()
 
 
 
         elif alt36 == 27:
-            # C.g:1:114: T49
-            self.mT49()
+            # C.g:1:114: T50
+            self.mT50()
 
 
 
         elif alt36 == 28:
-            # C.g:1:118: T50
-            self.mT50()
+            # C.g:1:118: T51
+            self.mT51()
 
 
 
         elif alt36 == 29:
-            # C.g:1:122: T51
-            self.mT51()
+            # C.g:1:122: T52
+            self.mT52()
 
 
 
         elif alt36 == 30:
-            # C.g:1:126: T52
-            self.mT52()
+            # C.g:1:126: T53
+            self.mT53()
 
 
 
         elif alt36 == 31:
-            # C.g:1:130: T53
-            self.mT53()
+            # C.g:1:130: T54
+            self.mT54()
 
 
 
         elif alt36 == 32:
-            # C.g:1:134: T54
-            self.mT54()
+            # C.g:1:134: T55
+            self.mT55()
 
 
 
         elif alt36 == 33:
-            # C.g:1:138: T55
-            self.mT55()
+            # C.g:1:138: T56
+            self.mT56()
 
 
 
         elif alt36 == 34:
-            # C.g:1:142: T56
-            self.mT56()
+            # C.g:1:142: T57
+            self.mT57()
 
 
 
         elif alt36 == 35:
-            # C.g:1:146: T57
-            self.mT57()
+            # C.g:1:146: T58
+            self.mT58()
 
 
 
         elif alt36 == 36:
-            # C.g:1:150: T58
-            self.mT58()
+            # C.g:1:150: T59
+            self.mT59()
 
 
 
         elif alt36 == 37:
-            # C.g:1:154: T59
-            self.mT59()
+            # C.g:1:154: T60
+            self.mT60()
 
 
 
         elif alt36 == 38:
-            # C.g:1:158: T60
-            self.mT60()
+            # C.g:1:158: T61
+            self.mT61()
 
 
 
         elif alt36 == 39:
-            # C.g:1:162: T61
-            self.mT61()
+            # C.g:1:162: T62
+            self.mT62()
 
 
 
         elif alt36 == 40:
-            # C.g:1:166: T62
-            self.mT62()
+            # C.g:1:166: T63
+            self.mT63()
 
 
 
         elif alt36 == 41:
-            # C.g:1:170: T63
-            self.mT63()
+            # C.g:1:170: T64
+            self.mT64()
 
 
 
         elif alt36 == 42:
-            # C.g:1:174: T64
-            self.mT64()
+            # C.g:1:174: T65
+            self.mT65()
 
 
 
         elif alt36 == 43:
-            # C.g:1:178: T65
-            self.mT65()
+            # C.g:1:178: T66
+            self.mT66()
 
 
 
         elif alt36 == 44:
-            # C.g:1:182: T66
-            self.mT66()
+            # C.g:1:182: T67
+            self.mT67()
 
 
 
         elif alt36 == 45:
-            # C.g:1:186: T67
-            self.mT67()
+            # C.g:1:186: T68
+            self.mT68()
 
 
 
         elif alt36 == 46:
-            # C.g:1:190: T68
-            self.mT68()
+            # C.g:1:190: T69
+            self.mT69()
 
 
 
         elif alt36 == 47:
-            # C.g:1:194: T69
-            self.mT69()
+            # C.g:1:194: T70
+            self.mT70()
 
 
 
         elif alt36 == 48:
-            # C.g:1:198: T70
-            self.mT70()
+            # C.g:1:198: T71
+            self.mT71()
 
 
 
         elif alt36 == 49:
-            # C.g:1:202: T71
-            self.mT71()
+            # C.g:1:202: T72
+            self.mT72()
 
 
 
         elif alt36 == 50:
-            # C.g:1:206: T72
-            self.mT72()
+            # C.g:1:206: T73
+            self.mT73()
 
 
 
         elif alt36 == 51:
-            # C.g:1:210: T73
-            self.mT73()
+            # C.g:1:210: T74
+            self.mT74()
 
 
 
         elif alt36 == 52:
-            # C.g:1:214: T74
-            self.mT74()
+            # C.g:1:214: T75
+            self.mT75()
 
 
 
         elif alt36 == 53:
-            # C.g:1:218: T75
-            self.mT75()
+            # C.g:1:218: T76
+            self.mT76()
 
 
 
         elif alt36 == 54:
-            # C.g:1:222: T76
-            self.mT76()
+            # C.g:1:222: T77
+            self.mT77()
 
 
 
         elif alt36 == 55:
-            # C.g:1:226: T77
-            self.mT77()
+            # C.g:1:226: T78
+            self.mT78()
 
 
 
         elif alt36 == 56:
-            # C.g:1:230: T78
-            self.mT78()
+            # C.g:1:230: T79
+            self.mT79()
 
 
 
         elif alt36 == 57:
-            # C.g:1:234: T79
-            self.mT79()
+            # C.g:1:234: T80
+            self.mT80()
 
 
 
         elif alt36 == 58:
-            # C.g:1:238: T80
-            self.mT80()
+            # C.g:1:238: T81
+            self.mT81()
 
 
 
         elif alt36 == 59:
-            # C.g:1:242: T81
-            self.mT81()
+            # C.g:1:242: T82
+            self.mT82()
 
 
 
         elif alt36 == 60:
-            # C.g:1:246: T82
-            self.mT82()
+            # C.g:1:246: T83
+            self.mT83()
 
 
 
         elif alt36 == 61:
-            # C.g:1:250: T83
-            self.mT83()
+            # C.g:1:250: T84
+            self.mT84()
 
 
 
         elif alt36 == 62:
-            # C.g:1:254: T84
-            self.mT84()
+            # C.g:1:254: T85
+            self.mT85()
 
 
 
         elif alt36 == 63:
-            # C.g:1:258: T85
-            self.mT85()
+            # C.g:1:258: T86
+            self.mT86()
 
 
 
         elif alt36 == 64:
-            # C.g:1:262: T86
-            self.mT86()
+            # C.g:1:262: T87
+            self.mT87()
 
 
 
         elif alt36 == 65:
-            # C.g:1:266: T87
-            self.mT87()
+            # C.g:1:266: T88
+            self.mT88()
 
 
 
         elif alt36 == 66:
-            # C.g:1:270: T88
-            self.mT88()
+            # C.g:1:270: T89
+            self.mT89()
 
 
 
         elif alt36 == 67:
-            # C.g:1:274: T89
-            self.mT89()
+            # C.g:1:274: T90
+            self.mT90()
 
 
 
         elif alt36 == 68:
-            # C.g:1:278: T90
-            self.mT90()
+            # C.g:1:278: T91
+            self.mT91()
 
 
 
         elif alt36 == 69:
-            # C.g:1:282: T91
-            self.mT91()
+            # C.g:1:282: T92
+            self.mT92()
 
 
 
         elif alt36 == 70:
-            # C.g:1:286: T92
-            self.mT92()
+            # C.g:1:286: T93
+            self.mT93()
 
 
 
         elif alt36 == 71:
-            # C.g:1:290: T93
-            self.mT93()
+            # C.g:1:290: T94
+            self.mT94()
 
 
 
         elif alt36 == 72:
-            # C.g:1:294: T94
-            self.mT94()
+            # C.g:1:294: T95
+            self.mT95()
 
 
 
         elif alt36 == 73:
-            # C.g:1:298: T95
-            self.mT95()
+            # C.g:1:298: T96
+            self.mT96()
 
 
 
         elif alt36 == 74:
-            # C.g:1:302: T96
-            self.mT96()
+            # C.g:1:302: T97
+            self.mT97()
 
 
 
         elif alt36 == 75:
-            # C.g:1:306: T97
-            self.mT97()
+            # C.g:1:306: T98
+            self.mT98()
 
 
 
         elif alt36 == 76:
-            # C.g:1:310: T98
-            self.mT98()
+            # C.g:1:310: T99
+            self.mT99()
 
 
 
         elif alt36 == 77:
-            # C.g:1:314: T99
-            self.mT99()
+            # C.g:1:314: T100
+            self.mT100()
 
 
 
         elif alt36 == 78:
-            # C.g:1:318: T100
-            self.mT100()
+            # C.g:1:319: T101
+            self.mT101()
 
 
 
         elif alt36 == 79:
-            # C.g:1:323: T101
-            self.mT101()
+            # C.g:1:324: T102
+            self.mT102()
 
 
 
         elif alt36 == 80:
-            # C.g:1:328: T102
-            self.mT102()
+            # C.g:1:329: T103
+            self.mT103()
 
 
 
         elif alt36 == 81:
-            # C.g:1:333: IDENTIFIER
+            # C.g:1:334: IDENTIFIER
             self.mIDENTIFIER()
 
 
 
         elif alt36 == 82:
-            # C.g:1:344: CHARACTER_LITERAL
+            # C.g:1:345: CHARACTER_LITERAL
             self.mCHARACTER_LITERAL()
 
 
 
         elif alt36 == 83:
-            # C.g:1:362: STRING_LITERAL
+            # C.g:1:363: STRING_LITERAL
             self.mSTRING_LITERAL()
 
 
 
         elif alt36 == 84:
-            # C.g:1:377: HEX_LITERAL
+            # C.g:1:378: HEX_LITERAL
             self.mHEX_LITERAL()
 
 
 
         elif alt36 == 85:
-            # C.g:1:389: DECIMAL_LITERAL
+            # C.g:1:390: DECIMAL_LITERAL
             self.mDECIMAL_LITERAL()
 
 
 
         elif alt36 == 86:
-            # C.g:1:405: OCTAL_LITERAL
+            # C.g:1:406: OCTAL_LITERAL
             self.mOCTAL_LITERAL()
 
 
 
         elif alt36 == 87:
-            # C.g:1:419: FLOATING_POINT_LITERAL
+            # C.g:1:420: FLOATING_POINT_LITERAL
             self.mFLOATING_POINT_LITERAL()
 
 
 
         elif alt36 == 88:
-            # C.g:1:442: WS
+            # C.g:1:443: WS
             self.mWS()
 
 
 
         elif alt36 == 89:
-            # C.g:1:445: COMMENT
-            self.mCOMMENT()
+            # C.g:1:446: UnicodeVocabulary
+            self.mUnicodeVocabulary()
 
 
 
         elif alt36 == 90:
-            # C.g:1:453: LINE_COMMENT
-            self.mLINE_COMMENT()
+            # C.g:1:464: COMMENT
+            self.mCOMMENT()
 
 
 
         elif alt36 == 91:
-            # C.g:1:466: LINE_COMMAND
+            # C.g:1:472: LINE_COMMENT
+            self.mLINE_COMMENT()
+
+
+
+        elif alt36 == 92:
+            # C.g:1:485: LINE_COMMAND
             self.mLINE_COMMAND()
 
 
@@ -3819,15 +3848,15 @@ class CLexer(Lexer):
         )
 
     DFA26_min = DFA.unpack(
-        u"\2\56\1\uffff\1\53\2\uffff\2\60\2\uffff"
+        u"\2\56\2\uffff\1\53\1\uffff\2\60\2\uffff"
         )
 
     DFA26_max = DFA.unpack(
-        u"\1\71\1\146\1\uffff\1\71\2\uffff\1\71\1\146\2\uffff"
+        u"\1\71\1\146\2\uffff\1\71\1\uffff\1\71\1\146\2\uffff"
         )
 
     DFA26_accept = DFA.unpack(
-        u"\2\uffff\1\2\1\uffff\1\4\1\1\2\uffff\2\3"
+        u"\2\uffff\1\2\1\1\1\uffff\1\4\2\uffff\2\3"
         )
 
     DFA26_special = DFA.unpack(
@@ -3837,11 +3866,11 @@ class CLexer(Lexer):
             
     DFA26_transition = [
         DFA.unpack(u"\1\2\1\uffff\12\1"),
-        DFA.unpack(u"\1\5\1\uffff\12\1\12\uffff\1\4\1\3\1\4\35\uffff\1\4"
-        u"\1\3\1\4"),
+        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"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\6\1\uffff\1\6\2\uffff\12\7"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\6\1\uffff\1\6\2\uffff\12\7"),
         DFA.unpack(u""),
         DFA.unpack(u"\12\7"),
         DFA.unpack(u"\12\7\12\uffff\1\11\1\uffff\1\11\35\uffff\1\11\1\uffff"
@@ -3856,181 +3885,187 @@ class CLexer(Lexer):
     # lookup tables for DFA #36
 
     DFA36_eot = DFA.unpack(
-        u"\1\uffff\1\54\2\uffff\1\64\13\54\3\uffff\2\54\4\uffff\1\115\1\117"
-        u"\1\123\1\127\1\133\1\135\1\140\1\uffff\1\142\1\145\1\150\1\152"
-        u"\1\155\1\uffff\4\54\3\uffff\2\163\2\uffff\1\54\2\uffff\16\54\1"
-        u"\u0088\3\54\1\u008d\2\54\1\u0091\1\54\27\uffff\1\u0094\2\uffff"
-        u"\1\u0096\7\uffff\3\54\1\uffff\1\u009a\1\uffff\1\163\22\54\1\u00ae"
-        u"\1\uffff\1\54\1\u00b0\2\54\1\uffff\3\54\1\uffff\1\u00b6\4\uffff"
-        u"\3\54\1\uffff\1\54\1\u00bb\1\54\1\u00bd\6\54\1\u00c4\2\54\1\u00c7"
-        u"\1\54\1\u00c9\1\u00ca\2\54\1\uffff\1\u00cd\1\uffff\5\54\1\uffff"
-        u"\1\54\1\u00d4\2\54\1\uffff\1\54\1\uffff\5\54\1\u00dd\1\uffff\2"
-        u"\54\1\uffff\1\54\2\uffff\1\u00e1\1\54\1\uffff\1\u00e3\2\54\1\u00e6"
-        u"\1\54\1\u00e8\1\uffff\1\u00e9\1\54\1\u00eb\1\u00ec\1\u00ed\1\u00ee"
-        u"\1\u00ef\1\u00f0\1\uffff\1\u00f1\2\54\1\uffff\1\54\1\uffff\1\u00f5"
-        u"\1\54\1\uffff\1\54\2\uffff\1\u00f8\7\uffff\3\54\1\uffff\1\u00fc"
-        u"\1\54\1\uffff\1\u00fe\1\u00ff\1\u0100\1\uffff\1\u0101\4\uffff"
+        u"\1\uffff\1\64\2\uffff\1\70\13\64\3\uffff\2\64\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\64\1\62\1\uffff\1\62\2\u0081\1\uffff\1\62\1\uffff"
+        u"\1\64\5\uffff\15\64\1\u0098\4\64\1\u009e\2\64\3\uffff\1\u00a2\1"
+        u"\64\34\uffff\1\u00a5\2\uffff\1\u00a7\10\uffff\3\64\4\uffff\1\u00ab"
+        u"\1\u0081\2\uffff\22\64\1\uffff\1\u00bf\2\64\1\u00c2\1\64\1\uffff"
+        u"\3\64\1\uffff\1\u00c7\4\uffff\3\64\1\uffff\1\64\1\u00cc\1\64\1"
+        u"\u00ce\6\64\1\u00d5\2\64\1\u00d8\3\64\1\u00dc\1\u00dd\1\uffff\1"
+        u"\u00de\1\64\1\uffff\4\64\1\uffff\1\64\1\u00e5\2\64\1\uffff\1\64"
+        u"\1\uffff\4\64\1\u00ed\1\64\1\uffff\2\64\1\uffff\2\64\1\u00f3\3"
+        u"\uffff\1\u00f4\2\64\1\u00f7\1\64\1\u00f9\1\uffff\1\u00fa\1\64\1"
+        u"\u00fc\1\u00fd\1\u00fe\1\u00ff\1\u0100\1\uffff\1\u0101\1\u0102"
+        u"\3\64\2\uffff\1\u0106\1\64\1\uffff\1\64\2\uffff\1\u0109\7\uffff"
+        u"\3\64\1\uffff\1\u010d\1\64\1\uffff\1\u010f\1\u0110\1\u0111\1\uffff"
+        u"\1\u0112\4\uffff"
         )
 
     DFA36_eof = DFA.unpack(
-        u"\u0102\uffff"
+        u"\u0113\uffff"
         )
 
     DFA36_min = DFA.unpack(
-        u"\1\11\1\171\2\uffff\1\75\1\154\1\150\1\165\1\145\1\157\1\141\1"
-        u"\146\1\157\1\154\1\145\1\156\3\uffff\1\116\1\125\4\uffff\1\75\1"
-        u"\56\1\53\1\55\1\52\1\75\1\46\1\uffff\1\75\1\74\3\75\1\uffff\1\150"
-        u"\1\157\1\162\1\42\3\uffff\2\56\2\uffff\1\160\2\uffff\1\165\1\164"
-        u"\1\163\1\147\1\141\1\151\1\157\1\164\1\147\1\151\1\141\1\163\1"
-        u"\156\1\164\1\44\1\156\1\162\1\157\1\44\1\146\1\151\1\44\1\124\27"
-        u"\uffff\1\75\2\uffff\1\75\7\uffff\1\151\1\164\1\145\1\uffff\1\56"
-        u"\1\uffff\1\56\1\145\1\155\3\145\1\156\1\164\1\165\1\164\1\162\1"
-        u"\157\1\165\1\151\1\144\1\141\1\162\1\145\1\163\1\44\1\uffff\1\147"
-        u"\1\44\1\141\1\142\1\uffff\1\141\1\157\1\151\1\uffff\1\44\4\uffff"
-        u"\1\154\1\157\1\141\1\uffff\1\144\1\44\1\162\1\44\1\157\1\145\1"
-        u"\151\2\143\1\164\1\44\1\162\1\163\1\44\1\164\2\44\1\164\1\151\1"
-        u"\uffff\1\44\1\uffff\1\164\1\154\1\165\1\156\1\147\1\uffff\1\145"
-        u"\1\44\1\153\1\145\1\uffff\1\156\1\uffff\1\146\1\144\1\143\1\164"
-        u"\1\150\1\44\1\uffff\1\156\1\164\1\uffff\1\151\2\uffff\1\44\1\156"
-        u"\1\uffff\1\44\1\145\1\154\1\44\1\156\1\44\1\uffff\1\44\1\146\6"
-        u"\44\1\uffff\1\44\1\145\1\154\1\uffff\1\165\1\uffff\1\44\1\164\1"
-        u"\uffff\1\145\2\uffff\1\44\7\uffff\1\162\2\145\1\uffff\1\44\1\144"
-        u"\1\uffff\3\44\1\uffff\1\44\4\uffff"
+        u"\1\3\1\171\2\uffff\1\75\1\154\1\150\1\165\1\145\1\157\1\141\1\146"
+        u"\1\157\1\154\1\145\1\156\3\uffff\1\116\1\125\4\uffff\1\75\1\56"
+        u"\1\53\1\55\1\52\1\75\1\46\1\uffff\1\75\1\74\3\75\1\uffff\1\150"
+        u"\1\157\1\162\1\42\1\0\1\uffff\1\0\2\56\1\uffff\1\0\1\uffff\1\160"
+        u"\5\uffff\1\165\1\164\1\163\1\147\1\141\1\157\1\151\1\164\1\147"
+        u"\1\151\1\156\1\163\1\141\1\44\1\164\1\156\1\157\1\162\1\44\1\146"
+        u"\1\151\3\uffff\1\44\1\124\34\uffff\1\75\2\uffff\1\75\10\uffff\1"
+        u"\151\1\164\1\145\4\uffff\2\56\2\uffff\1\145\1\155\3\145\1\156\1"
+        u"\164\1\165\1\162\1\164\1\157\1\165\1\151\1\144\1\141\1\163\1\145"
+        u"\1\162\1\uffff\1\44\1\147\1\141\1\44\1\142\1\uffff\1\141\1\157"
+        u"\1\151\1\uffff\1\44\4\uffff\1\154\1\157\1\141\1\uffff\1\144\1\44"
+        u"\1\162\1\44\1\157\1\145\1\151\1\143\1\164\1\143\1\44\1\162\1\163"
+        u"\1\44\1\164\1\151\1\164\2\44\1\uffff\1\44\1\164\1\uffff\1\154\1"
+        u"\165\1\156\1\147\1\uffff\1\145\1\44\1\153\1\145\1\uffff\1\156\1"
+        u"\uffff\1\146\1\144\1\143\1\164\1\44\1\150\1\uffff\1\156\1\164\1"
+        u"\uffff\1\151\1\156\1\44\3\uffff\1\44\1\145\1\154\1\44\1\156\1\44"
+        u"\1\uffff\1\44\1\146\5\44\1\uffff\2\44\1\145\1\154\1\165\2\uffff"
+        u"\1\44\1\164\1\uffff\1\145\2\uffff\1\44\7\uffff\1\162\2\145\1\uffff"
+        u"\1\44\1\144\1\uffff\3\44\1\uffff\1\44\4\uffff"
         )
 
     DFA36_max = DFA.unpack(
-        u"\1\176\1\171\2\uffff\1\75\1\170\1\167\1\165\1\145\2\157\1\156\3"
-        u"\157\1\156\3\uffff\1\116\1\125\4\uffff\1\75\1\71\1\75\1\76\3\75"
-        u"\1\uffff\2\75\1\76\1\75\1\174\1\uffff\1\150\1\157\1\162\1\42\3"
-        u"\uffff\1\170\1\146\2\uffff\1\160\2\uffff\1\165\1\164\1\163\1\172"
-        u"\1\162\1\151\1\157\2\164\1\154\1\141\1\163\1\156\1\164\1\172\1"
-        u"\156\1\162\1\157\1\172\1\146\1\163\1\172\1\124\27\uffff\1\75\2"
-        u"\uffff\1\75\7\uffff\1\151\1\164\1\145\1\uffff\1\146\1\uffff\1\146"
-        u"\1\145\1\155\3\145\1\156\1\164\1\165\1\164\1\162\1\157\1\165\1"
-        u"\151\1\144\1\141\1\162\1\145\1\164\1\172\1\uffff\1\147\1\172\1"
-        u"\141\1\142\1\uffff\1\141\1\157\1\151\1\uffff\1\172\4\uffff\1\154"
-        u"\1\157\1\141\1\uffff\1\144\1\172\1\162\1\172\1\157\1\145\1\151"
-        u"\2\143\1\164\1\172\1\162\1\163\1\172\1\164\2\172\1\164\1\151\1"
-        u"\uffff\1\172\1\uffff\1\164\1\154\1\165\1\156\1\147\1\uffff\1\145"
-        u"\1\172\1\153\1\145\1\uffff\1\156\1\uffff\1\146\1\144\1\143\1\164"
-        u"\1\150\1\172\1\uffff\1\156\1\164\1\uffff\1\151\2\uffff\1\172\1"
-        u"\156\1\uffff\1\172\1\145\1\154\1\172\1\156\1\172\1\uffff\1\172"
-        u"\1\146\6\172\1\uffff\1\172\1\145\1\154\1\uffff\1\165\1\uffff\1"
-        u"\172\1\164\1\uffff\1\145\2\uffff\1\172\7\uffff\1\162\2\145\1\uffff"
-        u"\1\172\1\144\1\uffff\3\172\1\uffff\1\172\4\uffff"
+        u"\1\ufffe\1\171\2\uffff\1\75\1\170\1\167\1\165\1\145\2\157\1\156"
+        u"\3\157\1\156\3\uffff\1\116\1\125\4\uffff\1\75\1\71\1\75\1\76\3"
+        u"\75\1\uffff\2\75\1\76\1\75\1\174\1\uffff\1\150\1\157\1\162\1\42"
+        u"\1\ufffe\1\uffff\1\ufffe\1\170\1\146\1\uffff\1\ufffe\1\uffff\1"
+        u"\160\5\uffff\1\165\1\164\1\163\1\172\1\162\1\157\1\151\2\164\1"
+        u"\154\1\156\1\163\1\141\1\172\1\164\1\156\1\157\1\162\1\172\1\146"
+        u"\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"
         )
 
     DFA36_accept = DFA.unpack(
         u"\2\uffff\1\2\1\3\14\uffff\1\22\1\23\1\26\2\uffff\1\34\1\35\1\36"
-        u"\1\37\7\uffff\1\54\5\uffff\1\70\4\uffff\1\122\1\121\1\123\2\uffff"
-        u"\1\130\1\133\1\uffff\1\75\1\4\27\uffff\1\56\1\40\1\41\1\51\1\127"
-        u"\1\46\1\61\1\42\1\52\1\47\1\62\1\43\1\57\1\132\1\131\1\44\1\60"
-        u"\1\45\1\65\1\72\1\53\1\76\1\55\1\uffff\1\101\1\77\1\uffff\1\102"
-        u"\1\100\1\66\1\74\1\71\1\67\1\73\3\uffff\1\124\1\uffff\1\125\24"
-        u"\uffff\1\107\4\uffff\1\113\3\uffff\1\32\1\uffff\1\63\1\103\1\64"
-        u"\1\104\3\uffff\1\126\23\uffff\1\14\1\uffff\1\114\5\uffff\1\33\4"
-        u"\uffff\1\27\1\uffff\1\110\6\uffff\1\7\2\uffff\1\11\1\uffff\1\12"
-        u"\1\105\2\uffff\1\15\6\uffff\1\115\10\uffff\1\13\3\uffff\1\30\1"
-        u"\uffff\1\16\2\uffff\1\25\1\uffff\1\112\1\117\1\uffff\1\5\1\50\1"
+        u"\1\37\7\uffff\1\54\5\uffff\1\70\5\uffff\1\121\3\uffff\1\130\1\uffff"
+        u"\1\131\1\uffff\1\121\1\2\1\3\1\75\1\4\25\uffff\1\22\1\23\1\26\2"
+        u"\uffff\1\34\1\35\1\36\1\37\1\56\1\40\1\41\1\51\1\127\1\46\1\61"
+        u"\1\42\1\62\1\52\1\47\1\43\1\57\1\132\1\133\1\44\1\60\1\45\1\72"
+        u"\1\65\1\53\1\54\1\76\1\55\1\uffff\1\101\1\77\1\uffff\1\102\1\100"
+        u"\1\66\1\74\1\67\1\71\1\73\1\70\3\uffff\1\123\1\122\1\124\1\125"
+        u"\2\uffff\1\130\1\134\22\uffff\1\107\5\uffff\1\113\3\uffff\1\32"
+        u"\1\uffff\1\63\1\103\1\64\1\104\3\uffff\1\126\23\uffff\1\14\2\uffff"
+        u"\1\114\4\uffff\1\33\4\uffff\1\27\1\uffff\1\110\6\uffff\1\7\2\uffff"
+        u"\1\11\3\uffff\1\105\1\12\1\15\6\uffff\1\115\7\uffff\1\13\5\uffff"
+        u"\1\30\1\16\2\uffff\1\25\1\uffff\1\112\1\117\1\uffff\1\5\1\50\1"
         u"\20\1\6\1\24\1\111\1\120\3\uffff\1\17\2\uffff\1\1\3\uffff\1\106"
         u"\1\uffff\1\10\1\31\1\116\1\21"
         )
 
     DFA36_special = DFA.unpack(
-        u"\u0102\uffff"
+        u"\u0113\uffff"
         )
 
             
     DFA36_transition = [
-        DFA.unpack(u"\2\60\1\uffff\2\60\22\uffff\1\60\1\41\1\55\1\61\1\54"
+        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\2\1\42\1\4\1\43\1\46\1\uffff\10\54\1\23\2\54\1\52\2"
-        u"\54\1\24\13\54\1\27\1\uffff\1\30\1\44\1\54\1\uffff\1\7\1\51\1\12"
-        u"\1\16\1\5\1\15\1\50\1\54\1\13\2\54\1\14\5\54\1\10\1\6\1\1\1\17"
-        u"\1\11\1\47\3\54\1\20\1\45\1\21\1\40"),
-        DFA.unpack(u"\1\62"),
+        u"\57\1\22\1\2\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\1\1\17\1\11\1"
+        u"\47\3\54\1\20\1\45\1\21\1\40\uff80\62"),
+        DFA.unpack(u"\1\63"),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\63"),
-        DFA.unpack(u"\1\67\1\uffff\1\65\11\uffff\1\66"),
-        DFA.unpack(u"\1\73\1\70\12\uffff\1\71\2\uffff\1\72"),
-        DFA.unpack(u"\1\74"),
-        DFA.unpack(u"\1\75"),
-        DFA.unpack(u"\1\76"),
-        DFA.unpack(u"\1\100\6\uffff\1\77\6\uffff\1\101"),
-        DFA.unpack(u"\1\103\7\uffff\1\102"),
-        DFA.unpack(u"\1\104"),
-        DFA.unpack(u"\1\106\2\uffff\1\105"),
-        DFA.unpack(u"\1\110\11\uffff\1\107"),
-        DFA.unpack(u"\1\111"),
+        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""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\112"),
-        DFA.unpack(u"\1\113"),
+        DFA.unpack(u"\1\121"),
+        DFA.unpack(u"\1\122"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\114"),
-        DFA.unpack(u"\1\116\1\uffff\12\120"),
-        DFA.unpack(u"\1\121\21\uffff\1\122"),
-        DFA.unpack(u"\1\125\17\uffff\1\126\1\124"),
-        DFA.unpack(u"\1\132\4\uffff\1\131\15\uffff\1\130"),
-        DFA.unpack(u"\1\134"),
-        DFA.unpack(u"\1\137\26\uffff\1\136"),
+        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\141"),
-        DFA.unpack(u"\1\143\1\144"),
-        DFA.unpack(u"\1\147\1\146"),
-        DFA.unpack(u"\1\151"),
-        DFA.unpack(u"\1\154\76\uffff\1\153"),
+        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""),
-        DFA.unpack(u"\1\156"),
-        DFA.unpack(u"\1\157"),
-        DFA.unpack(u"\1\160"),
-        DFA.unpack(u"\1\55"),
+        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""),
+        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""),
+        DFA.unpack(u"\uffff\u0085"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\u0086"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\120\1\uffff\10\162\2\120\12\uffff\3\120\21\uffff"
-        u"\1\161\13\uffff\3\120\21\uffff\1\161"),
-        DFA.unpack(u"\1\120\1\uffff\12\164\12\uffff\3\120\35\uffff\3\120"),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\165"),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\166"),
-        DFA.unpack(u"\1\167"),
-        DFA.unpack(u"\1\170"),
-        DFA.unpack(u"\1\172\22\uffff\1\171"),
-        DFA.unpack(u"\1\173\20\uffff\1\174"),
-        DFA.unpack(u"\1\175"),
-        DFA.unpack(u"\1\176"),
-        DFA.unpack(u"\1\177"),
-        DFA.unpack(u"\1\u0081\14\uffff\1\u0080"),
-        DFA.unpack(u"\1\u0082\2\uffff\1\u0083"),
-        DFA.unpack(u"\1\u0084"),
-        DFA.unpack(u"\1\u0085"),
-        DFA.unpack(u"\1\u0086"),
         DFA.unpack(u"\1\u0087"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u"\1\u0088"),
         DFA.unpack(u"\1\u0089"),
-        DFA.unpack(u"\1\u008a"),
-        DFA.unpack(u"\1\u008b"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\24\54\1\u008c\5\54"),
+        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\11\uffff\1\u0090"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\u0092"),
-        DFA.unpack(u""),
+        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\u0097"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\u0099"),
+        DFA.unpack(u"\1\u009a"),
+        DFA.unpack(u"\1\u009b"),
+        DFA.unpack(u"\1\u009c"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\24\64\1\u009d\5\64"),
+        DFA.unpack(u"\1\u009f"),
+        DFA.unpack(u"\1\u00a0\11\uffff\1\u00a1"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\u00a3"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
@@ -4050,10 +4085,8 @@ class CLexer(Lexer):
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u0093"),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u0095"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
@@ -4061,182 +4094,198 @@ class CLexer(Lexer):
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u0097"),
-        DFA.unpack(u"\1\u0098"),
-        DFA.unpack(u"\1\u0099"),
+        DFA.unpack(u"\1\u00a4"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\120\1\uffff\10\162\2\120\12\uffff\3\120\35\uffff"
-        u"\3\120"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\120\1\uffff\12\164\12\uffff\3\120\35\uffff\3\120"),
-        DFA.unpack(u"\1\u009b"),
-        DFA.unpack(u"\1\u009c"),
-        DFA.unpack(u"\1\u009d"),
-        DFA.unpack(u"\1\u009e"),
-        DFA.unpack(u"\1\u009f"),
-        DFA.unpack(u"\1\u00a0"),
-        DFA.unpack(u"\1\u00a1"),
-        DFA.unpack(u"\1\u00a2"),
-        DFA.unpack(u"\1\u00a3"),
-        DFA.unpack(u"\1\u00a4"),
-        DFA.unpack(u"\1\u00a5"),
         DFA.unpack(u"\1\u00a6"),
-        DFA.unpack(u"\1\u00a7"),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
         DFA.unpack(u"\1\u00a8"),
         DFA.unpack(u"\1\u00a9"),
         DFA.unpack(u"\1\u00aa"),
-        DFA.unpack(u"\1\u00ab"),
-        DFA.unpack(u"\1\u00ac\1\u00ad"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
         DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        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\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u"\1\u00b0"),
         DFA.unpack(u"\1\u00b1"),
         DFA.unpack(u"\1\u00b2"),
-        DFA.unpack(u""),
         DFA.unpack(u"\1\u00b3"),
         DFA.unpack(u"\1\u00b4"),
         DFA.unpack(u"\1\u00b5"),
-        DFA.unpack(u""),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u""),
-        DFA.unpack(u""),
-        DFA.unpack(u""),
-        DFA.unpack(u""),
+        DFA.unpack(u"\1\u00b6"),
         DFA.unpack(u"\1\u00b7"),
         DFA.unpack(u"\1\u00b8"),
         DFA.unpack(u"\1\u00b9"),
-        DFA.unpack(u""),
         DFA.unpack(u"\1\u00ba"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\u00bc"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u"\1\u00bc\1\u00bb"),
+        DFA.unpack(u"\1\u00bd"),
         DFA.unpack(u"\1\u00be"),
-        DFA.unpack(u"\1\u00bf"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
         DFA.unpack(u"\1\u00c0"),
         DFA.unpack(u"\1\u00c1"),
-        DFA.unpack(u"\1\u00c2"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
         DFA.unpack(u"\1\u00c3"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\u00c4"),
         DFA.unpack(u"\1\u00c5"),
         DFA.unpack(u"\1\u00c6"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\u00c8"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\u00cb"),
-        DFA.unpack(u"\1\u00cc"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\u00c8"),
+        DFA.unpack(u"\1\u00c9"),
+        DFA.unpack(u"\1\u00ca"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u00ce"),
+        DFA.unpack(u"\1\u00cb"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\u00cd"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
         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\u00d3"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\u00d5"),
+        DFA.unpack(u"\1\u00d4"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
         DFA.unpack(u"\1\u00d6"),
-        DFA.unpack(u""),
         DFA.unpack(u"\1\u00d7"),
-        DFA.unpack(u""),
-        DFA.unpack(u"\1\u00d8"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
         DFA.unpack(u"\1\u00d9"),
         DFA.unpack(u"\1\u00da"),
         DFA.unpack(u"\1\u00db"),
-        DFA.unpack(u"\1\u00dc"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u00de"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
         DFA.unpack(u"\1\u00df"),
         DFA.unpack(u""),
         DFA.unpack(u"\1\u00e0"),
-        DFA.unpack(u""),
-        DFA.unpack(u""),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u"\1\u00e1"),
         DFA.unpack(u"\1\u00e2"),
+        DFA.unpack(u"\1\u00e3"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
         DFA.unpack(u"\1\u00e4"),
-        DFA.unpack(u"\1\u00e5"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\u00e6"),
         DFA.unpack(u"\1\u00e7"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u"\1\u00e8"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\u00e9"),
         DFA.unpack(u"\1\u00ea"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u"\1\u00eb"),
+        DFA.unpack(u"\1\u00ec"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\u00ee"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u"\1\u00ef"),
+        DFA.unpack(u"\1\u00f0"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\u00f1"),
         DFA.unpack(u"\1\u00f2"),
-        DFA.unpack(u"\1\u00f3"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u00f4"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\u00f5"),
         DFA.unpack(u"\1\u00f6"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\u00f8"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u00f7"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\u00fb"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\u0103"),
+        DFA.unpack(u"\1\u0104"),
+        DFA.unpack(u"\1\u0105"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\u0107"),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\u0108"),
         DFA.unpack(u""),
         DFA.unpack(u""),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\u00f9"),
-        DFA.unpack(u"\1\u00fa"),
-        DFA.unpack(u"\1\u00fb"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\u00fd"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
         DFA.unpack(u""),
-        DFA.unpack(u"\1\54\13\uffff\12\54\7\uffff\32\54\4\uffff\1\54\1\uffff"
-        u"\32\54"),
+        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\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\u010e"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
+        DFA.unpack(u""),
+        DFA.unpack(u"\1\64\13\uffff\12\64\7\uffff\32\64\4\uffff\1\64\1\uffff"
+        u"\32\64"),
         DFA.unpack(u""),
         DFA.unpack(u""),
         DFA.unpack(u""),
index c02ecb7..6fcbe11 100644 (file)
@@ -1,4 +1,4 @@
-# $ANTLR 3.0.1 C.g 2007-11-26 17:02:18
+# $ANTLR 3.0.1 C.g 2007-11-30 17:29:46
 
 from antlr3 import *
 from antlr3.compat import set, frozenset
@@ -13,11 +13,12 @@ LETTER=11
 Exponent=15
 DECIMAL_LITERAL=7
 IntegerTypeSuffix=14
+UnicodeVocabulary=20
 HexDigit=13
 WS=19
-LINE_COMMAND=22
-COMMENT=20
-LINE_COMMENT=21
+LINE_COMMAND=23
+COMMENT=21
+LINE_COMMENT=22
 OCTAL_LITERAL=6
 HEX_LITERAL=5
 FLOATING_POINT_LITERAL=10
@@ -35,22 +36,23 @@ tokenNames = [
     "IDENTIFIER", "HEX_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", "CHARACTER_LITERAL", 
     "STRING_LITERAL", "FLOATING_POINT_LITERAL", "LETTER", "EscapeSequence", 
     "HexDigit", "IntegerTypeSuffix", "Exponent", "FloatTypeSuffix", "OctalEscape", 
-    "UnicodeEscape", "WS", "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'"
+    "UnicodeEscape", "WS", "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'"
 ]
 
 class Symbols_scope(object):
     def __init__(self):
         self.types = None
+        self.inFunc = None
 
 
 class declaration_scope(object):
@@ -82,39 +84,46 @@ class CParser(Parser):
                 return True\r
     \r
         return False\r
+        \r
+    def printTokenInfo(self, line, offset, tokenText):\r
+       print str(line)+ ',' + str(offset) + ':' + str(tokenText)\r
+       \r
+    def printFuncHeader(self, line, offset, tokenText):\r
+        print str(line)+ ',' + str(offset) + ':' + str(tokenText) + ' is function header.'\r
     \r
 
 
 
     # $ANTLR start translation_unit
-    # C.g:55:1: translation_unit : ( external_declaration )+ ;
+    # C.g:31:1: translation_unit : ( external_declaration )+ ;
     def translation_unit(self, ):
         self.Symbols_stack.append(Symbols_scope())
 
         translation_unit_StartIndex = self.input.index()
                \r
         self.Symbols_stack[-1].types = set()\r
+        self.Symbols_stack[-1].inFunc = False\r
 
         try:
             try:
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 1):
                     return 
 
-                # C.g:60:2: ( ( external_declaration )+ )
-                # C.g:60:4: ( external_declaration )+
-                # C.g:60:4: ( external_declaration )+
+                # C.g:37:2: ( ( external_declaration )+ )
+                # C.g:37:4: ( external_declaration )+
+                # C.g:37:4: ( external_declaration )+
                 cnt1 = 0
                 while True: #loop1
                     alt1 = 2
                     LA1_0 = self.input.LA(1)
 
-                    if (LA1_0 == IDENTIFIER or LA1_0 == 23 or (27 <= LA1_0 <= 39) or (42 <= LA1_0 <= 43) or (45 <= LA1_0 <= 50) or LA1_0 == 54) :
+                    if (LA1_0 == IDENTIFIER or LA1_0 == 24 or (28 <= LA1_0 <= 40) or (43 <= LA1_0 <= 44) or (46 <= LA1_0 <= 51) or LA1_0 == 55) :
                         alt1 = 1
 
 
                     if alt1 == 1:
                         # C.g:0:0: external_declaration
-                        self.following.append(self.FOLLOW_external_declaration_in_translation_unit77)
+                        self.following.append(self.FOLLOW_external_declaration_in_translation_unit76)
                         self.external_declaration()
                         self.following.pop()
                         if self.failed:
@@ -156,7 +165,7 @@ class CParser(Parser):
 
 
     # $ANTLR start external_declaration
-    # C.g:63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );
+    # C.g:48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );
     def external_declaration(self, ):
 
         external_declaration_StartIndex = self.input.index()
@@ -165,11 +174,11 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 2):
                     return 
 
-                # C.g:89:2: ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement )
+                # C.g:53:2: ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement )
                 alt2 = 3
                 LA2_0 = self.input.LA(1)
 
-                if ((27 <= LA2_0 <= 30)) :
+                if ((28 <= LA2_0 <= 31)) :
                     LA2_1 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -181,11 +190,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 1, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 1, self.input)
 
                         raise nvae
 
-                elif (LA2_0 == 31) :
+                elif (LA2_0 == 32) :
                     LA2_2 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -197,11 +206,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 2, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 2, self.input)
 
                         raise nvae
 
-                elif (LA2_0 == 32) :
+                elif (LA2_0 == 33) :
                     LA2_3 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -213,11 +222,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 3, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 3, self.input)
 
                         raise nvae
 
-                elif (LA2_0 == 33) :
+                elif (LA2_0 == 34) :
                     LA2_4 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -229,11 +238,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 4, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 4, self.input)
 
                         raise nvae
 
-                elif (LA2_0 == 34) :
+                elif (LA2_0 == 35) :
                     LA2_5 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -245,11 +254,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 5, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 5, self.input)
 
                         raise nvae
 
-                elif (LA2_0 == 35) :
+                elif (LA2_0 == 36) :
                     LA2_6 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -261,11 +270,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 6, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 6, self.input)
 
                         raise nvae
 
-                elif (LA2_0 == 36) :
+                elif (LA2_0 == 37) :
                     LA2_7 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -277,11 +286,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 7, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 7, self.input)
 
                         raise nvae
 
-                elif (LA2_0 == 37) :
+                elif (LA2_0 == 38) :
                     LA2_8 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -293,11 +302,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 8, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 8, self.input)
 
                         raise nvae
 
-                elif (LA2_0 == 38) :
+                elif (LA2_0 == 39) :
                     LA2_9 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -309,11 +318,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 9, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 9, self.input)
 
                         raise nvae
 
-                elif (LA2_0 == 39) :
+                elif (LA2_0 == 40) :
                     LA2_10 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -325,11 +334,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 10, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 10, self.input)
 
                         raise nvae
 
-                elif ((42 <= LA2_0 <= 43)) :
+                elif ((43 <= LA2_0 <= 44)) :
                     LA2_11 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -341,11 +350,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 11, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 11, self.input)
 
                         raise nvae
 
-                elif (LA2_0 == 45) :
+                elif (LA2_0 == 46) :
                     LA2_12 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -357,7 +366,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 12, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 12, self.input)
 
                         raise nvae
 
@@ -375,11 +384,11 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 13, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 13, self.input)
 
                         raise nvae
 
-                elif ((46 <= LA2_0 <= 49)) :
+                elif ((47 <= LA2_0 <= 50)) :
                     LA2_14 = self.input.LA(2)
 
                     if (self.synpred4()) :
@@ -391,28 +400,28 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 14, self.input)
+                        nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 14, self.input)
 
                         raise nvae
 
-                elif (LA2_0 == 54) and (self.synpred4()):
+                elif (LA2_0 == 55) and (self.synpred4()):
                     alt2 = 1
-                elif (LA2_0 == 50) and (self.synpred4()):
+                elif (LA2_0 == 51) and (self.synpred4()):
                     alt2 = 1
-                elif (LA2_0 == 23) :
+                elif (LA2_0 == 24) :
                     alt2 = 2
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("63:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 0, self.input)
+                    nvae = NoViableAltException("48:1: external_declaration options {k=1; } : ( ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition | declaration | macro_statement );", 2, 0, self.input)
 
                     raise nvae
 
                 if alt2 == 1:
-                    # C.g:89:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition
-                    self.following.append(self.FOLLOW_function_definition_in_external_declaration117)
+                    # C.g:53:4: ( ( declaration_specifiers )? declarator ( declaration )* '{' )=> function_definition
+                    self.following.append(self.FOLLOW_function_definition_in_external_declaration115)
                     self.function_definition()
                     self.following.pop()
                     if self.failed:
@@ -420,8 +429,8 @@ class CParser(Parser):
 
 
                 elif alt2 == 2:
-                    # C.g:90:4: declaration
-                    self.following.append(self.FOLLOW_declaration_in_external_declaration122)
+                    # C.g:54:4: declaration
+                    self.following.append(self.FOLLOW_declaration_in_external_declaration120)
                     self.declaration()
                     self.following.pop()
                     if self.failed:
@@ -429,8 +438,8 @@ class CParser(Parser):
 
 
                 elif alt2 == 3:
-                    # C.g:91:4: macro_statement
-                    self.following.append(self.FOLLOW_macro_statement_in_external_declaration127)
+                    # C.g:55:4: macro_statement
+                    self.following.append(self.FOLLOW_macro_statement_in_external_declaration125)
                     self.macro_statement()
                     self.following.pop()
                     if self.failed:
@@ -451,115 +460,123 @@ class CParser(Parser):
 
     # $ANTLR end external_declaration
 
+    class function_definition_return(object):
+        def __init__(self):
+            self.start = None
+            self.stop = None
+
+
 
     # $ANTLR start function_definition
-    # C.g:97:1: function_definition : ( declaration_specifiers )? declarator ( ( declaration )+ compound_statement | compound_statement ) ;
+    # C.g:61:1: function_definition : ( declaration_specifiers )? declarator ( ( declaration )+ compound_statement | compound_statement ) ;
     def function_definition(self, ):
         self.Symbols_stack.append(Symbols_scope())
 
+        retval = self.function_definition_return()
+        retval.start = self.input.LT(1)
         function_definition_StartIndex = self.input.index()
-               \r
-        self.Symbols_stack[-1].types = set()\r
+              \r
+        self.Symbols_stack[-1].inFunc = True\r
 
         try:
             try:
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 3):
-                    return 
+                    return retval
 
-                # C.g:102:2: ( ( declaration_specifiers )? declarator ( ( declaration )+ compound_statement | compound_statement ) )
-                # C.g:102:4: ( declaration_specifiers )? declarator ( ( declaration )+ compound_statement | compound_statement )
-                # C.g:102:4: ( declaration_specifiers )?
+                # C.g:69:2: ( ( declaration_specifiers )? declarator ( ( declaration )+ compound_statement | compound_statement ) )
+                # C.g:69:4: ( declaration_specifiers )? declarator ( ( declaration )+ compound_statement | compound_statement )
+                # C.g:69:4: ( declaration_specifiers )?
                 alt3 = 2
                 LA3_0 = self.input.LA(1)
 
-                if ((27 <= LA3_0 <= 39) or (42 <= LA3_0 <= 43) or (45 <= LA3_0 <= 49)) :
+                if ((28 <= LA3_0 <= 40) or (43 <= LA3_0 <= 44) or (46 <= LA3_0 <= 50)) :
                     alt3 = 1
                 elif (LA3_0 == IDENTIFIER) :
                     LA3 = self.input.LA(2)
-                    if LA3 == 54:
-                        alt3 = 1
-                    elif LA3 == IDENTIFIER:
+                    if LA3 == 51:
                         LA3_18 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 50:
-                        LA3_19 = self.input.LA(3)
-
-                        if (self.synpred6()) :
-                            alt3 = 1
-                    elif LA3 == 27 or LA3 == 28 or LA3 == 29 or LA3 == 30:
+                    elif LA3 == 28 or LA3 == 29 or LA3 == 30 or LA3 == 31:
                         LA3_20 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 31:
+                    elif LA3 == 32:
                         LA3_21 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 32:
+                    elif LA3 == 33:
                         LA3_22 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 33:
+                    elif LA3 == 34:
                         LA3_23 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 34:
+                    elif LA3 == 35:
                         LA3_24 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 35:
+                    elif LA3 == 36:
                         LA3_25 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 36:
+                    elif LA3 == 37:
                         LA3_26 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 37:
+                    elif LA3 == 38:
                         LA3_27 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 38:
+                    elif LA3 == 39:
                         LA3_28 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 39:
+                    elif LA3 == 40:
                         LA3_29 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 42 or LA3 == 43:
+                    elif LA3 == 43 or LA3 == 44:
                         LA3_30 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 45:
+                    elif LA3 == 46:
                         LA3_31 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
-                    elif LA3 == 46 or LA3 == 47 or LA3 == 48 or LA3 == 49:
+                    elif LA3 == IDENTIFIER:
                         LA3_32 = self.input.LA(3)
 
                         if (self.synpred6()) :
                             alt3 = 1
+                    elif LA3 == 47 or LA3 == 48 or LA3 == 49 or LA3 == 50:
+                        LA3_33 = self.input.LA(3)
+
+                        if (self.synpred6()) :
+                            alt3 = 1
+                    elif LA3 == 55:
+                        alt3 = 1
                 if alt3 == 1:
                     # C.g:0:0: declaration_specifiers
                     self.following.append(self.FOLLOW_declaration_specifiers_in_function_definition153)
                     self.declaration_specifiers()
                     self.following.pop()
                     if self.failed:
-                        return 
+                        return retval
 
 
 
@@ -567,33 +584,33 @@ class CParser(Parser):
                 self.declarator()
                 self.following.pop()
                 if self.failed:
-                    return 
-                # C.g:103:3: ( ( declaration )+ compound_statement | compound_statement )
+                    return retval
+                # C.g:70:3: ( ( declaration )+ compound_statement | compound_statement )
                 alt5 = 2
                 LA5_0 = self.input.LA(1)
 
-                if (LA5_0 == IDENTIFIER or LA5_0 == 23 or (27 <= LA5_0 <= 39) or (42 <= LA5_0 <= 43) or (45 <= LA5_0 <= 49)) :
+                if (LA5_0 == IDENTIFIER or LA5_0 == 24 or (28 <= LA5_0 <= 40) or (43 <= LA5_0 <= 44) or (46 <= LA5_0 <= 50)) :
                     alt5 = 1
-                elif (LA5_0 == 40) :
+                elif (LA5_0 == 41) :
                     alt5 = 2
                 else:
                     if self.backtracking > 0:
                         self.failed = True
-                        return 
+                        return retval
 
-                    nvae = NoViableAltException("103:3: ( ( declaration )+ compound_statement | compound_statement )", 5, 0, self.input)
+                    nvae = NoViableAltException("70:3: ( ( declaration )+ compound_statement | compound_statement )", 5, 0, self.input)
 
                     raise nvae
 
                 if alt5 == 1:
-                    # C.g:103:5: ( declaration )+ compound_statement
-                    # C.g:103:5: ( declaration )+
+                    # C.g:70:5: ( declaration )+ compound_statement
+                    # C.g:70:5: ( declaration )+
                     cnt4 = 0
                     while True: #loop4
                         alt4 = 2
                         LA4_0 = self.input.LA(1)
 
-                        if (LA4_0 == IDENTIFIER or LA4_0 == 23 or (27 <= LA4_0 <= 39) or (42 <= LA4_0 <= 43) or (45 <= LA4_0 <= 49)) :
+                        if (LA4_0 == IDENTIFIER or LA4_0 == 24 or (28 <= LA4_0 <= 40) or (43 <= LA4_0 <= 44) or (46 <= LA4_0 <= 50)) :
                             alt4 = 1
 
 
@@ -603,7 +620,7 @@ class CParser(Parser):
                             self.declaration()
                             self.following.pop()
                             if self.failed:
-                                return 
+                                return retval
 
 
                         else:
@@ -612,7 +629,7 @@ class CParser(Parser):
 
                             if self.backtracking > 0:
                                 self.failed = True
-                                return 
+                                return retval
 
                             eee = EarlyExitException(4, self.input)
                             raise eee
@@ -624,20 +641,27 @@ class CParser(Parser):
                     self.compound_statement()
                     self.following.pop()
                     if self.failed:
-                        return 
+                        return retval
 
 
                 elif alt5 == 2:
-                    # C.g:104:5: compound_statement
+                    # C.g:71:5: compound_statement
                     self.following.append(self.FOLLOW_compound_statement_in_function_definition172)
                     self.compound_statement()
                     self.following.pop()
                     if self.failed:
-                        return 
+                        return retval
+
+
 
 
 
 
+                retval.stop = self.input.LT(-1)
+
+                if self.backtracking == 0:
+                           \r
+                    print str(retval.stop.line) + ',' + str(retval.stop.charPositionInLine)\r
 
 
 
@@ -652,16 +676,18 @@ class CParser(Parser):
 
             pass
 
-        return 
+        return retval
 
     # $ANTLR end function_definition
 
 
     # $ANTLR start declaration
-    # C.g:108:1: declaration : ( 'typedef' ( declaration_specifiers )? init_declarator_list ';' | declaration_specifiers ( init_declarator_list )? ';' );
+    # C.g:75:1: declaration : (a= 'typedef' ( declaration_specifiers )? init_declarator_list ';' | declaration_specifiers ( init_declarator_list )? ';' );
     def declaration(self, ):
         self.declaration_stack.append(declaration_scope())
         declaration_StartIndex = self.input.index()
+        a = None
+
                \r
         self.declaration_stack[-1].isTypedef =  False\r
 
@@ -670,47 +696,48 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 4):
                     return 
 
-                # C.g:115:2: ( 'typedef' ( declaration_specifiers )? init_declarator_list ';' | declaration_specifiers ( init_declarator_list )? ';' )
+                # C.g:82:2: (a= 'typedef' ( declaration_specifiers )? init_declarator_list ';' | declaration_specifiers ( init_declarator_list )? ';' )
                 alt8 = 2
                 LA8_0 = self.input.LA(1)
 
-                if (LA8_0 == 23) :
+                if (LA8_0 == 24) :
                     alt8 = 1
-                elif (LA8_0 == IDENTIFIER or (27 <= LA8_0 <= 39) or (42 <= LA8_0 <= 43) or (45 <= LA8_0 <= 49)) :
+                elif (LA8_0 == IDENTIFIER or (28 <= LA8_0 <= 40) or (43 <= LA8_0 <= 44) or (46 <= LA8_0 <= 50)) :
                     alt8 = 2
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("108:1: declaration : ( 'typedef' ( declaration_specifiers )? init_declarator_list ';' | declaration_specifiers ( init_declarator_list )? ';' );", 8, 0, self.input)
+                    nvae = NoViableAltException("75:1: declaration : (a= 'typedef' ( declaration_specifiers )? init_declarator_list ';' | declaration_specifiers ( init_declarator_list )? ';' );", 8, 0, self.input)
 
                     raise nvae
 
                 if alt8 == 1:
-                    # C.g:115:4: 'typedef' ( declaration_specifiers )? init_declarator_list ';'
-                    self.match(self.input, 23, self.FOLLOW_23_in_declaration200)
+                    # C.g:82:4: a= 'typedef' ( declaration_specifiers )? init_declarator_list ';'
+                    a = self.input.LT(1)
+                    self.match(self.input, 24, self.FOLLOW_24_in_declaration203)
                     if self.failed:
                         return 
-                    # C.g:115:14: ( declaration_specifiers )?
+                    # C.g:82:16: ( declaration_specifiers )?
                     alt6 = 2
                     LA6_0 = self.input.LA(1)
 
-                    if ((27 <= LA6_0 <= 39) or (42 <= LA6_0 <= 43) or (45 <= LA6_0 <= 49)) :
+                    if ((28 <= LA6_0 <= 40) or (43 <= LA6_0 <= 44) or (46 <= LA6_0 <= 50)) :
                         alt6 = 1
                     elif (LA6_0 == IDENTIFIER) :
                         LA6_13 = self.input.LA(2)
 
-                        if (LA6_13 == IDENTIFIER or (27 <= LA6_13 <= 39) or (42 <= LA6_13 <= 43) or (45 <= LA6_13 <= 49) or LA6_13 == 54) :
-                            alt6 = 1
-                        elif (LA6_13 == 50) :
-                            LA6_19 = self.input.LA(3)
+                        if (LA6_13 == 51) :
+                            LA6_18 = self.input.LA(3)
 
                             if (self.synpred9()) :
                                 alt6 = 1
+                        elif (LA6_13 == IDENTIFIER or (28 <= LA6_13 <= 40) or (43 <= LA6_13 <= 44) or (46 <= LA6_13 <= 50) or LA6_13 == 55) :
+                            alt6 = 1
                     if alt6 == 1:
                         # C.g:0:0: declaration_specifiers
-                        self.following.append(self.FOLLOW_declaration_specifiers_in_declaration202)
+                        self.following.append(self.FOLLOW_declaration_specifiers_in_declaration205)
                         self.declaration_specifiers()
                         self.following.pop()
                         if self.failed:
@@ -718,35 +745,32 @@ class CParser(Parser):
 
 
 
-                    if self.backtracking == 0:
-                        self.declaration_stack[-1].isTypedef=True
-
-                    self.following.append(self.FOLLOW_init_declarator_list_in_declaration210)
+                    self.following.append(self.FOLLOW_init_declarator_list_in_declaration212)
                     self.init_declarator_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 24, self.FOLLOW_24_in_declaration212)
+                    self.match(self.input, 25, self.FOLLOW_25_in_declaration214)
                     if self.failed:
                         return 
 
 
                 elif alt8 == 2:
-                    # C.g:117:4: declaration_specifiers ( init_declarator_list )? ';'
-                    self.following.append(self.FOLLOW_declaration_specifiers_in_declaration218)
+                    # C.g:84:4: declaration_specifiers ( init_declarator_list )? ';'
+                    self.following.append(self.FOLLOW_declaration_specifiers_in_declaration220)
                     self.declaration_specifiers()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:117:27: ( init_declarator_list )?
+                    # C.g:84:27: ( init_declarator_list )?
                     alt7 = 2
                     LA7_0 = self.input.LA(1)
 
-                    if (LA7_0 == IDENTIFIER or LA7_0 == 50 or LA7_0 == 54) :
+                    if (LA7_0 == IDENTIFIER or LA7_0 == 51 or LA7_0 == 55) :
                         alt7 = 1
                     if alt7 == 1:
                         # C.g:0:0: init_declarator_list
-                        self.following.append(self.FOLLOW_init_declarator_list_in_declaration220)
+                        self.following.append(self.FOLLOW_init_declarator_list_in_declaration222)
                         self.init_declarator_list()
                         self.following.pop()
                         if self.failed:
@@ -754,7 +778,7 @@ class CParser(Parser):
 
 
 
-                    self.match(self.input, 24, self.FOLLOW_24_in_declaration223)
+                    self.match(self.input, 25, self.FOLLOW_25_in_declaration225)
                     if self.failed:
                         return 
 
@@ -776,7 +800,7 @@ class CParser(Parser):
 
 
     # $ANTLR start declaration_specifiers
-    # C.g:121:1: declaration_specifiers : ( storage_class_specifier | type_specifier | type_qualifier )+ ;
+    # C.g:88:1: declaration_specifiers : ( storage_class_specifier | type_specifier | type_qualifier )+ ;
     def declaration_specifiers(self, ):
 
         declaration_specifiers_StartIndex = self.input.index()
@@ -785,9 +809,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 5):
                     return 
 
-                # C.g:122:2: ( ( storage_class_specifier | type_specifier | type_qualifier )+ )
-                # C.g:122:6: ( storage_class_specifier | type_specifier | type_qualifier )+
-                # C.g:122:6: ( storage_class_specifier | type_specifier | type_qualifier )+
+                # C.g:89:2: ( ( storage_class_specifier | type_specifier | type_qualifier )+ )
+                # C.g:89:6: ( storage_class_specifier | type_specifier | type_qualifier )+
+                # C.g:89:6: ( storage_class_specifier | type_specifier | type_qualifier )+
                 cnt9 = 0
                 while True: #loop9
                     alt9 = 4
@@ -799,16 +823,16 @@ class CParser(Parser):
                             alt9 = 2
 
 
-                    elif LA9 == 27 or LA9 == 28 or LA9 == 29 or LA9 == 30:
+                    elif LA9 == 28 or LA9 == 29 or LA9 == 30 or LA9 == 31:
                         alt9 = 1
-                    elif LA9 == 31 or LA9 == 32 or LA9 == 33 or LA9 == 34 or LA9 == 35 or LA9 == 36 or LA9 == 37 or LA9 == 38 or LA9 == 39 or LA9 == 42 or LA9 == 43 or LA9 == 45:
+                    elif LA9 == 32 or LA9 == 33 or LA9 == 34 or LA9 == 35 or LA9 == 36 or LA9 == 37 or LA9 == 38 or LA9 == 39 or LA9 == 40 or LA9 == 43 or LA9 == 44 or LA9 == 46:
                         alt9 = 2
-                    elif LA9 == 46 or LA9 == 47 or LA9 == 48 or LA9 == 49:
+                    elif LA9 == 47 or LA9 == 48 or LA9 == 49 or LA9 == 50:
                         alt9 = 3
 
                     if alt9 == 1:
-                        # C.g:122:10: storage_class_specifier
-                        self.following.append(self.FOLLOW_storage_class_specifier_in_declaration_specifiers242)
+                        # C.g:89:10: storage_class_specifier
+                        self.following.append(self.FOLLOW_storage_class_specifier_in_declaration_specifiers244)
                         self.storage_class_specifier()
                         self.following.pop()
                         if self.failed:
@@ -816,8 +840,8 @@ class CParser(Parser):
 
 
                     elif alt9 == 2:
-                        # C.g:123:7: type_specifier
-                        self.following.append(self.FOLLOW_type_specifier_in_declaration_specifiers250)
+                        # C.g:90:7: type_specifier
+                        self.following.append(self.FOLLOW_type_specifier_in_declaration_specifiers252)
                         self.type_specifier()
                         self.following.pop()
                         if self.failed:
@@ -825,8 +849,8 @@ class CParser(Parser):
 
 
                     elif alt9 == 3:
-                        # C.g:124:13: type_qualifier
-                        self.following.append(self.FOLLOW_type_qualifier_in_declaration_specifiers264)
+                        # C.g:91:13: type_qualifier
+                        self.following.append(self.FOLLOW_type_qualifier_in_declaration_specifiers266)
                         self.type_qualifier()
                         self.following.pop()
                         if self.failed:
@@ -866,7 +890,7 @@ class CParser(Parser):
 
 
     # $ANTLR start init_declarator_list
-    # C.g:128:1: init_declarator_list : init_declarator ( ',' init_declarator )* ;
+    # C.g:95:1: init_declarator_list : init_declarator ( ',' init_declarator )* ;
     def init_declarator_list(self, ):
 
         init_declarator_list_StartIndex = self.input.index()
@@ -875,28 +899,28 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 6):
                     return 
 
-                # C.g:129:2: ( init_declarator ( ',' init_declarator )* )
-                # C.g:129:4: init_declarator ( ',' init_declarator )*
-                self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list286)
+                # C.g:96:2: ( init_declarator ( ',' init_declarator )* )
+                # C.g:96:4: init_declarator ( ',' init_declarator )*
+                self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list288)
                 self.init_declarator()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:129:20: ( ',' init_declarator )*
+                # C.g:96:20: ( ',' init_declarator )*
                 while True: #loop10
                     alt10 = 2
                     LA10_0 = self.input.LA(1)
 
-                    if (LA10_0 == 25) :
+                    if (LA10_0 == 26) :
                         alt10 = 1
 
 
                     if alt10 == 1:
-                        # C.g:129:21: ',' init_declarator
-                        self.match(self.input, 25, self.FOLLOW_25_in_init_declarator_list289)
+                        # C.g:96:21: ',' init_declarator
+                        self.match(self.input, 26, self.FOLLOW_26_in_init_declarator_list291)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list291)
+                        self.following.append(self.FOLLOW_init_declarator_in_init_declarator_list293)
                         self.init_declarator()
                         self.following.pop()
                         if self.failed:
@@ -926,7 +950,7 @@ class CParser(Parser):
 
 
     # $ANTLR start init_declarator
-    # C.g:132:1: init_declarator : declarator ( '=' initializer )? ;
+    # C.g:99:1: init_declarator : declarator ( '=' initializer )? ;
     def init_declarator(self, ):
 
         init_declarator_StartIndex = self.input.index()
@@ -935,25 +959,25 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 7):
                     return 
 
-                # C.g:133:2: ( declarator ( '=' initializer )? )
-                # C.g:133:4: declarator ( '=' initializer )?
-                self.following.append(self.FOLLOW_declarator_in_init_declarator304)
+                # C.g:100:2: ( declarator ( '=' initializer )? )
+                # C.g:100:4: declarator ( '=' initializer )?
+                self.following.append(self.FOLLOW_declarator_in_init_declarator306)
                 self.declarator()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:133:15: ( '=' initializer )?
+                # C.g:100:15: ( '=' initializer )?
                 alt11 = 2
                 LA11_0 = self.input.LA(1)
 
-                if (LA11_0 == 26) :
+                if (LA11_0 == 27) :
                     alt11 = 1
                 if alt11 == 1:
-                    # C.g:133:16: '=' initializer
-                    self.match(self.input, 26, self.FOLLOW_26_in_init_declarator307)
+                    # C.g:100:16: '=' initializer
+                    self.match(self.input, 27, self.FOLLOW_27_in_init_declarator309)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_initializer_in_init_declarator309)
+                    self.following.append(self.FOLLOW_initializer_in_init_declarator311)
                     self.initializer()
                     self.following.pop()
                     if self.failed:
@@ -980,7 +1004,7 @@ class CParser(Parser):
 
 
     # $ANTLR start storage_class_specifier
-    # C.g:136:1: storage_class_specifier : ( 'extern' | 'static' | 'auto' | 'register' );
+    # C.g:104:1: storage_class_specifier : ( 'extern' | 'static' | 'auto' | 'register' );
     def storage_class_specifier(self, ):
 
         storage_class_specifier_StartIndex = self.input.index()
@@ -989,9 +1013,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 8):
                     return 
 
-                # C.g:137:2: ( 'extern' | 'static' | 'auto' | 'register' )
+                # C.g:105:2: ( 'extern' | 'static' | 'auto' | 'register' )
                 # C.g:
-                if (27 <= self.input.LA(1) <= 30):
+                if (28 <= self.input.LA(1) <= 31):
                     self.input.consume();
                     self.errorRecovery = False
                     self.failed = False
@@ -1027,7 +1051,7 @@ class CParser(Parser):
 
 
     # $ANTLR start type_specifier
-    # C.g:143:1: type_specifier options {k=3; } : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | struct_or_union_specifier | enum_specifier | ( IDENTIFIER declarator )=> type_id );
+    # C.g:111:1: type_specifier options {k=3; } : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | struct_or_union_specifier | enum_specifier | ( IDENTIFIER declarator )=> type_id );
     def type_specifier(self, ):
 
         type_specifier_StartIndex = self.input.index()
@@ -1036,31 +1060,31 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 9):
                     return 
 
-                # C.g:145:2: ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | struct_or_union_specifier | enum_specifier | ( IDENTIFIER declarator )=> type_id )
+                # C.g:113:2: ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | struct_or_union_specifier | enum_specifier | ( IDENTIFIER declarator )=> type_id )
                 alt12 = 12
                 LA12_0 = self.input.LA(1)
 
-                if (LA12_0 == 31) :
+                if (LA12_0 == 32) :
                     alt12 = 1
-                elif (LA12_0 == 32) :
-                    alt12 = 2
                 elif (LA12_0 == 33) :
-                    alt12 = 3
+                    alt12 = 2
                 elif (LA12_0 == 34) :
-                    alt12 = 4
+                    alt12 = 3
                 elif (LA12_0 == 35) :
-                    alt12 = 5
+                    alt12 = 4
                 elif (LA12_0 == 36) :
-                    alt12 = 6
+                    alt12 = 5
                 elif (LA12_0 == 37) :
-                    alt12 = 7
+                    alt12 = 6
                 elif (LA12_0 == 38) :
-                    alt12 = 8
+                    alt12 = 7
                 elif (LA12_0 == 39) :
+                    alt12 = 8
+                elif (LA12_0 == 40) :
                     alt12 = 9
-                elif ((42 <= LA12_0 <= 43)) :
+                elif ((43 <= LA12_0 <= 44)) :
                     alt12 = 10
-                elif (LA12_0 == 45) :
+                elif (LA12_0 == 46) :
                     alt12 = 11
                 elif (LA12_0 == IDENTIFIER) and (self.synpred31()):
                     alt12 = 12
@@ -1069,76 +1093,76 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("143:1: type_specifier options {k=3; } : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | struct_or_union_specifier | enum_specifier | ( IDENTIFIER declarator )=> type_id );", 12, 0, self.input)
+                    nvae = NoViableAltException("111:1: type_specifier options {k=3; } : ( 'void' | 'char' | 'short' | 'int' | 'long' | 'float' | 'double' | 'signed' | 'unsigned' | struct_or_union_specifier | enum_specifier | ( IDENTIFIER declarator )=> type_id );", 12, 0, self.input)
 
                     raise nvae
 
                 if alt12 == 1:
-                    # C.g:145:4: 'void'
-                    self.match(self.input, 31, self.FOLLOW_31_in_type_specifier355)
+                    # C.g:113:4: 'void'
+                    self.match(self.input, 32, self.FOLLOW_32_in_type_specifier360)
                     if self.failed:
                         return 
 
 
                 elif alt12 == 2:
-                    # C.g:146:4: 'char'
-                    self.match(self.input, 32, self.FOLLOW_32_in_type_specifier360)
+                    # C.g:114:4: 'char'
+                    self.match(self.input, 33, self.FOLLOW_33_in_type_specifier365)
                     if self.failed:
                         return 
 
 
                 elif alt12 == 3:
-                    # C.g:147:4: 'short'
-                    self.match(self.input, 33, self.FOLLOW_33_in_type_specifier365)
+                    # C.g:115:4: 'short'
+                    self.match(self.input, 34, self.FOLLOW_34_in_type_specifier370)
                     if self.failed:
                         return 
 
 
                 elif alt12 == 4:
-                    # C.g:148:4: 'int'
-                    self.match(self.input, 34, self.FOLLOW_34_in_type_specifier370)
+                    # C.g:116:4: 'int'
+                    self.match(self.input, 35, self.FOLLOW_35_in_type_specifier375)
                     if self.failed:
                         return 
 
 
                 elif alt12 == 5:
-                    # C.g:149:4: 'long'
-                    self.match(self.input, 35, self.FOLLOW_35_in_type_specifier375)
+                    # C.g:117:4: 'long'
+                    self.match(self.input, 36, self.FOLLOW_36_in_type_specifier380)
                     if self.failed:
                         return 
 
 
                 elif alt12 == 6:
-                    # C.g:150:4: 'float'
-                    self.match(self.input, 36, self.FOLLOW_36_in_type_specifier380)
+                    # C.g:118:4: 'float'
+                    self.match(self.input, 37, self.FOLLOW_37_in_type_specifier385)
                     if self.failed:
                         return 
 
 
                 elif alt12 == 7:
-                    # C.g:151:4: 'double'
-                    self.match(self.input, 37, self.FOLLOW_37_in_type_specifier385)
+                    # C.g:119:4: 'double'
+                    self.match(self.input, 38, self.FOLLOW_38_in_type_specifier390)
                     if self.failed:
                         return 
 
 
                 elif alt12 == 8:
-                    # C.g:152:4: 'signed'
-                    self.match(self.input, 38, self.FOLLOW_38_in_type_specifier390)
+                    # C.g:120:4: 'signed'
+                    self.match(self.input, 39, self.FOLLOW_39_in_type_specifier395)
                     if self.failed:
                         return 
 
 
                 elif alt12 == 9:
-                    # C.g:153:4: 'unsigned'
-                    self.match(self.input, 39, self.FOLLOW_39_in_type_specifier395)
+                    # C.g:121:4: 'unsigned'
+                    self.match(self.input, 40, self.FOLLOW_40_in_type_specifier400)
                     if self.failed:
                         return 
 
 
                 elif alt12 == 10:
-                    # C.g:154:4: struct_or_union_specifier
-                    self.following.append(self.FOLLOW_struct_or_union_specifier_in_type_specifier400)
+                    # C.g:122:4: struct_or_union_specifier
+                    self.following.append(self.FOLLOW_struct_or_union_specifier_in_type_specifier405)
                     self.struct_or_union_specifier()
                     self.following.pop()
                     if self.failed:
@@ -1146,8 +1170,8 @@ class CParser(Parser):
 
 
                 elif alt12 == 11:
-                    # C.g:155:4: enum_specifier
-                    self.following.append(self.FOLLOW_enum_specifier_in_type_specifier405)
+                    # C.g:123:4: enum_specifier
+                    self.following.append(self.FOLLOW_enum_specifier_in_type_specifier410)
                     self.enum_specifier()
                     self.following.pop()
                     if self.failed:
@@ -1155,8 +1179,8 @@ class CParser(Parser):
 
 
                 elif alt12 == 12:
-                    # C.g:156:4: ( IDENTIFIER declarator )=> type_id
-                    self.following.append(self.FOLLOW_type_id_in_type_specifier417)
+                    # C.g:124:4: ( IDENTIFIER declarator )=> type_id
+                    self.following.append(self.FOLLOW_type_id_in_type_specifier422)
                     self.type_id()
                     self.following.pop()
                     if self.failed:
@@ -1179,7 +1203,7 @@ class CParser(Parser):
 
 
     # $ANTLR start type_id
-    # C.g:159:1: type_id : IDENTIFIER ;
+    # C.g:127:1: type_id : IDENTIFIER ;
     def type_id(self, ):
 
         type_id_StartIndex = self.input.index()
@@ -1188,9 +1212,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 10):
                     return 
 
-                # C.g:160:5: ( IDENTIFIER )
-                # C.g:160:9: IDENTIFIER
-                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_type_id433)
+                # C.g:128:5: ( IDENTIFIER )
+                # C.g:128:9: IDENTIFIER
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_type_id438)
                 if self.failed:
                     return 
 
@@ -1212,7 +1236,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_or_union_specifier
-    # C.g:164:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );
+    # C.g:132: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, ):
         self.Symbols_stack.append(Symbols_scope())
 
@@ -1225,37 +1249,37 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 11):
                     return 
 
-                # C.g:170:2: ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER )
+                # C.g:138:2: ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER )
                 alt14 = 2
                 LA14_0 = self.input.LA(1)
 
-                if ((42 <= LA14_0 <= 43)) :
+                if ((43 <= LA14_0 <= 44)) :
                     LA14_1 = self.input.LA(2)
 
                     if (LA14_1 == IDENTIFIER) :
                         LA14_2 = self.input.LA(3)
 
-                        if (LA14_2 == 40) :
+                        if (LA14_2 == 41) :
                             alt14 = 1
-                        elif (LA14_2 == EOF or LA14_2 == IDENTIFIER or LA14_2 == 24 or (27 <= LA14_2 <= 39) or (42 <= LA14_2 <= 52) or LA14_2 == 54) :
+                        elif (LA14_2 == EOF or LA14_2 == IDENTIFIER or LA14_2 == 25 or (28 <= LA14_2 <= 40) or (43 <= LA14_2 <= 53) or LA14_2 == 55) :
                             alt14 = 2
                         else:
                             if self.backtracking > 0:
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("164:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 14, 2, self.input)
+                            nvae = NoViableAltException("132:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 14, 2, self.input)
 
                             raise nvae
 
-                    elif (LA14_1 == 40) :
+                    elif (LA14_1 == 41) :
                         alt14 = 1
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("164:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 14, 1, self.input)
+                        nvae = NoViableAltException("132:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 14, 1, self.input)
 
                         raise nvae
 
@@ -1264,18 +1288,18 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("164:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 14, 0, self.input)
+                    nvae = NoViableAltException("132:1: struct_or_union_specifier options {k=3; } : ( struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}' | struct_or_union IDENTIFIER );", 14, 0, self.input)
 
                     raise nvae
 
                 if alt14 == 1:
-                    # C.g:170:4: struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}'
-                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier472)
+                    # C.g:138:4: struct_or_union ( IDENTIFIER )? '{' struct_declaration_list '}'
+                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier477)
                     self.struct_or_union()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:170:20: ( IDENTIFIER )?
+                    # C.g:138:20: ( IDENTIFIER )?
                     alt13 = 2
                     LA13_0 = self.input.LA(1)
 
@@ -1283,33 +1307,33 @@ class CParser(Parser):
                         alt13 = 1
                     if alt13 == 1:
                         # C.g:0:0: IDENTIFIER
-                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier474)
+                        self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier479)
                         if self.failed:
                             return 
 
 
 
-                    self.match(self.input, 40, self.FOLLOW_40_in_struct_or_union_specifier477)
+                    self.match(self.input, 41, self.FOLLOW_41_in_struct_or_union_specifier482)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_struct_declaration_list_in_struct_or_union_specifier479)
+                    self.following.append(self.FOLLOW_struct_declaration_list_in_struct_or_union_specifier484)
                     self.struct_declaration_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 41, self.FOLLOW_41_in_struct_or_union_specifier481)
+                    self.match(self.input, 42, self.FOLLOW_42_in_struct_or_union_specifier486)
                     if self.failed:
                         return 
 
 
                 elif alt14 == 2:
-                    # C.g:171:4: struct_or_union IDENTIFIER
-                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier486)
+                    # C.g:139:4: struct_or_union IDENTIFIER
+                    self.following.append(self.FOLLOW_struct_or_union_in_struct_or_union_specifier491)
                     self.struct_or_union()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier488)
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_struct_or_union_specifier493)
                     if self.failed:
                         return 
 
@@ -1332,7 +1356,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_or_union
-    # C.g:174:1: struct_or_union : ( 'struct' | 'union' );
+    # C.g:142:1: struct_or_union : ( 'struct' | 'union' );
     def struct_or_union(self, ):
 
         struct_or_union_StartIndex = self.input.index()
@@ -1341,9 +1365,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 12):
                     return 
 
-                # C.g:175:2: ( 'struct' | 'union' )
+                # C.g:143:2: ( 'struct' | 'union' )
                 # C.g:
-                if (42 <= self.input.LA(1) <= 43):
+                if (43 <= self.input.LA(1) <= 44):
                     self.input.consume();
                     self.errorRecovery = False
                     self.failed = False
@@ -1379,7 +1403,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declaration_list
-    # C.g:179:1: struct_declaration_list : ( struct_declaration )+ ;
+    # C.g:147:1: struct_declaration_list : ( struct_declaration )+ ;
     def struct_declaration_list(self, ):
 
         struct_declaration_list_StartIndex = self.input.index()
@@ -1388,21 +1412,21 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 13):
                     return 
 
-                # C.g:180:2: ( ( struct_declaration )+ )
-                # C.g:180:4: ( struct_declaration )+
-                # C.g:180:4: ( struct_declaration )+
+                # C.g:148:2: ( ( struct_declaration )+ )
+                # C.g:148:4: ( struct_declaration )+
+                # C.g:148:4: ( struct_declaration )+
                 cnt15 = 0
                 while True: #loop15
                     alt15 = 2
                     LA15_0 = self.input.LA(1)
 
-                    if (LA15_0 == IDENTIFIER or (31 <= LA15_0 <= 39) or (42 <= LA15_0 <= 43) or (45 <= LA15_0 <= 49)) :
+                    if (LA15_0 == IDENTIFIER or (32 <= LA15_0 <= 40) or (43 <= LA15_0 <= 44) or (46 <= LA15_0 <= 50)) :
                         alt15 = 1
 
 
                     if alt15 == 1:
                         # C.g:0:0: struct_declaration
-                        self.following.append(self.FOLLOW_struct_declaration_in_struct_declaration_list515)
+                        self.following.append(self.FOLLOW_struct_declaration_in_struct_declaration_list520)
                         self.struct_declaration()
                         self.following.pop()
                         if self.failed:
@@ -1442,7 +1466,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declaration
-    # C.g:183:1: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ;
+    # C.g:151:1: struct_declaration : specifier_qualifier_list struct_declarator_list ';' ;
     def struct_declaration(self, ):
 
         struct_declaration_StartIndex = self.input.index()
@@ -1451,19 +1475,19 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 14):
                     return 
 
-                # C.g:184:2: ( specifier_qualifier_list struct_declarator_list ';' )
-                # C.g:184:4: specifier_qualifier_list struct_declarator_list ';'
-                self.following.append(self.FOLLOW_specifier_qualifier_list_in_struct_declaration527)
+                # C.g:152:2: ( specifier_qualifier_list struct_declarator_list ';' )
+                # C.g:152:4: specifier_qualifier_list struct_declarator_list ';'
+                self.following.append(self.FOLLOW_specifier_qualifier_list_in_struct_declaration532)
                 self.specifier_qualifier_list()
                 self.following.pop()
                 if self.failed:
                     return 
-                self.following.append(self.FOLLOW_struct_declarator_list_in_struct_declaration529)
+                self.following.append(self.FOLLOW_struct_declarator_list_in_struct_declaration534)
                 self.struct_declarator_list()
                 self.following.pop()
                 if self.failed:
                     return 
-                self.match(self.input, 24, self.FOLLOW_24_in_struct_declaration531)
+                self.match(self.input, 25, self.FOLLOW_25_in_struct_declaration536)
                 if self.failed:
                     return 
 
@@ -1485,7 +1509,7 @@ class CParser(Parser):
 
 
     # $ANTLR start specifier_qualifier_list
-    # C.g:187:1: specifier_qualifier_list : ( type_qualifier | type_specifier )+ ;
+    # C.g:155:1: specifier_qualifier_list : ( type_qualifier | type_specifier )+ ;
     def specifier_qualifier_list(self, ):
 
         specifier_qualifier_list_StartIndex = self.input.index()
@@ -1494,47 +1518,47 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 15):
                     return 
 
-                # C.g:188:2: ( ( type_qualifier | type_specifier )+ )
-                # C.g:188:4: ( type_qualifier | type_specifier )+
-                # C.g:188:4: ( type_qualifier | type_specifier )+
+                # C.g:156:2: ( ( type_qualifier | type_specifier )+ )
+                # C.g:156:4: ( type_qualifier | type_specifier )+
+                # C.g:156:4: ( type_qualifier | type_specifier )+
                 cnt16 = 0
                 while True: #loop16
                     alt16 = 3
                     LA16 = self.input.LA(1)
                     if LA16 == IDENTIFIER:
                         LA16 = self.input.LA(2)
-                        if LA16 == EOF or LA16 == IDENTIFIER or LA16 == 31 or LA16 == 32 or LA16 == 33 or LA16 == 34 or LA16 == 35 or LA16 == 36 or LA16 == 37 or LA16 == 38 or LA16 == 39 or LA16 == 42 or LA16 == 43 or LA16 == 45 or LA16 == 46 or LA16 == 47 or LA16 == 48 or LA16 == 49 or LA16 == 51 or LA16 == 54:
-                            alt16 = 2
-                        elif LA16 == 50:
-                            LA16_22 = self.input.LA(3)
+                        if LA16 == 53:
+                            LA16_20 = self.input.LA(3)
 
                             if (self.synpred37()) :
                                 alt16 = 2
 
 
-                        elif LA16 == 44:
-                            LA16_23 = self.input.LA(3)
+                        elif LA16 == 51:
+                            LA16_21 = self.input.LA(3)
 
                             if (self.synpred37()) :
                                 alt16 = 2
 
 
-                        elif LA16 == 52:
-                            LA16_24 = self.input.LA(3)
+                        elif LA16 == 45:
+                            LA16_22 = self.input.LA(3)
 
                             if (self.synpred37()) :
                                 alt16 = 2
 
 
+                        elif LA16 == EOF or LA16 == IDENTIFIER or LA16 == 32 or LA16 == 33 or LA16 == 34 or LA16 == 35 or LA16 == 36 or LA16 == 37 or LA16 == 38 or LA16 == 39 or LA16 == 40 or LA16 == 43 or LA16 == 44 or LA16 == 46 or LA16 == 47 or LA16 == 48 or LA16 == 49 or LA16 == 50 or LA16 == 52 or LA16 == 55:
+                            alt16 = 2
 
-                    elif LA16 == 46 or LA16 == 47 or LA16 == 48 or LA16 == 49:
+                    elif LA16 == 47 or LA16 == 48 or LA16 == 49 or LA16 == 50:
                         alt16 = 1
-                    elif LA16 == 31 or LA16 == 32 or LA16 == 33 or LA16 == 34 or LA16 == 35 or LA16 == 36 or LA16 == 37 or LA16 == 38 or LA16 == 39 or LA16 == 42 or LA16 == 43 or LA16 == 45:
+                    elif LA16 == 32 or LA16 == 33 or LA16 == 34 or LA16 == 35 or LA16 == 36 or LA16 == 37 or LA16 == 38 or LA16 == 39 or LA16 == 40 or LA16 == 43 or LA16 == 44 or LA16 == 46:
                         alt16 = 2
 
                     if alt16 == 1:
-                        # C.g:188:6: type_qualifier
-                        self.following.append(self.FOLLOW_type_qualifier_in_specifier_qualifier_list544)
+                        # C.g:156:6: type_qualifier
+                        self.following.append(self.FOLLOW_type_qualifier_in_specifier_qualifier_list549)
                         self.type_qualifier()
                         self.following.pop()
                         if self.failed:
@@ -1542,8 +1566,8 @@ class CParser(Parser):
 
 
                     elif alt16 == 2:
-                        # C.g:188:23: type_specifier
-                        self.following.append(self.FOLLOW_type_specifier_in_specifier_qualifier_list548)
+                        # C.g:156:23: type_specifier
+                        self.following.append(self.FOLLOW_type_specifier_in_specifier_qualifier_list553)
                         self.type_specifier()
                         self.following.pop()
                         if self.failed:
@@ -1583,7 +1607,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declarator_list
-    # C.g:191:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ;
+    # C.g:159:1: struct_declarator_list : struct_declarator ( ',' struct_declarator )* ;
     def struct_declarator_list(self, ):
 
         struct_declarator_list_StartIndex = self.input.index()
@@ -1592,28 +1616,28 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 16):
                     return 
 
-                # C.g:192:2: ( struct_declarator ( ',' struct_declarator )* )
-                # C.g:192:4: struct_declarator ( ',' struct_declarator )*
-                self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list562)
+                # C.g:160:2: ( struct_declarator ( ',' struct_declarator )* )
+                # C.g:160:4: struct_declarator ( ',' struct_declarator )*
+                self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list567)
                 self.struct_declarator()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:192:22: ( ',' struct_declarator )*
+                # C.g:160:22: ( ',' struct_declarator )*
                 while True: #loop17
                     alt17 = 2
                     LA17_0 = self.input.LA(1)
 
-                    if (LA17_0 == 25) :
+                    if (LA17_0 == 26) :
                         alt17 = 1
 
 
                     if alt17 == 1:
-                        # C.g:192:23: ',' struct_declarator
-                        self.match(self.input, 25, self.FOLLOW_25_in_struct_declarator_list565)
+                        # C.g:160:23: ',' struct_declarator
+                        self.match(self.input, 26, self.FOLLOW_26_in_struct_declarator_list570)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list567)
+                        self.following.append(self.FOLLOW_struct_declarator_in_struct_declarator_list572)
                         self.struct_declarator()
                         self.following.pop()
                         if self.failed:
@@ -1643,7 +1667,7 @@ class CParser(Parser):
 
 
     # $ANTLR start struct_declarator
-    # C.g:195:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );
+    # C.g:163:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );
     def struct_declarator(self, ):
 
         struct_declarator_StartIndex = self.input.index()
@@ -1652,42 +1676,42 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 17):
                     return 
 
-                # C.g:196:2: ( declarator ( ':' constant_expression )? | ':' constant_expression )
+                # C.g:164:2: ( declarator ( ':' constant_expression )? | ':' constant_expression )
                 alt19 = 2
                 LA19_0 = self.input.LA(1)
 
-                if (LA19_0 == IDENTIFIER or LA19_0 == 50 or LA19_0 == 54) :
+                if (LA19_0 == IDENTIFIER or LA19_0 == 51 or LA19_0 == 55) :
                     alt19 = 1
-                elif (LA19_0 == 44) :
+                elif (LA19_0 == 45) :
                     alt19 = 2
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("195:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );", 19, 0, self.input)
+                    nvae = NoViableAltException("163:1: struct_declarator : ( declarator ( ':' constant_expression )? | ':' constant_expression );", 19, 0, self.input)
 
                     raise nvae
 
                 if alt19 == 1:
-                    # C.g:196:4: declarator ( ':' constant_expression )?
-                    self.following.append(self.FOLLOW_declarator_in_struct_declarator580)
+                    # C.g:164:4: declarator ( ':' constant_expression )?
+                    self.following.append(self.FOLLOW_declarator_in_struct_declarator585)
                     self.declarator()
                     self.following.pop()
                     if self.failed:
                         return 
-                    # C.g:196:15: ( ':' constant_expression )?
+                    # C.g:164:15: ( ':' constant_expression )?
                     alt18 = 2
                     LA18_0 = self.input.LA(1)
 
-                    if (LA18_0 == 44) :
+                    if (LA18_0 == 45) :
                         alt18 = 1
                     if alt18 == 1:
-                        # C.g:196:16: ':' constant_expression
-                        self.match(self.input, 44, self.FOLLOW_44_in_struct_declarator583)
+                        # C.g:164:16: ':' constant_expression
+                        self.match(self.input, 45, self.FOLLOW_45_in_struct_declarator588)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_constant_expression_in_struct_declarator585)
+                        self.following.append(self.FOLLOW_constant_expression_in_struct_declarator590)
                         self.constant_expression()
                         self.following.pop()
                         if self.failed:
@@ -1698,11 +1722,11 @@ class CParser(Parser):
 
 
                 elif alt19 == 2:
-                    # C.g:197:4: ':' constant_expression
-                    self.match(self.input, 44, self.FOLLOW_44_in_struct_declarator592)
+                    # C.g:165:4: ':' constant_expression
+                    self.match(self.input, 45, self.FOLLOW_45_in_struct_declarator597)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_constant_expression_in_struct_declarator594)
+                    self.following.append(self.FOLLOW_constant_expression_in_struct_declarator599)
                     self.constant_expression()
                     self.following.pop()
                     if self.failed:
@@ -1725,7 +1749,7 @@ class CParser(Parser):
 
 
     # $ANTLR start enum_specifier
-    # C.g:200:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );
+    # C.g:168:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );
     def enum_specifier(self, ):
 
         enum_specifier_StartIndex = self.input.index()
@@ -1734,37 +1758,37 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 18):
                     return 
 
-                # C.g:202:2: ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER )
+                # C.g:170:2: ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER )
                 alt20 = 3
                 LA20_0 = self.input.LA(1)
 
-                if (LA20_0 == 45) :
+                if (LA20_0 == 46) :
                     LA20_1 = self.input.LA(2)
 
-                    if (LA20_1 == 40) :
-                        alt20 = 1
-                    elif (LA20_1 == IDENTIFIER) :
-                        LA20_3 = self.input.LA(3)
+                    if (LA20_1 == IDENTIFIER) :
+                        LA20_2 = self.input.LA(3)
 
-                        if (LA20_3 == 40) :
+                        if (LA20_2 == 41) :
                             alt20 = 2
-                        elif (LA20_3 == EOF or LA20_3 == IDENTIFIER or LA20_3 == 24 or (27 <= LA20_3 <= 39) or (42 <= LA20_3 <= 52) or LA20_3 == 54) :
+                        elif (LA20_2 == EOF or LA20_2 == IDENTIFIER or LA20_2 == 25 or (28 <= LA20_2 <= 40) or (43 <= LA20_2 <= 53) or LA20_2 == 55) :
                             alt20 = 3
                         else:
                             if self.backtracking > 0:
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("200:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 20, 3, self.input)
+                            nvae = NoViableAltException("168:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 20, 2, self.input)
 
                             raise nvae
 
+                    elif (LA20_1 == 41) :
+                        alt20 = 1
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("200:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 20, 1, self.input)
+                        nvae = NoViableAltException("168:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 20, 1, self.input)
 
                         raise nvae
 
@@ -1773,55 +1797,55 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("200:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 20, 0, self.input)
+                    nvae = NoViableAltException("168:1: enum_specifier options {k=3; } : ( 'enum' '{' enumerator_list '}' | 'enum' IDENTIFIER '{' enumerator_list '}' | 'enum' IDENTIFIER );", 20, 0, self.input)
 
                     raise nvae
 
                 if alt20 == 1:
-                    # C.g:202:4: 'enum' '{' enumerator_list '}'
-                    self.match(self.input, 45, self.FOLLOW_45_in_enum_specifier612)
+                    # C.g:170:4: 'enum' '{' enumerator_list '}'
+                    self.match(self.input, 46, self.FOLLOW_46_in_enum_specifier617)
                     if self.failed:
                         return 
-                    self.match(self.input, 40, self.FOLLOW_40_in_enum_specifier614)
+                    self.match(self.input, 41, self.FOLLOW_41_in_enum_specifier619)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier616)
+                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier621)
                     self.enumerator_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 41, self.FOLLOW_41_in_enum_specifier618)
+                    self.match(self.input, 42, self.FOLLOW_42_in_enum_specifier623)
                     if self.failed:
                         return 
 
 
                 elif alt20 == 2:
-                    # C.g:203:4: 'enum' IDENTIFIER '{' enumerator_list '}'
-                    self.match(self.input, 45, self.FOLLOW_45_in_enum_specifier623)
+                    # C.g:171:4: 'enum' IDENTIFIER '{' enumerator_list '}'
+                    self.match(self.input, 46, self.FOLLOW_46_in_enum_specifier628)
                     if self.failed:
                         return 
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier625)
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier630)
                     if self.failed:
                         return 
-                    self.match(self.input, 40, self.FOLLOW_40_in_enum_specifier627)
+                    self.match(self.input, 41, self.FOLLOW_41_in_enum_specifier632)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier629)
+                    self.following.append(self.FOLLOW_enumerator_list_in_enum_specifier634)
                     self.enumerator_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 41, self.FOLLOW_41_in_enum_specifier631)
+                    self.match(self.input, 42, self.FOLLOW_42_in_enum_specifier636)
                     if self.failed:
                         return 
 
 
                 elif alt20 == 3:
-                    # C.g:204:4: 'enum' IDENTIFIER
-                    self.match(self.input, 45, self.FOLLOW_45_in_enum_specifier636)
+                    # C.g:172:4: 'enum' IDENTIFIER
+                    self.match(self.input, 46, self.FOLLOW_46_in_enum_specifier641)
                     if self.failed:
                         return 
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier638)
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enum_specifier643)
                     if self.failed:
                         return 
 
@@ -1842,7 +1866,7 @@ class CParser(Parser):
 
 
     # $ANTLR start enumerator_list
-    # C.g:207:1: enumerator_list : enumerator ( ',' enumerator )* ;
+    # C.g:175:1: enumerator_list : enumerator ( ',' enumerator )* ;
     def enumerator_list(self, ):
 
         enumerator_list_StartIndex = self.input.index()
@@ -1851,28 +1875,28 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 19):
                     return 
 
-                # C.g:208:2: ( enumerator ( ',' enumerator )* )
-                # C.g:208:4: enumerator ( ',' enumerator )*
-                self.following.append(self.FOLLOW_enumerator_in_enumerator_list649)
+                # C.g:176:2: ( enumerator ( ',' enumerator )* )
+                # C.g:176:4: enumerator ( ',' enumerator )*
+                self.following.append(self.FOLLOW_enumerator_in_enumerator_list654)
                 self.enumerator()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:208:15: ( ',' enumerator )*
+                # C.g:176:15: ( ',' enumerator )*
                 while True: #loop21
                     alt21 = 2
                     LA21_0 = self.input.LA(1)
 
-                    if (LA21_0 == 25) :
+                    if (LA21_0 == 26) :
                         alt21 = 1
 
 
                     if alt21 == 1:
-                        # C.g:208:16: ',' enumerator
-                        self.match(self.input, 25, self.FOLLOW_25_in_enumerator_list652)
+                        # C.g:176:16: ',' enumerator
+                        self.match(self.input, 26, self.FOLLOW_26_in_enumerator_list657)
                         if self.failed:
                             return 
-                        self.following.append(self.FOLLOW_enumerator_in_enumerator_list654)
+                        self.following.append(self.FOLLOW_enumerator_in_enumerator_list659)
                         self.enumerator()
                         self.following.pop()
                         if self.failed:
@@ -1902,7 +1926,7 @@ class CParser(Parser):
 
 
     # $ANTLR start enumerator
-    # C.g:211:1: enumerator : IDENTIFIER ( '=' constant_expression )? ;
+    # C.g:179:1: enumerator : IDENTIFIER ( '=' constant_expression )? ;
     def enumerator(self, ):
 
         enumerator_StartIndex = self.input.index()
@@ -1911,23 +1935,23 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 20):
                     return 
 
-                # C.g:212:2: ( IDENTIFIER ( '=' constant_expression )? )
-                # C.g:212:4: IDENTIFIER ( '=' constant_expression )?
-                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enumerator667)
+                # C.g:180:2: ( IDENTIFIER ( '=' constant_expression )? )
+                # C.g:180:4: IDENTIFIER ( '=' constant_expression )?
+                self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_enumerator672)
                 if self.failed:
                     return 
-                # C.g:212:15: ( '=' constant_expression )?
+                # C.g:180:15: ( '=' constant_expression )?
                 alt22 = 2
                 LA22_0 = self.input.LA(1)
 
-                if (LA22_0 == 26) :
+                if (LA22_0 == 27) :
                     alt22 = 1
                 if alt22 == 1:
-                    # C.g:212:16: '=' constant_expression
-                    self.match(self.input, 26, self.FOLLOW_26_in_enumerator670)
+                    # C.g:180:16: '=' constant_expression
+                    self.match(self.input, 27, self.FOLLOW_27_in_enumerator675)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_constant_expression_in_enumerator672)
+                    self.following.append(self.FOLLOW_constant_expression_in_enumerator677)
                     self.constant_expression()
                     self.following.pop()
                     if self.failed:
@@ -1954,7 +1978,7 @@ class CParser(Parser):
 
 
     # $ANTLR start type_qualifier
-    # C.g:215:1: type_qualifier : ( 'const' | 'volatile' | 'IN' | 'OUT' );
+    # C.g:183:1: type_qualifier : ( 'const' | 'volatile' | 'IN' | 'OUT' );
     def type_qualifier(self, ):
 
         type_qualifier_StartIndex = self.input.index()
@@ -1963,9 +1987,9 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 21):
                     return 
 
-                # C.g:216:2: ( 'const' | 'volatile' | 'IN' | 'OUT' )
+                # C.g:184:2: ( 'const' | 'volatile' | 'IN' | 'OUT' )
                 # C.g:
-                if (46 <= self.input.LA(1) <= 49):
+                if (47 <= self.input.LA(1) <= 50):
                     self.input.consume();
                     self.errorRecovery = False
                     self.failed = False
@@ -2001,7 +2025,7 @@ class CParser(Parser):
 
 
     # $ANTLR start declarator
-    # C.g:222:1: declarator : ( ( pointer )? direct_declarator | pointer );
+    # C.g:190:1: declarator : ( ( pointer )? direct_declarator | pointer );
     def declarator(self, ):
 
         declarator_StartIndex = self.input.index()
@@ -2010,11 +2034,11 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 22):
                     return 
 
-                # C.g:223:2: ( ( pointer )? direct_declarator | pointer )
+                # C.g:191:2: ( ( pointer )? direct_declarator | pointer )
                 alt24 = 2
                 LA24_0 = self.input.LA(1)
 
-                if (LA24_0 == 54) :
+                if (LA24_0 == 55) :
                     LA24_1 = self.input.LA(2)
 
                     if (self.synpred49()) :
@@ -2026,32 +2050,32 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("222:1: declarator : ( ( pointer )? direct_declarator | pointer );", 24, 1, self.input)
+                        nvae = NoViableAltException("190:1: declarator : ( ( pointer )? direct_declarator | pointer );", 24, 1, self.input)
 
                         raise nvae
 
-                elif (LA24_0 == IDENTIFIER or LA24_0 == 50) :
+                elif (LA24_0 == IDENTIFIER or LA24_0 == 51) :
                     alt24 = 1
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("222:1: declarator : ( ( pointer )? direct_declarator | pointer );", 24, 0, self.input)
+                    nvae = NoViableAltException("190:1: declarator : ( ( pointer )? direct_declarator | pointer );", 24, 0, self.input)
 
                     raise nvae
 
                 if alt24 == 1:
-                    # C.g:223:4: ( pointer )? direct_declarator
-                    # C.g:223:4: ( pointer )?
+                    # C.g:191:4: ( pointer )? direct_declarator
+                    # C.g:191:4: ( pointer )?
                     alt23 = 2
                     LA23_0 = self.input.LA(1)
 
-                    if (LA23_0 == 54) :
+                    if (LA23_0 == 55) :
                         alt23 = 1
                     if alt23 == 1:
                         # C.g:0:0: pointer
-                        self.following.append(self.FOLLOW_pointer_in_declarator711)
+                        self.following.append(self.FOLLOW_pointer_in_declarator716)
                         self.pointer()
                         self.following.pop()
                         if self.failed:
@@ -2059,7 +2083,7 @@ class CParser(Parser):
 
 
 
-                    self.following.append(self.FOLLOW_direct_declarator_in_declarator714)
+                    self.following.append(self.FOLLOW_direct_declarator_in_declarator719)
                     self.direct_declarator()
                     self.following.pop()
                     if self.failed:
@@ -2067,8 +2091,8 @@ class CParser(Parser):
 
 
                 elif alt24 == 2:
-                    # C.g:224:4: pointer
-                    self.following.append(self.FOLLOW_pointer_in_declarator719)
+                    # C.g:192:4: pointer
+                    self.following.append(self.FOLLOW_pointer_in_declarator724)
                     self.pointer()
                     self.following.pop()
                     if self.failed:
@@ -2091,8 +2115,9 @@ class CParser(Parser):
 
 
     # $ANTLR start direct_declarator
-    # C.g:227:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ );
+    # C.g:195:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ );
     def direct_declarator(self, ):
+        self.Symbols_stack.append(Symbols_scope())
 
         direct_declarator_StartIndex = self.input.index()
         try:
@@ -2100,50 +2125,50 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 23):
                     return 
 
-                # C.g:228:2: ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ )
+                # C.g:197:2: ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ )
                 alt27 = 2
                 LA27_0 = self.input.LA(1)
 
                 if (LA27_0 == IDENTIFIER) :
                     alt27 = 1
-                elif (LA27_0 == 50) :
+                elif (LA27_0 == 51) :
                     alt27 = 2
                 else:
                     if self.backtracking > 0:
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("227:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ );", 27, 0, self.input)
+                    nvae = NoViableAltException("195:1: direct_declarator : ( IDENTIFIER ( declarator_suffix )* | '(' declarator ')' ( declarator_suffix )+ );", 27, 0, self.input)
 
                     raise nvae
 
                 if alt27 == 1:
-                    # C.g:228:6: IDENTIFIER ( declarator_suffix )*
-                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator732)
+                    # C.g:197:4: IDENTIFIER ( declarator_suffix )*
+                    self.match(self.input, IDENTIFIER, self.FOLLOW_IDENTIFIER_in_direct_declarator740)
                     if self.failed:
                         return 
-                    # C.g:228:17: ( declarator_suffix )*
+                    # C.g:197:15: ( declarator_suffix )*
                     while True: #loop25
                         alt25 = 2
                         LA25_0 = self.input.LA(1)
 
-                        if (LA25_0 == 50) :
+                        if (LA25_0 == 51) :
                             LA25 = self.input.LA(2)
-                            if LA25 == 51:
+                            if LA25 == 52:
                                 LA25_26 = self.input.LA(3)
 
                                 if (self.synpred50()) :
                                     alt25 = 1
 
 
-                            elif LA25 == 27 or LA25 == 28 or LA25 == 29 or LA25 == 30:
+                            elif LA25 == IDENTIFIER:
                                 LA25_27 = self.input.LA(3)
 
                                 if (self.synpred50()) :
                                     alt25 = 1
 
 
-                            elif LA25 == 31:
+                            elif LA25 == 28 or LA25 == 29 or LA25 == 30 or LA25 == 31:
                                 LA25_28 = self.input.LA(3)
 
                                 if (self.synpred50()) :
@@ -2206,28 +2231,28 @@ class CParser(Parser):
                                     alt25 = 1
 
 
-                            elif LA25 == 42 or LA25 == 43:
+                            elif LA25 == 40:
                                 LA25_37 = self.input.LA(3)
 
                                 if (self.synpred50()) :
                                     alt25 = 1
 
 
-                            elif LA25 == 45:
+                            elif LA25 == 43 or LA25 == 44:
                                 LA25_38 = self.input.LA(3)
 
                                 if (self.synpred50()) :
                                     alt25 = 1
 
 
-                            elif LA25 == IDENTIFIER:
+                            elif LA25 == 46:
                                 LA25_39 = self.input.LA(3)
 
                                 if (self.synpred50()) :
                                     alt25 = 1
 
 
-                            elif LA25 == 46 or LA25 == 47 or LA25 == 48 or LA25 == 49:
+                            elif LA25 == 47 or LA25 == 48 or LA25 == 49 or LA25 == 50:
                                 LA25_40 = self.input.LA(3)
 
                                 if (self.synpred50()) :
@@ -2235,16 +2260,16 @@ class CParser(Parser):
 
 
 
-                        elif (LA25_0 == 52) :
+                        elif (LA25_0 == 53) :
                             LA25 = self.input.LA(2)
-                            if LA25 == 53:
+                            if LA25 == 54:
                                 LA25_44 = self.input.LA(3)
 
                                 if (self.synpred50()) :
                                     alt25 = 1
 
 
-                            elif LA25 == 50:
+                            elif LA25 == 51:
                                 LA25_45 = self.input.LA(3)
 
                                 if (self.synpred50()) :
@@ -2265,28 +2290,28 @@ class CParser(Parser):
                                     alt25 = 1
 
 
-                            elif LA25 == 60:
+                            elif LA25 == 61:
                                 LA25_48 = self.input.LA(3)
 
                                 if (self.synpred50()) :
                                     alt25 = 1
 
 
-                            elif LA25 == 61:
+                            elif LA25 == 62:
                                 LA25_49 = self.input.LA(3)
 
                                 if (self.synpred50()) :
                                     alt25 = 1
 
 
-                            elif LA25 == 54 or LA25 == 56 or LA25 == 57 or LA25 == 65 or LA25 == 66 or LA25 == 67:
+                            elif LA25 == 55 or LA25 == 57 or LA25 == 58 or LA25 == 66 or LA25 == 67 or LA25 == 68:
                                 LA25_50 = self.input.LA(3)
 
                                 if (self.synpred50()) :
                                     alt25 = 1
 
 
-                            elif LA25 == 62:
+                            elif LA25 == 63:
                                 LA25_51 = self.input.LA(3)
 
                                 if (self.synpred50()) :
@@ -2298,7 +2323,7 @@ class CParser(Parser):
 
                         if alt25 == 1:
                             # C.g:0:0: declarator_suffix
-                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator734)
+                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator742)
                             self.declarator_suffix()
                             self.following.pop()
                             if self.failed:
@@ -2312,111 +2337,111 @@ class CParser(Parser):
 
 
                 elif alt27 == 2:
-                    # C.g:230:5: '(' declarator ')' ( declarator_suffix )+
-                    self.match(self.input, 50, self.FOLLOW_50_in_direct_declarator745)
+                    # C.g:199:4: '(' declarator ')' ( declarator_suffix )+
+                    self.match(self.input, 51, self.FOLLOW_51_in_direct_declarator752)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_declarator_in_direct_declarator747)
+                    self.following.append(self.FOLLOW_declarator_in_direct_declarator754)
                     self.declarator()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 51, self.FOLLOW_51_in_direct_declarator749)
+                    self.match(self.input, 52, self.FOLLOW_52_in_direct_declarator756)
                     if self.failed:
                         return 
-                    # C.g:230:24: ( declarator_suffix )+
+                    # C.g:199:23: ( declarator_suffix )+
                     cnt26 = 0
                     while True: #loop26
                         alt26 = 2
                         LA26_0 = self.input.LA(1)
 
-                        if (LA26_0 == 50) :
+                        if (LA26_0 == 51) :
                             LA26 = self.input.LA(2)
-                            if LA26 == 51:
+                            if LA26 == 52:
                                 LA26_26 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 27 or LA26 == 28 or LA26 == 29 or LA26 == 30:
+                            elif LA26 == 28 or LA26 == 29 or LA26 == 30 or LA26 == 31:
                                 LA26_27 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 31:
+                            elif LA26 == 32:
                                 LA26_28 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 32:
+                            elif LA26 == 33:
                                 LA26_29 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 33:
+                            elif LA26 == 34:
                                 LA26_30 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 34:
+                            elif LA26 == 35:
                                 LA26_31 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 35:
+                            elif LA26 == 36:
                                 LA26_32 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 36:
+                            elif LA26 == 37:
                                 LA26_33 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 37:
+                            elif LA26 == 38:
                                 LA26_34 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 38:
+                            elif LA26 == 39:
                                 LA26_35 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 39:
+                            elif LA26 == 40:
                                 LA26_36 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 42 or LA26 == 43:
+                            elif LA26 == 43 or LA26 == 44:
                                 LA26_37 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 45:
+                            elif LA26 == 46:
                                 LA26_38 = self.input.LA(3)
 
                                 if (self.synpred52()) :
@@ -2430,7 +2455,7 @@ class CParser(Parser):
                                     alt26 = 1
 
 
-                            elif LA26 == 46 or LA26 == 47 or LA26 == 48 or LA26 == 49:
+                            elif LA26 == 47 or LA26 == 48 or LA26 == 49 or LA26 == 50:
                                 LA26_40 = self.input.LA(3)
 
                                 if (self.synpred52()) :
@@ -2438,16 +2463,16 @@ class CParser(Parser):
 
 
 
-                        elif (LA26_0 == 52) :
+                        elif (LA26_0 == 53) :
                             LA26 = self.input.LA(2)
-                            if LA26 == 53:
+                            if LA26 == 54:
                                 LA26_44 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 50:
+                            elif LA26 == 51:
                                 LA26_45 = self.input.LA(3)
 
                                 if (self.synpred52()) :
@@ -2468,28 +2493,28 @@ class CParser(Parser):
                                     alt26 = 1
 
 
-                            elif LA26 == 60:
+                            elif LA26 == 61:
                                 LA26_48 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 61:
+                            elif LA26 == 62:
                                 LA26_49 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 54 or LA26 == 56 or LA26 == 57 or LA26 == 65 or LA26 == 66 or LA26 == 67:
+                            elif LA26 == 55 or LA26 == 57 or LA26 == 58 or LA26 == 66 or LA26 == 67 or LA26 == 68:
                                 LA26_50 = self.input.LA(3)
 
                                 if (self.synpred52()) :
                                     alt26 = 1
 
 
-                            elif LA26 == 62:
+                            elif LA26 == 63:
                                 LA26_51 = self.input.LA(3)
 
                                 if (self.synpred52()) :
@@ -2501,7 +2526,7 @@ class CParser(Parser):
 
                         if alt26 == 1:
                             # C.g:0:0: declarator_suffix
-                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator751)
+                            self.following.append(self.FOLLOW_declarator_suffix_in_direct_declarator758)
                             self.declarator_suffix()
                             self.following.pop()
                             if self.failed:
@@ -2532,6 +2557,8 @@ class CParser(Parser):
             if self.backtracking > 0:
                 self.memoize(self.input, 23, direct_declarator_StartIndex)
 
+            self.Symbols_stack.pop()
+
             pass
 
         return 
@@ -2540,7 +2567,7 @@ class CParser(Parser):
 
 
     # $ANTLR start declarator_suffix
-    # C.g:233:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );
+    # C.g:202:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );
     def declarator_suffix(self, ):
 
         declarator_suffix_StartIndex = self.input.index()
@@ -2549,31 +2576,31 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 24):
                     return 
 
-                # C.g:234:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )
+                # C.g:203:2: ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' )
                 alt28 = 5
                 LA28_0 = self.input.LA(1)
 
-                if (LA28_0 == 52) :
+                if (LA28_0 == 53) :
                     LA28_1 = self.input.LA(2)
 
-                    if (LA28_1 == 53) :
+                    if (LA28_1 == 54) :
                         alt28 = 2
-                    elif ((IDENTIFIER <= LA28_1 <= FLOATING_POINT_LITERAL) or LA28_1 == 50 or LA28_1 == 54 or (56 <= LA28_1 <= 57) or (60 <= LA28_1 <= 62) or (65 <= LA28_1 <= 67)) :
+                    elif ((IDENTIFIER <= LA28_1 <= FLOATING_POINT_LITERAL) or LA28_1 == 51 or LA28_1 == 55 or (57 <= LA28_1 <= 58) or (61 <= LA28_1 <= 63) or (66 <= LA28_1 <= 68)) :
                         alt28 = 1
                     else:
                         if self.backtracking > 0:
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("233:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 28, 1, self.input)
+                        nvae = NoViableAltException("202:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 28, 1, self.input)
 
                         raise nvae
 
-                elif (LA28_0 == 50) :
+                elif (LA28_0 == 51) :
                     LA28 = self.input.LA(2)
-                    if LA28 == 51:
+                    if LA28 == 52:
                         alt28 = 5
-                    elif LA28 == 27 or LA28 == 28 or LA28 == 29 or LA28 == 30 or LA28 == 31 or LA28 == 32 or LA28 == 33 or LA28 == 34 or LA28 == 35 or LA28 == 36 or LA28 == 37 or LA28 == 38 or LA28 == 39 or LA28 == 42 or LA28 == 43 or LA28 == 45 or LA28 == 46 or LA28 == 47 or LA28 == 48 or LA28 == 49:
+                    elif LA28 == 28 or LA28 == 29 or LA28 == 30 or LA28 == 31 or LA28 == 32 or LA28 == 33 or LA28 == 34 or LA28 == 35 or LA28 == 36 or LA28 == 37 or LA28 == 38 or LA28 == 39 or LA28 == 40 or LA28 == 43 or LA28 == 44 or LA28 == 46 or LA28 == 47 or LA28 == 48 or LA28 == 49 or LA28 == 50:
                         alt28 = 3
                     elif LA28 == IDENTIFIER:
                         LA28_24 = self.input.LA(3)
@@ -2587,7 +2614,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("233:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 28, 24, self.input)
+                            nvae = NoViableAltException("202:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 28, 24, self.input)
 
                             raise nvae
 
@@ -2596,7 +2623,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("233:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 28, 2, self.input)
+                        nvae = NoViableAltException("202:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 28, 2, self.input)
 
                         raise nvae
 
@@ -2605,71 +2632,71 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("233:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 28, 0, self.input)
+                    nvae = NoViableAltException("202:1: declarator_suffix : ( '[' constant_expression ']' | '[' ']' | '(' parameter_type_list ')' | '(' identifier_list ')' | '(' ')' );", 28, 0, self.input)
 
                     raise nvae
 
                 if alt28 == 1:
-                    # C.g:234:6: '[' constant_expression ']'
-                    self.match(self.input, 52, self.FOLLOW_52_in_declarator_suffix765)
+                    # C.g:203:6: '[' constant_expression ']'
+                    self.match(self.input, 53, self.FOLLOW_53_in_declarator_suffix772)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_constant_expression_in_declarator_suffix767)
+                    self.following.append(self.FOLLOW_constant_expression_in_declarator_suffix774)
                     self.constant_expression()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 53, self.FOLLOW_53_in_declarator_suffix769)
+                    self.match(self.input, 54, self.FOLLOW_54_in_declarator_suffix776)
                     if self.failed:
                         return 
 
 
                 elif alt28 == 2:
-                    # C.g:235:9: '[' ']'
-                    self.match(self.input, 52, self.FOLLOW_52_in_declarator_suffix779)
+                    # C.g:204:9: '[' ']'
+                    self.match(self.input, 53, self.FOLLOW_53_in_declarator_suffix786)
                     if self.failed:
                         return 
-                    self.match(self.input, 53, self.FOLLOW_53_in_declarator_suffix781)
+                    self.match(self.input, 54, self.FOLLOW_54_in_declarator_suffix788)
                     if self.failed:
                         return 
 
 
                 elif alt28 == 3:
-                    # C.g:236:9: '(' parameter_type_list ')'
-                    self.match(self.input, 50, self.FOLLOW_50_in_declarator_suffix791)
+                    # C.g:205:9: '(' parameter_type_list ')'
+                    self.match(self.input, 51, self.FOLLOW_51_in_declarator_suffix798)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_parameter_type_list_in_declarator_suffix793)
+                    self.following.append(self.FOLLOW_parameter_type_list_in_declarator_suffix800)
                     self.parameter_type_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 51, self.FOLLOW_51_in_declarator_suffix795)
+                    self.match(self.input, 52, self.FOLLOW_52_in_declarator_suffix802)
                     if self.failed:
                         return 
 
 
                 elif alt28 == 4:
-                    # C.g:237:9: '(' identifier_list ')'
-                    self.match(self.input, 50, self.FOLLOW_50_in_declarator_suffix805)
+                    # C.g:206:9: '(' identifier_list ')'
+                    self.match(self.input, 51, self.FOLLOW_51_in_declarator_suffix812)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_identifier_list_in_declarator_suffix807)
+                    self.following.append(self.FOLLOW_identifier_list_in_declarator_suffix814)
                     self.identifier_list()
                     self.following.pop()
                     if self.failed:
                         return 
-                    self.match(self.input, 51, self.FOLLOW_51_in_declarator_suffix809)
+                    self.match(self.input, 52, self.FOLLOW_52_in_declarator_suffix816)
                     if self.failed:
                         return 
 
 
                 elif alt28 == 5:
-                    # C.g:238:9: '(' ')'
-                    self.match(self.input, 50, self.FOLLOW_50_in_declarator_suffix819)
+                    # C.g:207:9: '(' ')'
+                    self.match(self.input, 51, self.FOLLOW_51_in_declarator_suffix826)
                     if self.failed:
                         return 
-                    self.match(self.input, 51, self.FOLLOW_51_in_declarator_suffix821)
+                    self.match(self.input, 52, self.FOLLOW_52_in_declarator_suffix828)
                     if self.failed:
                         return 
 
@@ -2690,28 +2717,28 @@ class CParser(Parser):
 
 
     # $ANTLR start pointer
-    # C.g:241:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );
+    # C.g:210:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | s= '*' );
     def pointer(self, ):
 
         pointer_StartIndex = self.input.index()
+        s = None
+
         try:
             try:
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 25):
                     return 
 
-                # C.g:242:2: ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' )
+                # C.g:211:2: ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | s= '*' )
                 alt31 = 3
                 LA31_0 = self.input.LA(1)
 
-                if (LA31_0 == 54) :
+                if (LA31_0 == 55) :
                     LA31 = self.input.LA(2)
-                    if LA31 == EOF or LA31 == IDENTIFIER or LA31 == 23 or LA31 == 24 or LA31 == 25 or LA31 == 26 or LA31 == 27 or LA31 == 28 or LA31 == 29 or LA31 == 30 or LA31 == 31 or LA31 == 32 or LA31 == 33 or LA31 == 34 or LA31 == 35 or LA31 == 36 or LA31 == 37 or LA31 == 38 or LA31 == 39 or LA31 == 40 or LA31 == 42 or LA31 == 43 or LA31 == 44 or LA31 == 45 or LA31 == 50 or LA31 == 51 or LA31 == 52:
-                        alt31 = 3
-                    elif LA31 == 46 or LA31 == 47 or LA31 == 48 or LA31 == 49:
-                        LA31_17 = self.input.LA(3)
+                    if LA31 == 55:
+                        LA31_2 = self.input.LA(3)
 
-                        if (self.synpred59()) :
-                            alt31 = 1
+                        if (self.synpred60()) :
+                            alt31 = 2
                         elif (True) :
                             alt31 = 3
                         else:
@@ -2719,15 +2746,17 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("241:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 31, 17, self.input)
+                            nvae = NoViableAltException("210:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | s= '*' );", 31, 2, self.input)
 
                             raise nvae
 
-                    elif LA31 == 54:
-                        LA31_25 = self.input.LA(3)
+                    elif LA31 == EOF or LA31 == IDENTIFIER or LA31 == 24 or LA31 == 25 or LA31 == 26 or LA31 == 27 or LA31 == 28 or LA31 == 29 or LA31 == 30 or LA31 == 31 or LA31 == 32 or LA31 == 33 or LA31 == 34 or LA31 == 35 or LA31 == 36 or LA31 == 37 or LA31 == 38 or LA31 == 39 or LA31 == 40 or LA31 == 41 or LA31 == 43 or LA31 == 44 or LA31 == 45 or LA31 == 46 or LA31 == 51 or LA31 == 52 or LA31 == 53:
+                        alt31 = 3
+                    elif LA31 == 47 or LA31 == 48 or LA31 == 49 or LA31 == 50:
+                        LA31_18 = self.input.LA(3)
 
-                        if (self.synpred60()) :
-                            alt31 = 2
+                        if (self.synpred59()) :
+                            alt31 = 1
                         elif (True) :
                             alt31 = 3
                         else:
@@ -2735,7 +2764,7 @@ class CParser(Parser):
                                 self.failed = True
                                 return 
 
-                            nvae = NoViableAltException("241:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 31, 25, self.input)
+                            nvae = NoViableAltException("210:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | s= '*' );", 31, 18, self.input)
 
                             raise nvae
 
@@ -2744,7 +2773,7 @@ class CParser(Parser):
                             self.failed = True
                             return 
 
-                        nvae = NoViableAltException("241:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 31, 1, self.input)
+                        nvae = NoViableAltException("210:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | s= '*' );", 31, 1, self.input)
 
                         raise nvae
 
@@ -2753,22 +2782,22 @@ class CParser(Parser):
                         self.failed = True
                         return 
 
-                    nvae = NoViableAltException("241:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | '*' );", 31, 0, self.input)
+                    nvae = NoViableAltException("210:1: pointer : ( '*' ( type_qualifier )+ ( pointer )? | '*' pointer | s= '*' );", 31, 0, self.input)
 
                     raise nvae
 
                 if alt31 == 1:
-                    # C.g:242:4: '*' ( type_qualifier )+ ( pointer )?
-                    self.match(self.input, 54, self.FOLLOW_54_in_pointer832)
+                    # C.g:211:4: '*' ( type_qualifier )+ ( pointer )?
+                    self.match(self.input, 55, self.FOLLOW_55_in_pointer839)
                     if self.failed:
                         return 
-                    # C.g:242:8: ( type_qualifier )+
+                    # C.g:211:8: ( type_qualifier )+
                     cnt29 = 0
                     while True: #loop29
                         alt29 = 2
                         LA29_0 = self.input.LA(1)
 
-                        if ((46 <= LA29_0 <= 49)) :
+                        if ((47 <= LA29_0 <= 50)) :
                             LA29_17 = self.input.LA(2)
 
                             if (self.synpred57()) :
@@ -2779,7 +2808,7 @@ class CParser(Parser):
 
                         if alt29 == 1:
                             # C.g:0:0: type_qualifier
-                            self.following.append(self.FOLLOW_type_qualifier_in_pointer834)
+                            self.following.append(self.FOLLOW_type_qualifier_in_pointer841)
                             self.type_qualifier()
                             self.following.pop()
                             if self.failed:
@@ -2800,18 +2829,18 @@ class CParser(Parser):
                         cnt29 += 1
 
 
-                    # C.g:242:24: ( pointer )?
+                    # C.g:211:24: ( pointer )?
                     alt30 = 2
                     LA30_0 = self.input.LA(1)
 
-                    if (LA30_0 == 54) :
+                    if (LA30_0 == 55) :
                         LA30_1 = self.input.LA(2)
 
                         if (self.synpred58()) :
                             alt30 = 1
                     if alt30 == 1:
                         # C.g:0:0: pointer
-                        self.following.append(self.FOLLOW_pointer_in_pointer837)
+                        self.following.append(self.FOLLOW_pointer_in_pointer844)
                         self.pointer()
                         self.following.pop()
                         if self.failed:
@@ -2822,11 +2851,11 @@ class CParser(Parser):
 
 
                 elif alt31 == 2:
-                    # C.g:243:4: '*' pointer
-                    self.match(self.input, 54, self.FOLLOW_54_in_pointer843)
+                    # C.g:212:4: '*' pointer
+                    self.match(self.input, 55, self.FOLLOW_55_in_pointer850)
                     if self.failed:
                         return 
-                    self.following.append(self.FOLLOW_pointer_in_pointer845)
+                    self.following.append(self.FOLLOW_pointer_in_pointer852)
                     self.pointer()
                     self.following.pop()
                     if self.failed:
@@ -2834,8 +2863,9 @@ class CParser(Parser):
 
 
                 elif alt31 == 3:
-                    # C.g:244:4: '*'
-                    self.match(self.input, 54, self.FOLLOW_54_in_pointer850)
+                    # C.g:213:4: s= '*'
+                    s = self.input.LT(1)
+                    self.match(self.input, 55, self.FOLLOW_55_in_pointer859)
                     if self.failed:
                         return 
 
@@ -2856,7 +2886,7 @@ class CParser(Parser):
 
 
     # $ANTLR start parameter_type_list
-    # C.g:247:1: parameter_type_list : parameter_list ( ',' '...' )? ;
+    # C.g:216:1: parameter_type_list : parameter_list ( ',' '...' )? ;
     def parameter_type_list(self, ):
 
         parameter_type_list_StartIndex = self.input.index()
@@ -2865,25 +2895,25 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 26):
                     return 
 
-                # C.g:248:2: ( parameter_list ( ',' '...' )? )
-                # C.g:248:4: parameter_list ( ',' '...' )?
-                self.following.append(self.FOLLOW_parameter_list_in_parameter_type_list861)
+                # C.g:217:2: ( parameter_list ( ',' '...' )? )
+                # C.g:217:4: parameter_list ( ',' '...' )?
+                self.following.append(self.FOLLOW_parameter_list_in_parameter_type_list870)
                 self.parameter_list()
                 self.following.pop()
                 if self.failed:
                     return 
-                # C.g:248:19: ( ',' '...' )?
+                # C.g:217:19: ( ',' '...' )?
                 alt32 = 2
                 LA32_0 = self.input.LA(1)
 
-                if (LA32_0 == 25) :
+                if (LA32_0 == 26) :
                     alt32 = 1
                 if alt32 == 1:
-                    # C.g:248:20: ',' '...'
-                    self.match(self.input, 25, self.FOLLOW_25_in_parameter_type_list864)
+                    # C.g:217:20: ',' '...'
+                    self.match(self.input, 26, self.FOLLOW_26_in_parameter_type_list873)
                     if self.failed:
                         return 
-                    self.match(self.input, 55, self.FOLLOW_55_in_parameter_type_list866)
+                    self.match(self.input, 56, self.FOLLOW_56_in_parameter_type_list875)
                     if self.failed:
                         return 
 
@@ -2908,7 +2938,7 @@ class CParser(Parser):
 
 
     # $ANTLR start parameter_list
-    # C.g:251:1: parameter_list : parameter_declaration ( ',' parameter_declaration )* ;
+    # C.g:220:1: parameter_list : parameter_declaration ( ',' parameter_declaration )* ;
     def parameter_list(self, ):
 
         parameter_list_StartIndex = self.input.index()
@@ -2917,33 +2947,33 @@ class CParser(Parser):
                 if self.backtracking > 0 and self.alreadyParsedRule(self.input, 27):
                     return 
 
-                # C.g:252:2: ( parameter_declaration ( ',' parameter_declaration )* )
-                # C.g:252:4: parameter_declaration ( ',' parameter_declaration )*
-                self.followi