]> granicus.if.org Git - python/commitdiff
SF patch #1007189, multi-line imports, for instance:
authorAnthony Baxter <anthonybaxter@gmail.com>
Tue, 31 Aug 2004 10:07:13 +0000 (10:07 +0000)
committerAnthony Baxter <anthonybaxter@gmail.com>
Tue, 31 Aug 2004 10:07:13 +0000 (10:07 +0000)
"from blah import (foo, bar
baz, bongo)"

14 files changed:
Doc/ref/ref6.tex
Grammar/Grammar
Include/graminit.h
Lib/compiler/transformer.py
Lib/symbol.py
Lib/test/output/test_grammar
Lib/test/test_compile.py
Lib/test/test_grammar.py
Lib/test/test_parser.py
Misc/NEWS
Modules/parsermodule.c
Python/compile.c
Python/future.c
Python/graminit.c

index 1017acaa4767d381bf5d02c35a08f218fae13149..e74a7dded07812ef8e777ed50a921c62d375d77a 100644 (file)
@@ -623,6 +623,9 @@ It continues with the next cycle of the nearest enclosing loop.
   \productioncont{| "from" \token{module} "import" \token{identifier}
                     ["as" \token{name}]}
   \productioncont{  ( "," \token{identifier} ["as" \token{name}] )*}
+  \productioncont{| "from" \token{module} "import" "(" \token{identifier}
+                    ["as" \token{name}]}
+  \productioncont{  ( "," \token{identifier} ["as" \token{name}] )* [","] ")"}
   \productioncont{| "from" \token{module} "import" "*"}
   \production{module}
              {(\token{identifier} ".")* \token{identifier}}
@@ -744,8 +747,8 @@ before the release in which the feature becomes standard.
 
 \begin{productionlist}[*]
   \production{future_statement}
-             {"from" "__future__" "import" feature ["as" name]}
-  \productioncont{("," feature ["as" name])*}
+             {"from" "__future__" "import" feature ["as" name] ("," feature ["as" name])*}
+  \productioncont{| "from" "__future__" "import" "(" feature ["as" name] ("," feature ["as" name])* [","] ")"}
   \production{feature}{identifier}
   \production{name}{identifier}
 \end{productionlist}
index 8a7eb59243e69d8b9c1bf0c41ed2ef0e88288298..9e4dad8078f40ecebd25f6c13eeaed971e2aaf8a 100644 (file)
@@ -51,9 +51,13 @@ continue_stmt: 'continue'
 return_stmt: 'return' [testlist]
 yield_stmt: 'yield' testlist
 raise_stmt: 'raise' [test [',' test [',' test]]]
-import_stmt: 'import' dotted_as_name (',' dotted_as_name)* | 'from' dotted_name 'import' ('*' | import_as_name (',' import_as_name)*)
+import_stmt: import_name | import_from
+import_name: 'import' dotted_as_names
+import_from: 'from' dotted_name 'import' ('*' | '(' import_as_names ')' | import_as_names)
 import_as_name: NAME [NAME NAME]
 dotted_as_name: dotted_name [NAME NAME]
+import_as_names: import_as_name (',' import_as_name)* [',']
+dotted_as_names: dotted_as_name (',' dotted_as_name)*
 dotted_name: NAME ('.' NAME)*
 global_stmt: 'global' NAME (',' NAME)*
 exec_stmt: 'exec' expr ['in' test [',' test]]
index ac351be4365d3666441919502039a64a9004d1f0..a46cdc9e06c6654991964f95ae0fb7c21b84efd4 100644 (file)
 #define yield_stmt 278
 #define raise_stmt 279
 #define import_stmt 280
-#define import_as_name 281
-#define dotted_as_name 282
-#define dotted_name 283
-#define global_stmt 284
-#define exec_stmt 285
-#define assert_stmt 286
-#define compound_stmt 287
-#define if_stmt 288
-#define while_stmt 289
-#define for_stmt 290
-#define try_stmt 291
-#define except_clause 292
-#define suite 293
-#define test 294
-#define and_test 295
-#define not_test 296
-#define comparison 297
-#define comp_op 298
-#define expr 299
-#define xor_expr 300
-#define and_expr 301
-#define shift_expr 302
-#define arith_expr 303
-#define term 304
-#define factor 305
-#define power 306
-#define atom 307
-#define listmaker 308
-#define testlist_gexp 309
-#define lambdef 310
-#define trailer 311
-#define subscriptlist 312
-#define subscript 313
-#define sliceop 314
-#define exprlist 315
-#define testlist 316
-#define testlist_safe 317
-#define dictmaker 318
-#define classdef 319
-#define arglist 320
-#define argument 321
-#define list_iter 322
-#define list_for 323
-#define list_if 324
-#define gen_iter 325
-#define gen_for 326
-#define gen_if 327
-#define testlist1 328
-#define encoding_decl 329
+#define import_name 281
+#define import_from 282
+#define import_as_name 283
+#define dotted_as_name 284
+#define import_as_names 285
+#define dotted_as_names 286
+#define dotted_name 287
+#define global_stmt 288
+#define exec_stmt 289
+#define assert_stmt 290
+#define compound_stmt 291
+#define if_stmt 292
+#define while_stmt 293
+#define for_stmt 294
+#define try_stmt 295
+#define except_clause 296
+#define suite 297
+#define test 298
+#define and_test 299
+#define not_test 300
+#define comparison 301
+#define comp_op 302
+#define expr 303
+#define xor_expr 304
+#define and_expr 305
+#define shift_expr 306
+#define arith_expr 307
+#define term 308
+#define factor 309
+#define power 310
+#define atom 311
+#define listmaker 312
+#define testlist_gexp 313
+#define lambdef 314
+#define trailer 315
+#define subscriptlist 316
+#define subscript 317
+#define sliceop 318
+#define exprlist 319
+#define testlist 320
+#define testlist_safe 321
+#define dictmaker 322
+#define classdef 323
+#define arglist 324
+#define argument 325
+#define list_iter 326
+#define list_for 327
+#define list_if 328
+#define gen_iter 329
+#define gen_for 330
+#define gen_if 331
+#define testlist1 332
+#define encoding_decl 333
index cdeb5ffdc2265f7cca7fe321900ca01a76bfc317..9fb18c28ae5d11683ac76e0437d6915776c9da67 100644 (file)
@@ -438,28 +438,28 @@ class Transformer:
         return n
 
     def import_stmt(self, nodelist):
-        # import_stmt: 'import' dotted_as_name (',' dotted_as_name)* |
-        # from: 'from' dotted_name 'import'
-        #                        ('*' | import_as_name (',' import_as_name)*)
-        if nodelist[0][1] == 'from':
-            names = []
-            if nodelist[3][0] == token.NAME:
-                for i in range(3, len(nodelist), 2):
-                    names.append((nodelist[i][1], None))
-            else:
-                for i in range(3, len(nodelist), 2):
-                    names.append(self.com_import_as_name(nodelist[i]))
-            n = From(self.com_dotted_name(nodelist[1]), names)
-            n.lineno = nodelist[0][2]
-            return n
+        # import_stmt: import_name | import_from
+        assert len(nodelist) == 1
+        return self.com_node(nodelist[0])
 
-        if nodelist[1][0] == symbol.dotted_name:
-            names = [(self.com_dotted_name(nodelist[1][1:]), None)]
+    def import_name(self, nodelist):
+        # import_name: 'import' dotted_as_names
+        n = Import(self.com_dotted_as_names(nodelist[1]))
+        n.lineno = nodelist[0][2]
+        return n
+
+    def import_from(self, nodelist):
+        # import_from: 'from' dotted_name 'import' ('*' |
+        #    '(' import_as_names ')' | import_as_names)
+        assert nodelist[0][1] == 'from'
+        assert nodelist[1][0] == symbol.dotted_name
+        assert nodelist[2][1] == 'import'
+        fromname = self.com_dotted_name(nodelist[1])
+        if nodelist[3][0] == token.STAR:
+            n = From(fromname, [('*', None)])
         else:
-            names = []
-            for i in range(1, len(nodelist), 2):
-                names.append(self.com_dotted_as_name(nodelist[i]))
-        n = Import(names)
+            node = nodelist[3 + (nodelist[3][0] == token.LPAR)]
+            n = From(fromname, self.com_import_as_names(node))
         n.lineno = nodelist[0][2]
         return n
 
@@ -895,29 +895,41 @@ class Transformer:
         return name[:-1]
 
     def com_dotted_as_name(self, node):
-        dot = self.com_dotted_name(node[1])
-        if len(node) <= 2:
+        assert node[0] == symbol.dotted_as_name
+        node = node[1:]
+        dot = self.com_dotted_name(node[0][1:])
+        if len(node) == 1:
             return dot, None
-        if node[0] == symbol.dotted_name:
-            pass
-        else:
-            assert node[2][1] == 'as'
-            assert node[3][0] == token.NAME
-            return dot, node[3][1]
+        assert node[1][1] == 'as'
+        assert node[2][0] == token.NAME
+        return dot, node[2][1]
+
+    def com_dotted_as_names(self, node):
+        assert node[0] == symbol.dotted_as_names
+        node = node[1:]
+        names = [self.com_dotted_as_name(node[0])]
+        for i in range(2, len(node), 2):
+            names.append(self.com_dotted_as_name(node[i]))
+        return names
 
     def com_import_as_name(self, node):
-        if node[0] == token.STAR:
-            return '*', None
         assert node[0] == symbol.import_as_name
         node = node[1:]
+        assert node[0][0] == token.NAME
         if len(node) == 1:
-            assert node[0][0] == token.NAME
             return node[0][1], None
-
         assert node[1][1] == 'as', node
         assert node[2][0] == token.NAME
         return node[0][1], node[2][1]
 
+    def com_import_as_names(self, node):
+        assert node[0] == symbol.import_as_names
+        node = node[1:]
+        names = [self.com_import_as_name(node[0])]
+        for i in range(2, len(node), 2):
+            names.append(self.com_import_as_name(node[i]))
+        return names
+
     def com_bases(self, node):
         bases = []
         for i in range(1, len(node), 2):
index cb57208005e5272f17c9f09efcb1ab6125b2d862..eaf5a2581d34466367205f672cf4a43ecda01239 100755 (executable)
@@ -35,55 +35,59 @@ return_stmt = 277
 yield_stmt = 278
 raise_stmt = 279
 import_stmt = 280
-import_as_name = 281
-dotted_as_name = 282
-dotted_name = 283
-global_stmt = 284
-exec_stmt = 285
-assert_stmt = 286
-compound_stmt = 287
-if_stmt = 288
-while_stmt = 289
-for_stmt = 290
-try_stmt = 291
-except_clause = 292
-suite = 293
-test = 294
-and_test = 295
-not_test = 296
-comparison = 297
-comp_op = 298
-expr = 299
-xor_expr = 300
-and_expr = 301
-shift_expr = 302
-arith_expr = 303
-term = 304
-factor = 305
-power = 306
-atom = 307
-listmaker = 308
-testlist_gexp = 309
-lambdef = 310
-trailer = 311
-subscriptlist = 312
-subscript = 313
-sliceop = 314
-exprlist = 315
-testlist = 316
-testlist_safe = 317
-dictmaker = 318
-classdef = 319
-arglist = 320
-argument = 321
-list_iter = 322
-list_for = 323
-list_if = 324
-gen_iter = 325
-gen_for = 326
-gen_if = 327
-testlist1 = 328
-encoding_decl = 329
+import_name = 281
+import_from = 282
+import_as_name = 283
+dotted_as_name = 284
+import_as_names = 285
+dotted_as_names = 286
+dotted_name = 287
+global_stmt = 288
+exec_stmt = 289
+assert_stmt = 290
+compound_stmt = 291
+if_stmt = 292
+while_stmt = 293
+for_stmt = 294
+try_stmt = 295
+except_clause = 296
+suite = 297
+test = 298
+and_test = 299
+not_test = 300
+comparison = 301
+comp_op = 302
+expr = 303
+xor_expr = 304
+and_expr = 305
+shift_expr = 306
+arith_expr = 307
+term = 308
+factor = 309
+power = 310
+atom = 311
+listmaker = 312
+testlist_gexp = 313
+lambdef = 314
+trailer = 315
+subscriptlist = 316
+subscript = 317
+sliceop = 318
+exprlist = 319
+testlist = 320
+testlist_safe = 321
+dictmaker = 322
+classdef = 323
+arglist = 324
+argument = 325
+list_iter = 326
+list_for = 327
+list_if = 328
+gen_iter = 329
+gen_for = 330
+gen_if = 331
+testlist1 = 332
+encoding_decl = 333
 #--end constants--
 
 sym_name = {}
index 00fab49a6dcf3c16c047f4bbc72ed663ada26ca5..6174e7aca7963fe5883c4fb0e58dffe546934772 100644 (file)
@@ -35,7 +35,8 @@ continue + try/finally ok
 testing continue and break in try/except in loop
 return_stmt
 raise_stmt
-import_stmt
+import_name
+import_from
 global_stmt
 exec_stmt
 assert_stmt
index b1644cb35e642ad3b4e8ecbbafc1ddd39ee2c32b..5011d0368524dc6dc20b7fd20e5755632669cf7a 100644 (file)
@@ -211,6 +211,47 @@ if 1:
             self.assertRaises(SyntaxError, compile, stmt, 'tmp', 'single')
             self.assertRaises(SyntaxError, compile, stmt, 'tmp', 'exec')
 
+    def test_import(self):
+        succeed = [
+            'import sys',
+            'import os, sys',
+            'from __future__ import nested_scopes, generators',
+            'from __future__ import (nested_scopes,\ngenerators)',
+            'from __future__ import (nested_scopes,\ngenerators,)',
+            'from sys import stdin, stderr, stdout',
+            'from sys import (stdin, stderr,\nstdout)',
+            'from sys import (stdin, stderr,\nstdout,)',
+            'from sys import (stdin\n, stderr, stdout)',
+            'from sys import (stdin\n, stderr, stdout,)',
+            'from sys import stdin as si, stdout as so, stderr as se',
+            'from sys import (stdin as si, stdout as so, stderr as se)',
+            'from sys import (stdin as si, stdout as so, stderr as se,)',
+            ]
+        fail = [
+            'import (os, sys)',
+            'import (os), (sys)',
+            'import ((os), (sys))',
+            'import (sys',
+            'import sys)',
+            'import (os,)',
+            'from (sys) import stdin',
+            'from __future__ import (nested_scopes',
+            'from __future__ import nested_scopes)',
+            'from __future__ import nested_scopes,\ngenerators',
+            'from sys import (stdin',
+            'from sys import stdin)',
+            'from sys import stdin, stdout,\nstderr',
+            'from sys import stdin si',
+            'from sys import stdin,'
+            'from sys import (*)',
+            'from sys import (stdin,, stdout, stderr)',
+            'from sys import (stdin, stdout),',
+            ]
+        for stmt in succeed:
+            compile(stmt, 'tmp', 'exec')
+        for stmt in fail:
+            self.assertRaises(SyntaxError, compile, stmt, 'tmp', 'exec')
+
 def test_main():
     test_support.run_unittest(TestSpecifics)
 
index e0d5b745d646082fad722d33fce762ae6014edaa..7f5d10d1e59bce178873893e9fd96150e4f403b4 100644 (file)
@@ -417,12 +417,16 @@ except RuntimeError: pass
 try: raise KeyboardInterrupt
 except KeyboardInterrupt: pass
 
-print 'import_stmt' # 'import' NAME (',' NAME)* | 'from' NAME 'import' ('*' | NAME (',' NAME)*)
+print 'import_name' # 'import' dotted_as_names
 import sys
 import time, sys
+print 'import_from' # 'from' dotted_name 'import' ('*' | '(' import_as_names ')' | import_as_names)
 from time import time
+from time import (time)
 from sys import *
 from sys import path, argv
+from sys import (path, argv)
+from sys import (path, argv,)
 
 print 'global_stmt' # 'global' NAME (',' NAME)*
 def f():
index 978ce5712c4faa12b1647f9a1c015d26250dfea0..0f8c1d0d0ab6b131dda06d575f20cf5af5d9725b 100644 (file)
@@ -130,12 +130,26 @@ class RoundtripLegalSyntaxTestCase(unittest.TestCase):
     def test_import_from_statement(self):
         self.check_suite("from sys.path import *")
         self.check_suite("from sys.path import dirname")
+        self.check_suite("from sys.path import (dirname)")
+        self.check_suite("from sys.path import (dirname,)")
         self.check_suite("from sys.path import dirname as my_dirname")
+        self.check_suite("from sys.path import (dirname as my_dirname)")
+        self.check_suite("from sys.path import (dirname as my_dirname,)")
         self.check_suite("from sys.path import dirname, basename")
+        self.check_suite("from sys.path import (dirname, basename)")
+        self.check_suite("from sys.path import (dirname, basename,)")
         self.check_suite(
             "from sys.path import dirname as my_dirname, basename")
+        self.check_suite(
+            "from sys.path import (dirname as my_dirname, basename)")
+        self.check_suite(
+            "from sys.path import (dirname as my_dirname, basename,)")
         self.check_suite(
             "from sys.path import dirname, basename as my_basename")
+        self.check_suite(
+            "from sys.path import (dirname, basename as my_basename)")
+        self.check_suite(
+            "from sys.path import (dirname, basename as my_basename,)")
 
     def test_basic_import_statement(self):
         self.check_suite("import sys")
index e01b9e71f0af382e7f54a83d8371410b2c801845..819a107ae077007f276e71283858d68af1b1add4 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 2.4 alpha 3?
 Core and builtins
 -----------------
 
+- SF patch #1007189: ``from ... import ...`` statements now allow the name 
+  list to be surrounded by parentheses.
+
 - Some speedups for long arithmetic, thanks to Trevor Perrin.  Gradeschool
   multiplication was sped a little by optimizing the C code.  Gradeschool
   squaring was sped by about a factor of 2, by exploiting that about half
@@ -889,7 +892,7 @@ Library
   API matches math.log().
 
 - Bug #957381: distutils bdist_rpm no longer fails on recent RPM versions
-  that generate a *-debuginfo.rpm.
+  that generate a -debuginfo.rpm
 
 - os.path.devnull has been added for all supported platforms.
 
index 5f53982627d1cc38b1e9bc851b30113510869747..eb23b585724f611e35a625f192bb6dfe4bd5a672 100644 (file)
@@ -839,6 +839,7 @@ VALIDATER(expr_stmt);           VALIDATER(power);
 VALIDATER(print_stmt);          VALIDATER(del_stmt);
 VALIDATER(return_stmt);         VALIDATER(list_iter);
 VALIDATER(raise_stmt);          VALIDATER(import_stmt);
+VALIDATER(import_name);         VALIDATER(import_from);
 VALIDATER(global_stmt);         VALIDATER(list_if);
 VALIDATER(assert_stmt);         VALIDATER(list_for);
 VALIDATER(exec_stmt);           VALIDATER(compound_stmt);
@@ -1714,55 +1715,100 @@ validate_dotted_as_name(node *tree)
 }
 
 
-/*  import_stmt:
- *
- *    'import' dotted_as_name (',' dotted_as_name)*
- *  | 'from' dotted_name 'import' ('*' | import_as_name (',' import_as_name)*)
+/* dotted_as_name (',' dotted_as_name)* */
+static int
+validate_dotted_as_names(node *tree)
+{
+       int nch = NCH(tree);
+       int res = is_odd(nch) && validate_dotted_as_name(CHILD(tree, 0));
+       int i;
+
+       for (i = 1; res && (i < nch); i += 2)
+           res = (validate_comma(CHILD(tree, i))
+                  && validate_dotted_as_name(CHILD(tree, i + 1)));
+       return (res);
+}
+
+
+/* import_as_name (',' import_as_name)* [','] */
+static int
+validate_import_as_names(node *tree)
+{
+    int nch = NCH(tree);
+    int res = validate_import_as_name(CHILD(tree, 0));
+    int i;
+
+    for (i = 1; res && (i + 1 < nch); i += 2)
+       res = (validate_comma(CHILD(tree, i))
+              && validate_import_as_name(CHILD(tree, i + 1)));
+    return (res);
+}
+
+
+/* 'import' dotted_as_names */
+static int
+validate_import_name(node *tree)
+{
+       return (validate_ntype(tree, import_name)
+               && validate_numnodes(tree, 2, "import_name")
+               && validate_name(CHILD(tree, 0), "import")
+               && validate_dotted_as_names(CHILD(tree, 1)));
+}
+
+
+/* 'from' dotted_name 'import' ('*' | '(' import_as_names ')' |
+ *     import_as_names
  */
 static int
+validate_import_from(node *tree)
+{
+       int nch = NCH(tree);
+       int res = validate_ntype(tree, import_from)
+                 && (nch >= 4)
+                 && validate_name(CHILD(tree, 0), "from")
+                 && validate_dotted_name(CHILD(tree, 1))
+                 && validate_name(CHILD(tree, 2), "import");
+
+       if (res && TYPE(CHILD(tree, 3)) == LPAR)
+           res = ((nch == 6)
+                  && validate_lparen(CHILD(tree, 3))
+                  && validate_import_as_names(CHILD(tree, 4))
+                  && validate_rparen(CHILD(tree, 5)));
+       else if (res && TYPE(CHILD(tree, 3)) != STAR)
+           res = validate_import_as_names(CHILD(tree, 3));
+       return (res);
+}
+
+
+/* import_stmt: import_name | import_from */
+static int
 validate_import_stmt(node *tree)
 {
     int nch = NCH(tree);
-    int res = (validate_ntype(tree, import_stmt)
-               && (nch >= 2) && is_even(nch)
-               && validate_ntype(CHILD(tree, 0), NAME));
-
-    if (res && (strcmp(STR(CHILD(tree, 0)), "import") == 0)) {
-        int j;
-
-        res = validate_dotted_as_name(CHILD(tree, 1));
-        for (j = 2; res && (j < nch); j += 2)
-            res = (validate_comma(CHILD(tree, j))
-                   && validate_dotted_as_name(CHILD(tree, j + 1)));
-    }
-    else if (res && (res = validate_name(CHILD(tree, 0), "from"))) {
-        res = ((nch >= 4) && is_even(nch)
-               && validate_dotted_name(CHILD(tree, 1))
-               && validate_name(CHILD(tree, 2), "import"));
-        if (nch == 4) {
-            if (TYPE(CHILD(tree, 3)) == import_as_name)
-                res = validate_import_as_name(CHILD(tree, 3));
-            else
-                res = validate_star(CHILD(tree, 3));
-        }
+    int res = validate_numnodes(tree, 1, "import_stmt");
+
+    if (res) {
+       int ntype = TYPE(CHILD(tree, 0));
+
+       if (ntype == import_name || ntype == import_from)
+            res = validate_node(CHILD(tree, 0));
         else {
-            /*  'from' dotted_name 'import' import_as_name
-             *      (',' import_as_name)+
-             */
-            int j;
-            res = validate_import_as_name(CHILD(tree, 3));
-            for (j = 4; res && (j < nch); j += 2)
-                res = (validate_comma(CHILD(tree, j))
-                       && validate_import_as_name(CHILD(tree, j + 1)));
+            res = 0;
+            err_string("illegal import_stmt child type");
         }
     }
-    else
+    else if (nch == 1) {
         res = 0;
-
+        PyErr_Format(parser_error,
+                     "Unrecognized child node of import_stmt: %d.",
+                     TYPE(CHILD(tree, 0)));
+    }
     return (res);
 }
 
 
+
+
 static int
 validate_global_stmt(node *tree)
 {
@@ -2823,6 +2869,12 @@ validate_node(node *tree)
           case import_stmt:
             res = validate_import_stmt(tree);
             break;
+         case import_name:
+           res = validate_import_name(tree);
+           break;
+         case import_from:
+           res = validate_import_from(tree);
+           break;
           case global_stmt:
             res = validate_global_stmt(tree);
             break;
index 4653ff7bc33b6fbbbc68bb81a0510dea5796ae4a..e8f4d67d173de4061a477958ac977665a958ea15 100644 (file)
@@ -3490,42 +3490,53 @@ com_from_import(struct compiling *c, node *n)
 static void
 com_import_stmt(struct compiling *c, node *n)
 {
+       node *nn;
        int i;
        REQ(n, import_stmt);
-       /* 'import' dotted_name (',' dotted_name)* |
-          'from' dotted_name 'import' ('*' | NAME (',' NAME)*) */
-       if (STR(CHILD(n, 0))[0] == 'f') {
+       n = CHILD(n, 0);
+       /* import_stmt: import_name | import_from */
+       if (TYPE(n) == import_from) {
+               /* 'from' dotted_name 'import' ('*' |
+                    '(' import_as_names ')' | import_as_names) */
                PyObject *tup;
-               /* 'from' dotted_name 'import' ... */
                REQ(CHILD(n, 1), dotted_name);
-               
-               if (TYPE(CHILD(n, 3)) == STAR) {
+               nn = CHILD(n, 3 + (TYPE(CHILD(n, 3)) == LPAR));
+               if (TYPE(nn) == STAR)
                        tup = Py_BuildValue("(s)", "*");
-               } else {
-                       tup = PyTuple_New((NCH(n) - 2)/2);
-                       for (i = 3; i < NCH(n); i += 2) {
-                               PyTuple_SET_ITEM(tup, (i-3)/2, 
-                                       PyString_FromString(STR(
-                                               CHILD(CHILD(n, i), 0))));
+               else {
+                       if (TYPE(CHILD(nn, NCH(nn) - 1)) == COMMA &&
+                           TYPE(CHILD(n, 3)) != LPAR) {
+                               com_error(c, PyExc_SyntaxError,
+                                   "trailing comma not allowed "
+                                   "without surrounding parentheses");
+                               return;
                        }
+                       REQ(nn, import_as_names);
+                       tup = PyTuple_New((NCH(nn) + 1) / 2);
+                       for (i = 0; i < NCH(nn); i += 2)
+                               PyTuple_SET_ITEM(tup, i / 2,
+                                       PyString_FromString(STR(
+                                               CHILD(CHILD(nn, i), 0))));
                }
                com_addoparg(c, LOAD_CONST, com_addconst(c, tup));
                Py_DECREF(tup);
                com_push(c, 1);
                com_addopname(c, IMPORT_NAME, CHILD(n, 1));
-               if (TYPE(CHILD(n, 3)) == STAR) 
+               if (TYPE(nn) == STAR)
                        com_addbyte(c, IMPORT_STAR);
                else {
-                       for (i = 3; i < NCH(n); i += 2) 
-                               com_from_import(c, CHILD(n, i));
+                       for (i = 0; i < NCH(nn); i += 2)
+                               com_from_import(c, CHILD(nn, i));
                        com_addbyte(c, POP_TOP);
                }
                com_pop(c, 1);
        }
        else {
-               /* 'import' ... */
-               for (i = 1; i < NCH(n); i += 2) {
-                       node *subn = CHILD(n, i);
+               /* 'import' dotted_as_names */
+               nn = CHILD(n, 1);
+               REQ(nn, dotted_as_names);
+               for (i = 0; i < NCH(nn); i += 2) {
+                       node *subn = CHILD(nn, i);
                        REQ(subn, dotted_as_name);
                        com_addoparg(c, LOAD_CONST, com_addconst(c, Py_None));
                        com_push(c, 1);
@@ -6291,14 +6302,15 @@ symtable_gen_iter(struct symtable *st, node *n)
 static void
 symtable_import(struct symtable *st, node *n)
 {
+       node *nn;
        int i;
-       /* import_stmt: 'import' dotted_as_name (',' dotted_as_name)* 
-              | 'from' dotted_name 'import' 
-                                ('*' | import_as_name (',' import_as_name)*)
-          import_as_name: NAME [NAME NAME]
-       */
-       if (STR(CHILD(n, 0))[0] == 'f') {  /* from */
+       /* import_stmt: import_name | import_from */
+       n = CHILD(n, 0);
+       if (TYPE(n) == import_from) {
+               /* import_from: 'from' dotted_name 'import' ('*' |
+                    | '(' import_as_names ')' | import_as_names) */
                node *dotname = CHILD(n, 1);
+               REQ(dotname, dotted_name);
                if (strcmp(STR(CHILD(dotname, 0)), "__future__") == 0) {
                        /* check for bogus imports */
                        if (n->n_lineno >= st->st_future->ff_last_lineno) {
@@ -6308,7 +6320,8 @@ symtable_import(struct symtable *st, node *n)
                                return;
                        }
                }
-               if (TYPE(CHILD(n, 3)) == STAR) {
+               nn = CHILD(n, 3 + (TYPE(CHILD(n, 3)) == LPAR));
+               if (TYPE(nn) == STAR) {
                        if (st->st_cur->ste_type != TYPE_MODULE) {
                                if (symtable_warn(st,
                                  "import * only allowed at module level") < 0)
@@ -6317,8 +6330,9 @@ symtable_import(struct symtable *st, node *n)
                        st->st_cur->ste_optimized |= OPT_IMPORT_STAR;
                        st->st_cur->ste_opt_lineno = n->n_lineno;
                } else {
-                       for (i = 3; i < NCH(n); i += 2) {
-                               node *c = CHILD(n, i);
+                       REQ(nn, import_as_names);
+                       for (i = 0; i < NCH(nn); i += 2) {
+                               node *c = CHILD(nn, i);
                                if (NCH(c) > 1) /* import as */
                                        symtable_assign(st, CHILD(c, 2),
                                                        DEF_IMPORT);
@@ -6327,10 +6341,12 @@ symtable_import(struct symtable *st, node *n)
                                                        DEF_IMPORT);
                        }
                }
-       } else { 
-               for (i = 1; i < NCH(n); i += 2) {
-                       symtable_assign(st, CHILD(n, i), DEF_IMPORT);
-               }
+       } else {
+               /* 'import' dotted_as_names */
+               nn = CHILD(n, 1);
+               REQ(nn, dotted_as_names);
+               for (i = 0; i < NCH(nn); i += 2)
+                       symtable_assign(st, CHILD(nn, i), DEF_IMPORT);
        }
 }
 
index 377ad9abde532a1b7457a567197562bca18a82eb..20d8dd290924ee7e8aba5ce79ef6e80294d72444 100644 (file)
@@ -18,18 +18,18 @@ future_check_features(PyFutureFeatures *ff, node *n, const char *filename)
 {
        int i;
        char *feature;
-       node *ch;
+       node *ch, *nn;
 
-       REQ(n, import_stmt); /* must by from __future__ import ... */
-
-       for (i = 3; i < NCH(n); i += 2) {
-               ch = CHILD(n, i);
-               if (TYPE(ch) == STAR) {
-                       PyErr_SetString(PyExc_SyntaxError,
-                                       FUTURE_IMPORT_STAR);
-                       PyErr_SyntaxLocation(filename, ch->n_lineno);
-                       return -1;
-               }
+       REQ(n, import_from);
+       nn = CHILD(n, 3 + (TYPE(CHILD(n, 3)) == LPAR));
+       if (TYPE(nn) == STAR) {
+               PyErr_SetString(PyExc_SyntaxError, FUTURE_IMPORT_STAR);
+               PyErr_SyntaxLocation(filename, nn->n_lineno);
+               return -1;
+       }
+       REQ(nn, import_as_names);
+       for (i = 0; i < NCH(nn); i += 2) {
+               ch = CHILD(nn, i);
                REQ(ch, import_as_name);
                feature = STR(CHILD(ch, 0));
                if (strcmp(feature, FUTURE_NESTED_SCOPES) == 0) {
@@ -188,7 +188,8 @@ future_parse(PyFutureFeatures *ff, node *n, const char *filename)
        case import_stmt: {
                node *name;
 
-               if (STR(CHILD(n, 0))[0] != 'f') { /* from */
+               n = CHILD(n, 0);
+               if (TYPE(n) != import_from) {
                        ff->ff_last_lineno = n->n_lineno;
                        return 0;
                }
index f4f207e1b75a76b05ed4a59fc15d613b494d06c4..c4fe66148bf6bd5ccabfb8836c9e065aaccd57fb 100644 (file)
@@ -488,1135 +488,1177 @@ static state states_23[7] = {
 };
 static arc arcs_24_0[2] = {
        {70, 1},
-       {72, 2},
+       {71, 1},
 };
 static arc arcs_24_1[1] = {
-       {71, 3},
+       {0, 1},
 };
-static arc arcs_24_2[1] = {
-       {12, 4},
+static state states_24[2] = {
+       {2, arcs_24_0},
+       {1, arcs_24_1},
 };
-static arc arcs_24_3[2] = {
-       {27, 1},
-       {0, 3},
+static arc arcs_25_0[1] = {
+       {72, 1},
 };
-static arc arcs_24_4[1] = {
-       {70, 5},
+static arc arcs_25_1[1] = {
+       {73, 2},
 };
-static arc arcs_24_5[2] = {
-       {28, 6},
-       {73, 7},
+static arc arcs_25_2[1] = {
+       {0, 2},
 };
-static arc arcs_24_6[1] = {
-       {0, 6},
+static state states_25[3] = {
+       {1, arcs_25_0},
+       {1, arcs_25_1},
+       {1, arcs_25_2},
 };
-static arc arcs_24_7[2] = {
-       {27, 8},
-       {0, 7},
+static arc arcs_26_0[1] = {
+       {74, 1},
 };
-static arc arcs_24_8[1] = {
-       {73, 7},
+static arc arcs_26_1[1] = {
+       {12, 2},
 };
-static state states_24[9] = {
-       {2, arcs_24_0},
-       {1, arcs_24_1},
-       {1, arcs_24_2},
-       {2, arcs_24_3},
-       {1, arcs_24_4},
-       {2, arcs_24_5},
-       {1, arcs_24_6},
-       {2, arcs_24_7},
-       {1, arcs_24_8},
+static arc arcs_26_2[1] = {
+       {72, 3},
 };
-static arc arcs_25_0[1] = {
+static arc arcs_26_3[3] = {
+       {28, 4},
+       {13, 5},
+       {75, 4},
+};
+static arc arcs_26_4[1] = {
+       {0, 4},
+};
+static arc arcs_26_5[1] = {
+       {75, 6},
+};
+static arc arcs_26_6[1] = {
+       {15, 4},
+};
+static state states_26[7] = {
+       {1, arcs_26_0},
+       {1, arcs_26_1},
+       {1, arcs_26_2},
+       {3, arcs_26_3},
+       {1, arcs_26_4},
+       {1, arcs_26_5},
+       {1, arcs_26_6},
+};
+static arc arcs_27_0[1] = {
        {19, 1},
 };
-static arc arcs_25_1[2] = {
+static arc arcs_27_1[2] = {
        {19, 2},
        {0, 1},
 };
-static arc arcs_25_2[1] = {
+static arc arcs_27_2[1] = {
        {19, 3},
 };
-static arc arcs_25_3[1] = {
+static arc arcs_27_3[1] = {
        {0, 3},
 };
-static state states_25[4] = {
-       {1, arcs_25_0},
-       {2, arcs_25_1},
-       {1, arcs_25_2},
-       {1, arcs_25_3},
+static state states_27[4] = {
+       {1, arcs_27_0},
+       {2, arcs_27_1},
+       {1, arcs_27_2},
+       {1, arcs_27_3},
 };
-static arc arcs_26_0[1] = {
+static arc arcs_28_0[1] = {
        {12, 1},
 };
-static arc arcs_26_1[2] = {
+static arc arcs_28_1[2] = {
        {19, 2},
        {0, 1},
 };
-static arc arcs_26_2[1] = {
+static arc arcs_28_2[1] = {
        {19, 3},
 };
-static arc arcs_26_3[1] = {
+static arc arcs_28_3[1] = {
        {0, 3},
 };
-static state states_26[4] = {
-       {1, arcs_26_0},
-       {2, arcs_26_1},
-       {1, arcs_26_2},
-       {1, arcs_26_3},
+static state states_28[4] = {
+       {1, arcs_28_0},
+       {2, arcs_28_1},
+       {1, arcs_28_2},
+       {1, arcs_28_3},
 };
-static arc arcs_27_0[1] = {
+static arc arcs_29_0[1] = {
+       {76, 1},
+};
+static arc arcs_29_1[2] = {
+       {27, 2},
+       {0, 1},
+};
+static arc arcs_29_2[2] = {
+       {76, 1},
+       {0, 2},
+};
+static state states_29[3] = {
+       {1, arcs_29_0},
+       {2, arcs_29_1},
+       {2, arcs_29_2},
+};
+static arc arcs_30_0[1] = {
+       {77, 1},
+};
+static arc arcs_30_1[2] = {
+       {27, 0},
+       {0, 1},
+};
+static state states_30[2] = {
+       {1, arcs_30_0},
+       {2, arcs_30_1},
+};
+static arc arcs_31_0[1] = {
        {19, 1},
 };
-static arc arcs_27_1[2] = {
-       {74, 0},
+static arc arcs_31_1[2] = {
+       {78, 0},
        {0, 1},
 };
-static state states_27[2] = {
-       {1, arcs_27_0},
-       {2, arcs_27_1},
+static state states_31[2] = {
+       {1, arcs_31_0},
+       {2, arcs_31_1},
 };
-static arc arcs_28_0[1] = {
-       {75, 1},
+static arc arcs_32_0[1] = {
+       {79, 1},
 };
-static arc arcs_28_1[1] = {
+static arc arcs_32_1[1] = {
        {19, 2},
 };
-static arc arcs_28_2[2] = {
+static arc arcs_32_2[2] = {
        {27, 1},
        {0, 2},
 };
-static state states_28[3] = {
-       {1, arcs_28_0},
-       {1, arcs_28_1},
-       {2, arcs_28_2},
+static state states_32[3] = {
+       {1, arcs_32_0},
+       {1, arcs_32_1},
+       {2, arcs_32_2},
 };
-static arc arcs_29_0[1] = {
-       {76, 1},
+static arc arcs_33_0[1] = {
+       {80, 1},
 };
-static arc arcs_29_1[1] = {
-       {77, 2},
+static arc arcs_33_1[1] = {
+       {81, 2},
 };
-static arc arcs_29_2[2] = {
-       {78, 3},
+static arc arcs_33_2[2] = {
+       {82, 3},
        {0, 2},
 };
-static arc arcs_29_3[1] = {
+static arc arcs_33_3[1] = {
        {26, 4},
 };
-static arc arcs_29_4[2] = {
+static arc arcs_33_4[2] = {
        {27, 5},
        {0, 4},
 };
-static arc arcs_29_5[1] = {
+static arc arcs_33_5[1] = {
        {26, 6},
 };
-static arc arcs_29_6[1] = {
+static arc arcs_33_6[1] = {
        {0, 6},
 };
-static state states_29[7] = {
-       {1, arcs_29_0},
-       {1, arcs_29_1},
-       {2, arcs_29_2},
-       {1, arcs_29_3},
-       {2, arcs_29_4},
-       {1, arcs_29_5},
-       {1, arcs_29_6},
+static state states_33[7] = {
+       {1, arcs_33_0},
+       {1, arcs_33_1},
+       {2, arcs_33_2},
+       {1, arcs_33_3},
+       {2, arcs_33_4},
+       {1, arcs_33_5},
+       {1, arcs_33_6},
 };
-static arc arcs_30_0[1] = {
-       {79, 1},
+static arc arcs_34_0[1] = {
+       {83, 1},
 };
-static arc arcs_30_1[1] = {
+static arc arcs_34_1[1] = {
        {26, 2},
 };
-static arc arcs_30_2[2] = {
+static arc arcs_34_2[2] = {
        {27, 3},
        {0, 2},
 };
-static arc arcs_30_3[1] = {
+static arc arcs_34_3[1] = {
        {26, 4},
 };
-static arc arcs_30_4[1] = {
+static arc arcs_34_4[1] = {
        {0, 4},
 };
-static state states_30[5] = {
-       {1, arcs_30_0},
-       {1, arcs_30_1},
-       {2, arcs_30_2},
-       {1, arcs_30_3},
-       {1, arcs_30_4},
+static state states_34[5] = {
+       {1, arcs_34_0},
+       {1, arcs_34_1},
+       {2, arcs_34_2},
+       {1, arcs_34_3},
+       {1, arcs_34_4},
 };
-static arc arcs_31_0[6] = {
-       {80, 1},
-       {81, 1},
-       {82, 1},
-       {83, 1},
-       {17, 1},
+static arc arcs_35_0[6] = {
        {84, 1},
+       {85, 1},
+       {86, 1},
+       {87, 1},
+       {17, 1},
+       {88, 1},
 };
-static arc arcs_31_1[1] = {
+static arc arcs_35_1[1] = {
        {0, 1},
 };
-static state states_31[2] = {
-       {6, arcs_31_0},
-       {1, arcs_31_1},
+static state states_35[2] = {
+       {6, arcs_35_0},
+       {1, arcs_35_1},
 };
-static arc arcs_32_0[1] = {
-       {85, 1},
+static arc arcs_36_0[1] = {
+       {89, 1},
 };
-static arc arcs_32_1[1] = {
+static arc arcs_36_1[1] = {
        {26, 2},
 };
-static arc arcs_32_2[1] = {
+static arc arcs_36_2[1] = {
        {21, 3},
 };
-static arc arcs_32_3[1] = {
+static arc arcs_36_3[1] = {
        {22, 4},
 };
-static arc arcs_32_4[3] = {
-       {86, 1},
-       {87, 5},
+static arc arcs_36_4[3] = {
+       {90, 1},
+       {91, 5},
        {0, 4},
 };
-static arc arcs_32_5[1] = {
+static arc arcs_36_5[1] = {
        {21, 6},
 };
-static arc arcs_32_6[1] = {
+static arc arcs_36_6[1] = {
        {22, 7},
 };
-static arc arcs_32_7[1] = {
+static arc arcs_36_7[1] = {
        {0, 7},
 };
-static state states_32[8] = {
-       {1, arcs_32_0},
-       {1, arcs_32_1},
-       {1, arcs_32_2},
-       {1, arcs_32_3},
-       {3, arcs_32_4},
-       {1, arcs_32_5},
-       {1, arcs_32_6},
-       {1, arcs_32_7},
+static state states_36[8] = {
+       {1, arcs_36_0},
+       {1, arcs_36_1},
+       {1, arcs_36_2},
+       {1, arcs_36_3},
+       {3, arcs_36_4},
+       {1, arcs_36_5},
+       {1, arcs_36_6},
+       {1, arcs_36_7},
 };
-static arc arcs_33_0[1] = {
-       {88, 1},
+static arc arcs_37_0[1] = {
+       {92, 1},
 };
-static arc arcs_33_1[1] = {
+static arc arcs_37_1[1] = {
        {26, 2},
 };
-static arc arcs_33_2[1] = {
+static arc arcs_37_2[1] = {
        {21, 3},
 };
-static arc arcs_33_3[1] = {
+static arc arcs_37_3[1] = {
        {22, 4},
 };
-static arc arcs_33_4[2] = {
-       {87, 5},
+static arc arcs_37_4[2] = {
+       {91, 5},
        {0, 4},
 };
-static arc arcs_33_5[1] = {
+static arc arcs_37_5[1] = {
        {21, 6},
 };
-static arc arcs_33_6[1] = {
+static arc arcs_37_6[1] = {
        {22, 7},
 };
-static arc arcs_33_7[1] = {
+static arc arcs_37_7[1] = {
        {0, 7},
 };
-static state states_33[8] = {
-       {1, arcs_33_0},
-       {1, arcs_33_1},
-       {1, arcs_33_2},
-       {1, arcs_33_3},
-       {2, arcs_33_4},
-       {1, arcs_33_5},
-       {1, arcs_33_6},
-       {1, arcs_33_7},
+static state states_37[8] = {
+       {1, arcs_37_0},
+       {1, arcs_37_1},
+       {1, arcs_37_2},
+       {1, arcs_37_3},
+       {2, arcs_37_4},
+       {1, arcs_37_5},
+       {1, arcs_37_6},
+       {1, arcs_37_7},
 };
-static arc arcs_34_0[1] = {
-       {89, 1},
+static arc arcs_38_0[1] = {
+       {93, 1},
 };
-static arc arcs_34_1[1] = {
+static arc arcs_38_1[1] = {
        {58, 2},
 };
-static arc arcs_34_2[1] = {
-       {78, 3},
+static arc arcs_38_2[1] = {
+       {82, 3},
 };
-static arc arcs_34_3[1] = {
+static arc arcs_38_3[1] = {
        {9, 4},
 };
-static arc arcs_34_4[1] = {
+static arc arcs_38_4[1] = {
        {21, 5},
 };
-static arc arcs_34_5[1] = {
+static arc arcs_38_5[1] = {
        {22, 6},
 };
-static arc arcs_34_6[2] = {
-       {87, 7},
+static arc arcs_38_6[2] = {
+       {91, 7},
        {0, 6},
 };
-static arc arcs_34_7[1] = {
+static arc arcs_38_7[1] = {
        {21, 8},
 };
-static arc arcs_34_8[1] = {
+static arc arcs_38_8[1] = {
        {22, 9},
 };
-static arc arcs_34_9[1] = {
+static arc arcs_38_9[1] = {
        {0, 9},
 };
-static state states_34[10] = {
-       {1, arcs_34_0},
-       {1, arcs_34_1},
-       {1, arcs_34_2},
-       {1, arcs_34_3},
-       {1, arcs_34_4},
-       {1, arcs_34_5},
-       {2, arcs_34_6},
-       {1, arcs_34_7},
-       {1, arcs_34_8},
-       {1, arcs_34_9},
+static state states_38[10] = {
+       {1, arcs_38_0},
+       {1, arcs_38_1},
+       {1, arcs_38_2},
+       {1, arcs_38_3},
+       {1, arcs_38_4},
+       {1, arcs_38_5},
+       {2, arcs_38_6},
+       {1, arcs_38_7},
+       {1, arcs_38_8},
+       {1, arcs_38_9},
 };
-static arc arcs_35_0[1] = {
-       {90, 1},
+static arc arcs_39_0[1] = {
+       {94, 1},
 };
-static arc arcs_35_1[1] = {
+static arc arcs_39_1[1] = {
        {21, 2},
 };
-static arc arcs_35_2[1] = {
+static arc arcs_39_2[1] = {
        {22, 3},
 };
-static arc arcs_35_3[2] = {
-       {91, 4},
-       {92, 5},
+static arc arcs_39_3[2] = {
+       {95, 4},
+       {96, 5},
 };
-static arc arcs_35_4[1] = {
+static arc arcs_39_4[1] = {
        {21, 6},
 };
-static arc arcs_35_5[1] = {
+static arc arcs_39_5[1] = {
        {21, 7},
 };
-static arc arcs_35_6[1] = {
+static arc arcs_39_6[1] = {
        {22, 8},
 };
-static arc arcs_35_7[1] = {
+static arc arcs_39_7[1] = {
        {22, 9},
 };
-static arc arcs_35_8[3] = {
-       {91, 4},
-       {87, 5},
+static arc arcs_39_8[3] = {
+       {95, 4},
+       {91, 5},
        {0, 8},
 };
-static arc arcs_35_9[1] = {
+static arc arcs_39_9[1] = {
        {0, 9},
 };
-static state states_35[10] = {
-       {1, arcs_35_0},
-       {1, arcs_35_1},
-       {1, arcs_35_2},
-       {2, arcs_35_3},
-       {1, arcs_35_4},
-       {1, arcs_35_5},
-       {1, arcs_35_6},
-       {1, arcs_35_7},
-       {3, arcs_35_8},
-       {1, arcs_35_9},
-};
-static arc arcs_36_0[1] = {
-       {93, 1},
-};
-static arc arcs_36_1[2] = {
+static state states_39[10] = {
+       {1, arcs_39_0},
+       {1, arcs_39_1},
+       {1, arcs_39_2},
+       {2, arcs_39_3},
+       {1, arcs_39_4},
+       {1, arcs_39_5},
+       {1, arcs_39_6},
+       {1, arcs_39_7},
+       {3, arcs_39_8},
+       {1, arcs_39_9},
+};
+static arc arcs_40_0[1] = {
+       {97, 1},
+};
+static arc arcs_40_1[2] = {
        {26, 2},
        {0, 1},
 };
-static arc arcs_36_2[2] = {
+static arc arcs_40_2[2] = {
        {27, 3},
        {0, 2},
 };
-static arc arcs_36_3[1] = {
+static arc arcs_40_3[1] = {
        {26, 4},
 };
-static arc arcs_36_4[1] = {
+static arc arcs_40_4[1] = {
        {0, 4},
 };
-static state states_36[5] = {
-       {1, arcs_36_0},
-       {2, arcs_36_1},
-       {2, arcs_36_2},
-       {1, arcs_36_3},
-       {1, arcs_36_4},
+static state states_40[5] = {
+       {1, arcs_40_0},
+       {2, arcs_40_1},
+       {2, arcs_40_2},
+       {1, arcs_40_3},
+       {1, arcs_40_4},
 };
-static arc arcs_37_0[2] = {
+static arc arcs_41_0[2] = {
        {3, 1},
        {2, 2},
 };
-static arc arcs_37_1[1] = {
+static arc arcs_41_1[1] = {
        {0, 1},
 };
-static arc arcs_37_2[1] = {
-       {94, 3},
+static arc arcs_41_2[1] = {
+       {98, 3},
 };
-static arc arcs_37_3[1] = {
+static arc arcs_41_3[1] = {
        {6, 4},
 };
-static arc arcs_37_4[2] = {
+static arc arcs_41_4[2] = {
        {6, 4},
-       {95, 1},
+       {99, 1},
 };
-static state states_37[5] = {
-       {2, arcs_37_0},
-       {1, arcs_37_1},
-       {1, arcs_37_2},
-       {1, arcs_37_3},
-       {2, arcs_37_4},
+static state states_41[5] = {
+       {2, arcs_41_0},
+       {1, arcs_41_1},
+       {1, arcs_41_2},
+       {1, arcs_41_3},
+       {2, arcs_41_4},
 };
-static arc arcs_38_0[2] = {
-       {96, 1},
-       {98, 2},
+static arc arcs_42_0[2] = {
+       {100, 1},
+       {102, 2},
 };
-static arc arcs_38_1[2] = {
-       {97, 3},
+static arc arcs_42_1[2] = {
+       {101, 3},
        {0, 1},
 };
-static arc arcs_38_2[1] = {
+static arc arcs_42_2[1] = {
        {0, 2},
 };
-static arc arcs_38_3[1] = {
-       {96, 1},
+static arc arcs_42_3[1] = {
+       {100, 1},
 };
-static state states_38[4] = {
-       {2, arcs_38_0},
-       {2, arcs_38_1},
-       {1, arcs_38_2},
-       {1, arcs_38_3},
+static state states_42[4] = {
+       {2, arcs_42_0},
+       {2, arcs_42_1},
+       {1, arcs_42_2},
+       {1, arcs_42_3},
 };
-static arc arcs_39_0[1] = {
-       {99, 1},
+static arc arcs_43_0[1] = {
+       {103, 1},
 };
-static arc arcs_39_1[2] = {
-       {100, 0},
+static arc arcs_43_1[2] = {
+       {104, 0},
        {0, 1},
 };
-static state states_39[2] = {
-       {1, arcs_39_0},
-       {2, arcs_39_1},
+static state states_43[2] = {
+       {1, arcs_43_0},
+       {2, arcs_43_1},
 };
-static arc arcs_40_0[2] = {
-       {101, 1},
-       {102, 2},
+static arc arcs_44_0[2] = {
+       {105, 1},
+       {106, 2},
 };
-static arc arcs_40_1[1] = {
-       {99, 2},
+static arc arcs_44_1[1] = {
+       {103, 2},
 };
-static arc arcs_40_2[1] = {
+static arc arcs_44_2[1] = {
        {0, 2},
 };
-static state states_40[3] = {
-       {2, arcs_40_0},
-       {1, arcs_40_1},
-       {1, arcs_40_2},
+static state states_44[3] = {
+       {2, arcs_44_0},
+       {1, arcs_44_1},
+       {1, arcs_44_2},
 };
-static arc arcs_41_0[1] = {
-       {77, 1},
+static arc arcs_45_0[1] = {
+       {81, 1},
 };
-static arc arcs_41_1[2] = {
-       {103, 0},
+static arc arcs_45_1[2] = {
+       {107, 0},
        {0, 1},
 };
-static state states_41[2] = {
-       {1, arcs_41_0},
-       {2, arcs_41_1},
+static state states_45[2] = {
+       {1, arcs_45_0},
+       {2, arcs_45_1},
 };
-static arc arcs_42_0[10] = {
-       {104, 1},
-       {105, 1},
-       {106, 1},
-       {107, 1},
+static arc arcs_46_0[10] = {
        {108, 1},
        {109, 1},
        {110, 1},
-       {78, 1},
-       {101, 2},
-       {111, 3},
+       {111, 1},
+       {112, 1},
+       {113, 1},
+       {114, 1},
+       {82, 1},
+       {105, 2},
+       {115, 3},
 };
-static arc arcs_42_1[1] = {
+static arc arcs_46_1[1] = {
        {0, 1},
 };
-static arc arcs_42_2[1] = {
-       {78, 1},
+static arc arcs_46_2[1] = {
+       {82, 1},
 };
-static arc arcs_42_3[2] = {
-       {101, 1},
+static arc arcs_46_3[2] = {
+       {105, 1},
        {0, 3},
 };
-static state states_42[4] = {
-       {10, arcs_42_0},
-       {1, arcs_42_1},
-       {1, arcs_42_2},
-       {2, arcs_42_3},
+static state states_46[4] = {
+       {10, arcs_46_0},
+       {1, arcs_46_1},
+       {1, arcs_46_2},
+       {2, arcs_46_3},
 };
-static arc arcs_43_0[1] = {
-       {112, 1},
+static arc arcs_47_0[1] = {
+       {116, 1},
 };
-static arc arcs_43_1[2] = {
-       {113, 0},
+static arc arcs_47_1[2] = {
+       {117, 0},
        {0, 1},
 };
-static state states_43[2] = {
-       {1, arcs_43_0},
-       {2, arcs_43_1},
+static state states_47[2] = {
+       {1, arcs_47_0},
+       {2, arcs_47_1},
 };
-static arc arcs_44_0[1] = {
-       {114, 1},
+static arc arcs_48_0[1] = {
+       {118, 1},
 };
-static arc arcs_44_1[2] = {
-       {115, 0},
+static arc arcs_48_1[2] = {
+       {119, 0},
        {0, 1},
 };
-static state states_44[2] = {
-       {1, arcs_44_0},
-       {2, arcs_44_1},
+static state states_48[2] = {
+       {1, arcs_48_0},
+       {2, arcs_48_1},
 };
-static arc arcs_45_0[1] = {
-       {116, 1},
+static arc arcs_49_0[1] = {
+       {120, 1},
 };
-static arc arcs_45_1[2] = {
-       {117, 0},
+static arc arcs_49_1[2] = {
+       {121, 0},
        {0, 1},
 };
-static state states_45[2] = {
-       {1, arcs_45_0},
-       {2, arcs_45_1},
+static state states_49[2] = {
+       {1, arcs_49_0},
+       {2, arcs_49_1},
 };
-static arc arcs_46_0[1] = {
-       {118, 1},
+static arc arcs_50_0[1] = {
+       {122, 1},
 };
-static arc arcs_46_1[3] = {
-       {119, 0},
+static arc arcs_50_1[3] = {
+       {123, 0},
        {56, 0},
        {0, 1},
 };
-static state states_46[2] = {
-       {1, arcs_46_0},
-       {3, arcs_46_1},
+static state states_50[2] = {
+       {1, arcs_50_0},
+       {3, arcs_50_1},
 };
-static arc arcs_47_0[1] = {
-       {120, 1},
+static arc arcs_51_0[1] = {
+       {124, 1},
 };
-static arc arcs_47_1[3] = {
-       {121, 0},
-       {122, 0},
+static arc arcs_51_1[3] = {
+       {125, 0},
+       {126, 0},
        {0, 1},
 };
-static state states_47[2] = {
-       {1, arcs_47_0},
-       {3, arcs_47_1},
+static state states_51[2] = {
+       {1, arcs_51_0},
+       {3, arcs_51_1},
 };
-static arc arcs_48_0[1] = {
-       {123, 1},
+static arc arcs_52_0[1] = {
+       {127, 1},
 };
-static arc arcs_48_1[5] = {
+static arc arcs_52_1[5] = {
        {28, 0},
-       {124, 0},
-       {125, 0},
-       {126, 0},
+       {128, 0},
+       {129, 0},
+       {130, 0},
        {0, 1},
 };
-static state states_48[2] = {
-       {1, arcs_48_0},
-       {5, arcs_48_1},
+static state states_52[2] = {
+       {1, arcs_52_0},
+       {5, arcs_52_1},
 };
-static arc arcs_49_0[4] = {
-       {121, 1},
-       {122, 1},
-       {127, 1},
-       {128, 2},
+static arc arcs_53_0[4] = {
+       {125, 1},
+       {126, 1},
+       {131, 1},
+       {132, 2},
 };
-static arc arcs_49_1[1] = {
-       {123, 2},
+static arc arcs_53_1[1] = {
+       {127, 2},
 };
-static arc arcs_49_2[1] = {
+static arc arcs_53_2[1] = {
        {0, 2},
 };
-static state states_49[3] = {
-       {4, arcs_49_0},
-       {1, arcs_49_1},
-       {1, arcs_49_2},
+static state states_53[3] = {
+       {4, arcs_53_0},
+       {1, arcs_53_1},
+       {1, arcs_53_2},
 };
-static arc arcs_50_0[1] = {
-       {129, 1},
+static arc arcs_54_0[1] = {
+       {133, 1},
 };
-static arc arcs_50_1[3] = {
-       {130, 1},
+static arc arcs_54_1[3] = {
+       {134, 1},
        {29, 2},
        {0, 1},
 };
-static arc arcs_50_2[1] = {
-       {123, 3},
+static arc arcs_54_2[1] = {
+       {127, 3},
 };
-static arc arcs_50_3[1] = {
+static arc arcs_54_3[1] = {
        {0, 3},
 };
-static state states_50[4] = {
-       {1, arcs_50_0},
-       {3, arcs_50_1},
-       {1, arcs_50_2},
-       {1, arcs_50_3},
+static state states_54[4] = {
+       {1, arcs_54_0},
+       {3, arcs_54_1},
+       {1, arcs_54_2},
+       {1, arcs_54_3},
 };
-static arc arcs_51_0[7] = {
+static arc arcs_55_0[7] = {
        {13, 1},
-       {132, 2},
-       {135, 3},
-       {138, 4},
+       {136, 2},
+       {139, 3},
+       {142, 4},
        {19, 5},
-       {140, 5},
-       {141, 6},
+       {144, 5},
+       {145, 6},
 };
-static arc arcs_51_1[2] = {
-       {131, 7},
+static arc arcs_55_1[2] = {
+       {135, 7},
        {15, 5},
 };
-static arc arcs_51_2[2] = {
-       {133, 8},
-       {134, 5},
+static arc arcs_55_2[2] = {
+       {137, 8},
+       {138, 5},
 };
-static arc arcs_51_3[2] = {
-       {136, 9},
-       {137, 5},
+static arc arcs_55_3[2] = {
+       {140, 9},
+       {141, 5},
 };
-static arc arcs_51_4[1] = {
-       {139, 10},
+static arc arcs_55_4[1] = {
+       {143, 10},
 };
-static arc arcs_51_5[1] = {
+static arc arcs_55_5[1] = {
        {0, 5},
 };
-static arc arcs_51_6[2] = {
-       {141, 6},
+static arc arcs_55_6[2] = {
+       {145, 6},
        {0, 6},
 };
-static arc arcs_51_7[1] = {
+static arc arcs_55_7[1] = {
        {15, 5},
 };
-static arc arcs_51_8[1] = {
-       {134, 5},
+static arc arcs_55_8[1] = {
+       {138, 5},
 };
-static arc arcs_51_9[1] = {
-       {137, 5},
+static arc arcs_55_9[1] = {
+       {141, 5},
 };
-static arc arcs_51_10[1] = {
-       {138, 5},
+static arc arcs_55_10[1] = {
+       {142, 5},
 };
-static state states_51[11] = {
-       {7, arcs_51_0},
-       {2, arcs_51_1},
-       {2, arcs_51_2},
-       {2, arcs_51_3},
-       {1, arcs_51_4},
-       {1, arcs_51_5},
-       {2, arcs_51_6},
-       {1, arcs_51_7},
-       {1, arcs_51_8},
-       {1, arcs_51_9},
-       {1, arcs_51_10},
+static state states_55[11] = {
+       {7, arcs_55_0},
+       {2, arcs_55_1},
+       {2, arcs_55_2},
+       {2, arcs_55_3},
+       {1, arcs_55_4},
+       {1, arcs_55_5},
+       {2, arcs_55_6},
+       {1, arcs_55_7},
+       {1, arcs_55_8},
+       {1, arcs_55_9},
+       {1, arcs_55_10},
 };
-static arc arcs_52_0[1] = {
+static arc arcs_56_0[1] = {
        {26, 1},
 };
-static arc arcs_52_1[3] = {
-       {142, 2},
+static arc arcs_56_1[3] = {
+       {146, 2},
        {27, 3},
        {0, 1},
 };
-static arc arcs_52_2[1] = {
+static arc arcs_56_2[1] = {
        {0, 2},
 };
-static arc arcs_52_3[2] = {
+static arc arcs_56_3[2] = {
        {26, 4},
        {0, 3},
 };
-static arc arcs_52_4[2] = {
+static arc arcs_56_4[2] = {
        {27, 3},
        {0, 4},
 };
-static state states_52[5] = {
-       {1, arcs_52_0},
-       {3, arcs_52_1},
-       {1, arcs_52_2},
-       {2, arcs_52_3},
-       {2, arcs_52_4},
+static state states_56[5] = {
+       {1, arcs_56_0},
+       {3, arcs_56_1},
+       {1, arcs_56_2},
+       {2, arcs_56_3},
+       {2, arcs_56_4},
 };
-static arc arcs_53_0[1] = {
+static arc arcs_57_0[1] = {
        {26, 1},
 };
-static arc arcs_53_1[3] = {
-       {143, 2},
+static arc arcs_57_1[3] = {
+       {147, 2},
        {27, 3},
        {0, 1},
 };
-static arc arcs_53_2[1] = {
+static arc arcs_57_2[1] = {
        {0, 2},
 };
-static arc arcs_53_3[2] = {
+static arc arcs_57_3[2] = {
        {26, 4},
        {0, 3},
 };
-static arc arcs_53_4[2] = {
+static arc arcs_57_4[2] = {
        {27, 3},
        {0, 4},
 };
-static state states_53[5] = {
-       {1, arcs_53_0},
-       {3, arcs_53_1},
-       {1, arcs_53_2},
-       {2, arcs_53_3},
-       {2, arcs_53_4},
+static state states_57[5] = {
+       {1, arcs_57_0},
+       {3, arcs_57_1},
+       {1, arcs_57_2},
+       {2, arcs_57_3},
+       {2, arcs_57_4},
 };
-static arc arcs_54_0[1] = {
-       {144, 1},
+static arc arcs_58_0[1] = {
+       {148, 1},
 };
-static arc arcs_54_1[2] = {
+static arc arcs_58_1[2] = {
        {23, 2},
        {21, 3},
 };
-static arc arcs_54_2[1] = {
+static arc arcs_58_2[1] = {
        {21, 3},
 };
-static arc arcs_54_3[1] = {
+static arc arcs_58_3[1] = {
        {26, 4},
 };
-static arc arcs_54_4[1] = {
+static arc arcs_58_4[1] = {
        {0, 4},
 };
-static state states_54[5] = {
-       {1, arcs_54_0},
-       {2, arcs_54_1},
-       {1, arcs_54_2},
-       {1, arcs_54_3},
-       {1, arcs_54_4},
+static state states_58[5] = {
+       {1, arcs_58_0},
+       {2, arcs_58_1},
+       {1, arcs_58_2},
+       {1, arcs_58_3},
+       {1, arcs_58_4},
 };
-static arc arcs_55_0[3] = {
+static arc arcs_59_0[3] = {
        {13, 1},
-       {132, 2},
-       {74, 3},
+       {136, 2},
+       {78, 3},
 };
-static arc arcs_55_1[2] = {
+static arc arcs_59_1[2] = {
        {14, 4},
        {15, 5},
 };
-static arc arcs_55_2[1] = {
-       {145, 6},
+static arc arcs_59_2[1] = {
+       {149, 6},
 };
-static arc arcs_55_3[1] = {
+static arc arcs_59_3[1] = {
        {19, 5},
 };
-static arc arcs_55_4[1] = {
+static arc arcs_59_4[1] = {
        {15, 5},
 };
-static arc arcs_55_5[1] = {
+static arc arcs_59_5[1] = {
        {0, 5},
 };
-static arc arcs_55_6[1] = {
-       {134, 5},
+static arc arcs_59_6[1] = {
+       {138, 5},
 };
-static state states_55[7] = {
-       {3, arcs_55_0},
-       {2, arcs_55_1},
-       {1, arcs_55_2},
-       {1, arcs_55_3},
-       {1, arcs_55_4},
-       {1, arcs_55_5},
-       {1, arcs_55_6},
+static state states_59[7] = {
+       {3, arcs_59_0},
+       {2, arcs_59_1},
+       {1, arcs_59_2},
+       {1, arcs_59_3},
+       {1, arcs_59_4},
+       {1, arcs_59_5},
+       {1, arcs_59_6},
 };
-static arc arcs_56_0[1] = {
-       {146, 1},
+static arc arcs_60_0[1] = {
+       {150, 1},
 };
-static arc arcs_56_1[2] = {
+static arc arcs_60_1[2] = {
        {27, 2},
        {0, 1},
 };
-static arc arcs_56_2[2] = {
-       {146, 1},
+static arc arcs_60_2[2] = {
+       {150, 1},
        {0, 2},
 };
-static state states_56[3] = {
-       {1, arcs_56_0},
-       {2, arcs_56_1},
-       {2, arcs_56_2},
+static state states_60[3] = {
+       {1, arcs_60_0},
+       {2, arcs_60_1},
+       {2, arcs_60_2},
 };
-static arc arcs_57_0[3] = {
-       {74, 1},
+static arc arcs_61_0[3] = {
+       {78, 1},
        {26, 2},
        {21, 3},
 };
-static arc arcs_57_1[1] = {
-       {74, 4},
+static arc arcs_61_1[1] = {
+       {78, 4},
 };
-static arc arcs_57_2[2] = {
+static arc arcs_61_2[2] = {
        {21, 3},
        {0, 2},
 };
-static arc arcs_57_3[3] = {
+static arc arcs_61_3[3] = {
        {26, 5},
-       {147, 6},
+       {151, 6},
        {0, 3},
 };
-static arc arcs_57_4[1] = {
-       {74, 6},
+static arc arcs_61_4[1] = {
+       {78, 6},
 };
-static arc arcs_57_5[2] = {
-       {147, 6},
+static arc arcs_61_5[2] = {
+       {151, 6},
        {0, 5},
 };
-static arc arcs_57_6[1] = {
+static arc arcs_61_6[1] = {
        {0, 6},
 };
-static state states_57[7] = {
-       {3, arcs_57_0},
-       {1, arcs_57_1},
-       {2, arcs_57_2},
-       {3, arcs_57_3},
-       {1, arcs_57_4},
-       {2, arcs_57_5},
-       {1, arcs_57_6},
+static state states_61[7] = {
+       {3, arcs_61_0},
+       {1, arcs_61_1},
+       {2, arcs_61_2},
+       {3, arcs_61_3},
+       {1, arcs_61_4},
+       {2, arcs_61_5},
+       {1, arcs_61_6},
 };
-static arc arcs_58_0[1] = {
+static arc arcs_62_0[1] = {
        {21, 1},
 };
-static arc arcs_58_1[2] = {
+static arc arcs_62_1[2] = {
        {26, 2},
        {0, 1},
 };
-static arc arcs_58_2[1] = {
+static arc arcs_62_2[1] = {
        {0, 2},
 };
-static state states_58[3] = {
-       {1, arcs_58_0},
-       {2, arcs_58_1},
-       {1, arcs_58_2},
+static state states_62[3] = {
+       {1, arcs_62_0},
+       {2, arcs_62_1},
+       {1, arcs_62_2},
 };
-static arc arcs_59_0[1] = {
-       {77, 1},
+static arc arcs_63_0[1] = {
+       {81, 1},
 };
-static arc arcs_59_1[2] = {
+static arc arcs_63_1[2] = {
        {27, 2},
        {0, 1},
 };
-static arc arcs_59_2[2] = {
-       {77, 1},
+static arc arcs_63_2[2] = {
+       {81, 1},
        {0, 2},
 };
-static state states_59[3] = {
-       {1, arcs_59_0},
-       {2, arcs_59_1},
-       {2, arcs_59_2},
+static state states_63[3] = {
+       {1, arcs_63_0},
+       {2, arcs_63_1},
+       {2, arcs_63_2},
 };
-static arc arcs_60_0[1] = {
+static arc arcs_64_0[1] = {
        {26, 1},
 };
-static arc arcs_60_1[2] = {
+static arc arcs_64_1[2] = {
        {27, 2},
        {0, 1},
 };
-static arc arcs_60_2[2] = {
+static arc arcs_64_2[2] = {
        {26, 1},
        {0, 2},
 };
-static state states_60[3] = {
-       {1, arcs_60_0},
-       {2, arcs_60_1},
-       {2, arcs_60_2},
+static state states_64[3] = {
+       {1, arcs_64_0},
+       {2, arcs_64_1},
+       {2, arcs_64_2},
 };
-static arc arcs_61_0[1] = {
+static arc arcs_65_0[1] = {
        {26, 1},
 };
-static arc arcs_61_1[2] = {
+static arc arcs_65_1[2] = {
        {27, 2},
        {0, 1},
 };
-static arc arcs_61_2[1] = {
+static arc arcs_65_2[1] = {
        {26, 3},
 };
-static arc arcs_61_3[2] = {
+static arc arcs_65_3[2] = {
        {27, 4},
        {0, 3},
 };
-static arc arcs_61_4[2] = {
+static arc arcs_65_4[2] = {
        {26, 3},
        {0, 4},
 };
-static state states_61[5] = {
-       {1, arcs_61_0},
-       {2, arcs_61_1},
-       {1, arcs_61_2},
-       {2, arcs_61_3},
-       {2, arcs_61_4},
+static state states_65[5] = {
+       {1, arcs_65_0},
+       {2, arcs_65_1},
+       {1, arcs_65_2},
+       {2, arcs_65_3},
+       {2, arcs_65_4},
 };
-static arc arcs_62_0[1] = {
+static arc arcs_66_0[1] = {
        {26, 1},
 };
-static arc arcs_62_1[1] = {
+static arc arcs_66_1[1] = {
        {21, 2},
 };
-static arc arcs_62_2[1] = {
+static arc arcs_66_2[1] = {
        {26, 3},
 };
-static arc arcs_62_3[2] = {
+static arc arcs_66_3[2] = {
        {27, 4},
        {0, 3},
 };
-static arc arcs_62_4[2] = {
+static arc arcs_66_4[2] = {
        {26, 1},
        {0, 4},
 };
-static state states_62[5] = {
-       {1, arcs_62_0},
-       {1, arcs_62_1},
-       {1, arcs_62_2},
-       {2, arcs_62_3},
-       {2, arcs_62_4},
+static state states_66[5] = {
+       {1, arcs_66_0},
+       {1, arcs_66_1},
+       {1, arcs_66_2},
+       {2, arcs_66_3},
+       {2, arcs_66_4},
 };
-static arc arcs_63_0[1] = {
-       {149, 1},
+static arc arcs_67_0[1] = {
+       {153, 1},
 };
-static arc arcs_63_1[1] = {
+static arc arcs_67_1[1] = {
        {19, 2},
 };
-static arc arcs_63_2[2] = {
+static arc arcs_67_2[2] = {
        {13, 3},
        {21, 4},
 };
-static arc arcs_63_3[1] = {
+static arc arcs_67_3[1] = {
        {9, 5},
 };
-static arc arcs_63_4[1] = {
+static arc arcs_67_4[1] = {
        {22, 6},
 };
-static arc arcs_63_5[1] = {
+static arc arcs_67_5[1] = {
        {15, 7},
 };
-static arc arcs_63_6[1] = {
+static arc arcs_67_6[1] = {
        {0, 6},
 };
-static arc arcs_63_7[1] = {
+static arc arcs_67_7[1] = {
        {21, 4},
 };
-static state states_63[8] = {
-       {1, arcs_63_0},
-       {1, arcs_63_1},
-       {2, arcs_63_2},
-       {1, arcs_63_3},
-       {1, arcs_63_4},
-       {1, arcs_63_5},
-       {1, arcs_63_6},
-       {1, arcs_63_7},
+static state states_67[8] = {
+       {1, arcs_67_0},
+       {1, arcs_67_1},
+       {2, arcs_67_2},
+       {1, arcs_67_3},
+       {1, arcs_67_4},
+       {1, arcs_67_5},
+       {1, arcs_67_6},
+       {1, arcs_67_7},
 };
-static arc arcs_64_0[3] = {
-       {150, 1},
+static arc arcs_68_0[3] = {
+       {154, 1},
        {28, 2},
        {29, 3},
 };
-static arc arcs_64_1[2] = {
+static arc arcs_68_1[2] = {
        {27, 4},
        {0, 1},
 };
-static arc arcs_64_2[1] = {
+static arc arcs_68_2[1] = {
        {26, 5},
 };
-static arc arcs_64_3[1] = {
+static arc arcs_68_3[1] = {
        {26, 6},
 };
-static arc arcs_64_4[4] = {
-       {150, 1},
+static arc arcs_68_4[4] = {
+       {154, 1},
        {28, 2},
        {29, 3},
        {0, 4},
 };
-static arc arcs_64_5[2] = {
+static arc arcs_68_5[2] = {
        {27, 7},
        {0, 5},
 };
-static arc arcs_64_6[1] = {
+static arc arcs_68_6[1] = {
        {0, 6},
 };
-static arc arcs_64_7[1] = {
+static arc arcs_68_7[1] = {
        {29, 3},
 };
-static state states_64[8] = {
-       {3, arcs_64_0},
-       {2, arcs_64_1},
-       {1, arcs_64_2},
-       {1, arcs_64_3},
-       {4, arcs_64_4},
-       {2, arcs_64_5},
-       {1, arcs_64_6},
-       {1, arcs_64_7},
+static state states_68[8] = {
+       {3, arcs_68_0},
+       {2, arcs_68_1},
+       {1, arcs_68_2},
+       {1, arcs_68_3},
+       {4, arcs_68_4},
+       {2, arcs_68_5},
+       {1, arcs_68_6},
+       {1, arcs_68_7},
 };
-static arc arcs_65_0[1] = {
+static arc arcs_69_0[1] = {
        {26, 1},
 };
-static arc arcs_65_1[3] = {
+static arc arcs_69_1[3] = {
        {25, 2},
-       {143, 3},
+       {147, 3},
        {0, 1},
 };
-static arc arcs_65_2[1] = {
+static arc arcs_69_2[1] = {
        {26, 4},
 };
-static arc arcs_65_3[1] = {
+static arc arcs_69_3[1] = {
        {0, 3},
 };
-static arc arcs_65_4[2] = {
-       {143, 3},
+static arc arcs_69_4[2] = {
+       {147, 3},
        {0, 4},
 };
-static state states_65[5] = {
-       {1, arcs_65_0},
-       {3, arcs_65_1},
-       {1, arcs_65_2},
-       {1, arcs_65_3},
-       {2, arcs_65_4},
+static state states_69[5] = {
+       {1, arcs_69_0},
+       {3, arcs_69_1},
+       {1, arcs_69_2},
+       {1, arcs_69_3},
+       {2, arcs_69_4},
 };
-static arc arcs_66_0[2] = {
-       {142, 1},
-       {152, 1},
+static arc arcs_70_0[2] = {
+       {146, 1},
+       {156, 1},
 };
-static arc arcs_66_1[1] = {
+static arc arcs_70_1[1] = {
        {0, 1},
 };
-static state states_66[2] = {
-       {2, arcs_66_0},
-       {1, arcs_66_1},
+static state states_70[2] = {
+       {2, arcs_70_0},
+       {1, arcs_70_1},
 };
-static arc arcs_67_0[1] = {
-       {89, 1},
+static arc arcs_71_0[1] = {
+       {93, 1},
 };
-static arc arcs_67_1[1] = {
+static arc arcs_71_1[1] = {
        {58, 2},
 };
-static arc arcs_67_2[1] = {
-       {78, 3},
+static arc arcs_71_2[1] = {
+       {82, 3},
 };
-static arc arcs_67_3[1] = {
-       {148, 4},
+static arc arcs_71_3[1] = {
+       {152, 4},
 };
-static arc arcs_67_4[2] = {
-       {151, 5},
+static arc arcs_71_4[2] = {
+       {155, 5},
        {0, 4},
 };
-static arc arcs_67_5[1] = {
+static arc arcs_71_5[1] = {
        {0, 5},
 };
-static state states_67[6] = {
-       {1, arcs_67_0},
-       {1, arcs_67_1},
-       {1, arcs_67_2},
-       {1, arcs_67_3},
-       {2, arcs_67_4},
-       {1, arcs_67_5},
+static state states_71[6] = {
+       {1, arcs_71_0},
+       {1, arcs_71_1},
+       {1, arcs_71_2},
+       {1, arcs_71_3},
+       {2, arcs_71_4},
+       {1, arcs_71_5},
 };
-static arc arcs_68_0[1] = {
-       {85, 1},
+static arc arcs_72_0[1] = {
+       {89, 1},
 };
-static arc arcs_68_1[1] = {
+static arc arcs_72_1[1] = {
        {26, 2},
 };
-static arc arcs_68_2[2] = {
-       {151, 3},
+static arc arcs_72_2[2] = {
+       {155, 3},
        {0, 2},
 };
-static arc arcs_68_3[1] = {
+static arc arcs_72_3[1] = {
        {0, 3},
 };
-static state states_68[4] = {
-       {1, arcs_68_0},
-       {1, arcs_68_1},
-       {2, arcs_68_2},
-       {1, arcs_68_3},
+static state states_72[4] = {
+       {1, arcs_72_0},
+       {1, arcs_72_1},
+       {2, arcs_72_2},
+       {1, arcs_72_3},
 };
-static arc arcs_69_0[2] = {
-       {143, 1},
-       {154, 1},
+static arc arcs_73_0[2] = {
+       {147, 1},
+       {158, 1},
 };
-static arc arcs_69_1[1] = {
+static arc arcs_73_1[1] = {
        {0, 1},
 };
-static state states_69[2] = {
-       {2, arcs_69_0},
-       {1, arcs_69_1},
+static state states_73[2] = {
+       {2, arcs_73_0},
+       {1, arcs_73_1},
 };
-static arc arcs_70_0[1] = {
-       {89, 1},
+static arc arcs_74_0[1] = {
+       {93, 1},
 };
-static arc arcs_70_1[1] = {
+static arc arcs_74_1[1] = {
        {58, 2},
 };
-static arc arcs_70_2[1] = {
-       {78, 3},
+static arc arcs_74_2[1] = {
+       {82, 3},
 };
-static arc arcs_70_3[1] = {
+static arc arcs_74_3[1] = {
        {26, 4},
 };
-static arc arcs_70_4[2] = {
-       {153, 5},
+static arc arcs_74_4[2] = {
+       {157, 5},
        {0, 4},
 };
-static arc arcs_70_5[1] = {
+static arc arcs_74_5[1] = {
        {0, 5},
 };
-static state states_70[6] = {
-       {1, arcs_70_0},
-       {1, arcs_70_1},
-       {1, arcs_70_2},
-       {1, arcs_70_3},
-       {2, arcs_70_4},
-       {1, arcs_70_5},
+static state states_74[6] = {
+       {1, arcs_74_0},
+       {1, arcs_74_1},
+       {1, arcs_74_2},
+       {1, arcs_74_3},
+       {2, arcs_74_4},
+       {1, arcs_74_5},
 };
-static arc arcs_71_0[1] = {
-       {85, 1},
+static arc arcs_75_0[1] = {
+       {89, 1},
 };
-static arc arcs_71_1[1] = {
+static arc arcs_75_1[1] = {
        {26, 2},
 };
-static arc arcs_71_2[2] = {
-       {153, 3},
+static arc arcs_75_2[2] = {
+       {157, 3},
        {0, 2},
 };
-static arc arcs_71_3[1] = {
+static arc arcs_75_3[1] = {
        {0, 3},
 };
-static state states_71[4] = {
-       {1, arcs_71_0},
-       {1, arcs_71_1},
-       {2, arcs_71_2},
-       {1, arcs_71_3},
+static state states_75[4] = {
+       {1, arcs_75_0},
+       {1, arcs_75_1},
+       {2, arcs_75_2},
+       {1, arcs_75_3},
 };
-static arc arcs_72_0[1] = {
+static arc arcs_76_0[1] = {
        {26, 1},
 };
-static arc arcs_72_1[2] = {
+static arc arcs_76_1[2] = {
        {27, 0},
        {0, 1},
 };
-static state states_72[2] = {
-       {1, arcs_72_0},
-       {2, arcs_72_1},
+static state states_76[2] = {
+       {1, arcs_76_0},
+       {2, arcs_76_1},
 };
-static arc arcs_73_0[1] = {
+static arc arcs_77_0[1] = {
        {19, 1},
 };
-static arc arcs_73_1[1] = {
+static arc arcs_77_1[1] = {
        {0, 1},
 };
-static state states_73[2] = {
-       {1, arcs_73_0},
-       {1, arcs_73_1},
+static state states_77[2] = {
+       {1, arcs_77_0},
+       {1, arcs_77_1},
 };
-static dfa dfas[74] = {
+static dfa dfas[78] = {
        {256, "single_input", 0, 3, states_0,
-        "\004\050\014\000\000\000\200\012\176\231\040\007\040\000\000\206\220\064\041\000"},
+        "\004\050\014\000\000\000\200\012\076\205\011\162\000\002\000\140\010\111\023\002"},
        {257, "file_input", 0, 2, states_1,
-        "\204\050\014\000\000\000\200\012\176\231\040\007\040\000\000\206\220\064\041\000"},
+        "\204\050\014\000\000\000\200\012\076\205\011\162\000\002\000\140\010\111\023\002"},
        {258, "eval_input", 0, 3, states_2,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\001\000"},
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000"},
        {259, "decorator", 0, 7, states_3,
         "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
        {260, "decorators", 0, 2, states_4,
@@ -1632,13 +1674,13 @@ static dfa dfas[74] = {
        {265, "fplist", 0, 3, states_9,
         "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
        {266, "stmt", 0, 2, states_10,
-        "\000\050\014\000\000\000\200\012\176\231\040\007\040\000\000\206\220\064\041\000"},
+        "\000\050\014\000\000\000\200\012\076\205\011\162\000\002\000\140\010\111\023\002"},
        {267, "simple_stmt", 0, 4, states_11,
-        "\000\040\010\000\000\000\200\012\176\231\000\000\040\000\000\206\220\064\001\000"},
+        "\000\040\010\000\000\000\200\012\076\205\011\000\000\002\000\140\010\111\023\000"},
        {268, "small_stmt", 0, 2, states_12,
-        "\000\040\010\000\000\000\200\012\176\231\000\000\040\000\000\206\220\064\001\000"},
+        "\000\040\010\000\000\000\200\012\076\205\011\000\000\002\000\140\010\111\023\000"},
        {269, "expr_stmt", 0, 6, states_13,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\001\000"},
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000"},
        {270, "augassign", 0, 2, states_14,
         "\000\000\000\000\000\370\177\000\000\000\000\000\000\000\000\000\000\000\000\000"},
        {271, "print_stmt", 0, 9, states_15,
@@ -1659,123 +1701,131 @@ static dfa dfas[74] = {
         "\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000"},
        {279, "raise_stmt", 0, 7, states_23,
         "\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000\000\000"},
-       {280, "import_stmt", 0, 9, states_24,
-        "\000\000\000\000\000\000\000\000\100\001\000\000\000\000\000\000\000\000\000\000"},
-       {281, "import_as_name", 0, 4, states_25,
+       {280, "import_stmt", 0, 2, states_24,
+        "\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\000"},
+       {281, "import_name", 0, 3, states_25,
+        "\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000"},
+       {282, "import_from", 0, 7, states_26,
+        "\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000"},
+       {283, "import_as_name", 0, 4, states_27,
+        "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {284, "dotted_as_name", 0, 4, states_28,
+        "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
+       {285, "import_as_names", 0, 3, states_29,
         "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {282, "dotted_as_name", 0, 4, states_26,
+       {286, "dotted_as_names", 0, 2, states_30,
         "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {283, "dotted_name", 0, 2, states_27,
+       {287, "dotted_name", 0, 2, states_31,
         "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {284, "global_stmt", 0, 3, states_28,
-        "\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000\000"},
-       {285, "exec_stmt", 0, 7, states_29,
-        "\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000"},
-       {286, "assert_stmt", 0, 5, states_30,
+       {288, "global_stmt", 0, 3, states_32,
         "\000\000\000\000\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000"},
-       {287, "compound_stmt", 0, 2, states_31,
-        "\000\010\004\000\000\000\000\000\000\000\040\007\000\000\000\000\000\000\040\000"},
-       {288, "if_stmt", 0, 8, states_32,
-        "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
-       {289, "while_stmt", 0, 8, states_33,
-        "\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000"},
-       {290, "for_stmt", 0, 10, states_34,
+       {289, "exec_stmt", 0, 7, states_33,
+        "\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000"},
+       {290, "assert_stmt", 0, 5, states_34,
+        "\000\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
+       {291, "compound_stmt", 0, 2, states_35,
+        "\000\010\004\000\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\002"},
+       {292, "if_stmt", 0, 8, states_36,
         "\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
-       {291, "try_stmt", 0, 10, states_35,
-        "\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000"},
-       {292, "except_clause", 0, 5, states_36,
+       {293, "while_stmt", 0, 8, states_37,
+        "\000\000\000\000\000\000\000\000\000\000\000\020\000\000\000\000\000\000\000\000"},
+       {294, "for_stmt", 0, 10, states_38,
         "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
-       {293, "suite", 0, 5, states_37,
-        "\004\040\010\000\000\000\200\012\176\231\000\000\040\000\000\206\220\064\001\000"},
-       {294, "test", 0, 4, states_38,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\001\000"},
-       {295, "and_test", 0, 2, states_39,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\000\000"},
-       {296, "not_test", 0, 3, states_40,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\000\000"},
-       {297, "comparison", 0, 2, states_41,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"},
-       {298, "comp_op", 0, 4, states_42,
-        "\000\000\000\000\000\000\000\000\000\100\000\000\040\377\000\000\000\000\000\000"},
-       {299, "expr", 0, 2, states_43,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"},
-       {300, "xor_expr", 0, 2, states_44,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"},
-       {301, "and_expr", 0, 2, states_45,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"},
-       {302, "shift_expr", 0, 2, states_46,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"},
-       {303, "arith_expr", 0, 2, states_47,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"},
-       {304, "term", 0, 2, states_48,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"},
-       {305, "factor", 0, 3, states_49,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"},
-       {306, "power", 0, 4, states_50,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\220\064\000\000"},
-       {307, "atom", 0, 11, states_51,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\220\064\000\000"},
-       {308, "listmaker", 0, 5, states_52,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\001\000"},
-       {309, "testlist_gexp", 0, 5, states_53,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\001\000"},
-       {310, "lambdef", 0, 5, states_54,
-        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000"},
-       {311, "trailer", 0, 7, states_55,
-        "\000\040\000\000\000\000\000\000\000\004\000\000\000\000\000\000\020\000\000\000"},
-       {312, "subscriptlist", 0, 3, states_56,
-        "\000\040\050\000\000\000\000\000\000\004\000\000\040\000\000\206\220\064\001\000"},
-       {313, "subscript", 0, 7, states_57,
-        "\000\040\050\000\000\000\000\000\000\004\000\000\040\000\000\206\220\064\001\000"},
-       {314, "sliceop", 0, 3, states_58,
+       {295, "try_stmt", 0, 10, states_39,
+        "\000\000\000\000\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\000"},
+       {296, "except_clause", 0, 5, states_40,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000"},
+       {297, "suite", 0, 5, states_41,
+        "\004\040\010\000\000\000\200\012\076\205\011\000\000\002\000\140\010\111\023\000"},
+       {298, "test", 0, 4, states_42,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000"},
+       {299, "and_test", 0, 2, states_43,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\003\000"},
+       {300, "not_test", 0, 3, states_44,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\003\000"},
+       {301, "comparison", 0, 2, states_45,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000"},
+       {302, "comp_op", 0, 4, states_46,
+        "\000\000\000\000\000\000\000\000\000\000\004\000\000\362\017\000\000\000\000\000"},
+       {303, "expr", 0, 2, states_47,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000"},
+       {304, "xor_expr", 0, 2, states_48,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000"},
+       {305, "and_expr", 0, 2, states_49,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000"},
+       {306, "shift_expr", 0, 2, states_50,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000"},
+       {307, "arith_expr", 0, 2, states_51,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000"},
+       {308, "term", 0, 2, states_52,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000"},
+       {309, "factor", 0, 3, states_53,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000"},
+       {310, "power", 0, 4, states_54,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\111\003\000"},
+       {311, "atom", 0, 11, states_55,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\111\003\000"},
+       {312, "listmaker", 0, 5, states_56,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000"},
+       {313, "testlist_gexp", 0, 5, states_57,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000"},
+       {314, "lambdef", 0, 5, states_58,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000"},
+       {315, "trailer", 0, 7, states_59,
+        "\000\040\000\000\000\000\000\000\000\100\000\000\000\000\000\000\000\001\000\000"},
+       {316, "subscriptlist", 0, 3, states_60,
+        "\000\040\050\000\000\000\000\000\000\100\000\000\000\002\000\140\010\111\023\000"},
+       {317, "subscript", 0, 7, states_61,
+        "\000\040\050\000\000\000\000\000\000\100\000\000\000\002\000\140\010\111\023\000"},
+       {318, "sliceop", 0, 3, states_62,
         "\000\000\040\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
-       {315, "exprlist", 0, 3, states_59,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\206\220\064\000\000"},
-       {316, "testlist", 0, 3, states_60,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\001\000"},
-       {317, "testlist_safe", 0, 5, states_61,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\001\000"},
-       {318, "dictmaker", 0, 5, states_62,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\001\000"},
-       {319, "classdef", 0, 8, states_63,
-        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040\000"},
-       {320, "arglist", 0, 8, states_64,
-        "\000\040\010\060\000\000\000\000\000\000\000\000\040\000\000\206\220\064\001\000"},
-       {321, "argument", 0, 5, states_65,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\001\000"},
-       {322, "list_iter", 0, 2, states_66,
-        "\000\000\000\000\000\000\000\000\000\000\040\002\000\000\000\000\000\000\000\000"},
-       {323, "list_for", 0, 6, states_67,
+       {319, "exprlist", 0, 3, states_63,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\000\000\140\010\111\003\000"},
+       {320, "testlist", 0, 3, states_64,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000"},
+       {321, "testlist_safe", 0, 5, states_65,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000"},
+       {322, "dictmaker", 0, 5, states_66,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000"},
+       {323, "classdef", 0, 8, states_67,
+        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002"},
+       {324, "arglist", 0, 8, states_68,
+        "\000\040\010\060\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000"},
+       {325, "argument", 0, 5, states_69,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000"},
+       {326, "list_iter", 0, 2, states_70,
+        "\000\000\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\000\000\000"},
+       {327, "list_for", 0, 6, states_71,
+        "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
+       {328, "list_if", 0, 4, states_72,
         "\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
-       {324, "list_if", 0, 4, states_68,
-        "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
-       {325, "gen_iter", 0, 2, states_69,
-        "\000\000\000\000\000\000\000\000\000\000\040\002\000\000\000\000\000\000\000\000"},
-       {326, "gen_for", 0, 6, states_70,
+       {329, "gen_iter", 0, 2, states_73,
+        "\000\000\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\000\000\000"},
+       {330, "gen_for", 0, 6, states_74,
+        "\000\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
+       {331, "gen_if", 0, 4, states_75,
         "\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
-       {327, "gen_if", 0, 4, states_71,
-        "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000\000"},
-       {328, "testlist1", 0, 2, states_72,
-        "\000\040\010\000\000\000\000\000\000\000\000\000\040\000\000\206\220\064\001\000"},
-       {329, "encoding_decl", 0, 2, states_73,
+       {332, "testlist1", 0, 2, states_76,
+        "\000\040\010\000\000\000\000\000\000\000\000\000\000\002\000\140\010\111\023\000"},
+       {333, "encoding_decl", 0, 2, states_77,
         "\000\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
 };
-static label labels[156] = {
+static label labels[160] = {
        {0, "EMPTY"},
        {256, 0},
        {4, 0},
        {267, 0},
-       {287, 0},
+       {291, 0},
        {257, 0},
        {266, 0},
        {0, 0},
        {258, 0},
-       {316, 0},
+       {320, 0},
        {259, 0},
        {50, 0},
-       {283, 0},
+       {287, 0},
        {7, 0},
-       {320, 0},
+       {324, 0},
        {8, 0},
        {260, 0},
        {261, 0},
@@ -1783,11 +1833,11 @@ static label labels[156] = {
        {1, 0},
        {262, 0},
        {11, 0},
-       {293, 0},
+       {297, 0},
        {263, 0},
        {264, 0},
        {22, 0},
-       {294, 0},
+       {298, 0},
        {12, 0},
        {16, 0},
        {36, 0},
@@ -1800,9 +1850,9 @@ static label labels[156] = {
        {273, 0},
        {274, 0},
        {280, 0},
-       {284, 0},
-       {285, 0},
-       {286, 0},
+       {288, 0},
+       {289, 0},
+       {290, 0},
        {270, 0},
        {37, 0},
        {38, 0},
@@ -1819,7 +1869,7 @@ static label labels[156] = {
        {1, "print"},
        {35, 0},
        {1, "del"},
-       {315, 0},
+       {319, 0},
        {1, "pass"},
        {275, 0},
        {276, 0},
@@ -1831,40 +1881,44 @@ static label labels[156] = {
        {1, "return"},
        {1, "yield"},
        {1, "raise"},
-       {1, "import"},
+       {281, 0},
        {282, 0},
+       {1, "import"},
+       {286, 0},
        {1, "from"},
-       {281, 0},
+       {285, 0},
+       {283, 0},
+       {284, 0},
        {23, 0},
        {1, "global"},
        {1, "exec"},
-       {299, 0},
+       {303, 0},
        {1, "in"},
        {1, "assert"},
-       {288, 0},
-       {289, 0},
-       {290, 0},
-       {291, 0},
-       {319, 0},
+       {292, 0},
+       {293, 0},
+       {294, 0},
+       {295, 0},
+       {323, 0},
        {1, "if"},
        {1, "elif"},
        {1, "else"},
        {1, "while"},
        {1, "for"},
        {1, "try"},
-       {292, 0},
+       {296, 0},
        {1, "finally"},
        {1, "except"},
        {5, 0},
        {6, 0},
-       {295, 0},
+       {299, 0},
        {1, "or"},
-       {310, 0},
-       {296, 0},
+       {314, 0},
+       {300, 0},
        {1, "and"},
        {1, "not"},
-       {297, 0},
-       {298, 0},
+       {301, 0},
+       {302, 0},
        {20, 0},
        {21, 0},
        {28, 0},
@@ -1873,54 +1927,54 @@ static label labels[156] = {
        {29, 0},
        {29, 0},
        {1, "is"},
-       {300, 0},
+       {304, 0},
        {18, 0},
-       {301, 0},
+       {305, 0},
        {33, 0},
-       {302, 0},
+       {306, 0},
        {19, 0},
-       {303, 0},
+       {307, 0},
        {34, 0},
-       {304, 0},
+       {308, 0},
        {14, 0},
        {15, 0},
-       {305, 0},
+       {309, 0},
        {17, 0},
        {24, 0},
        {48, 0},
        {32, 0},
-       {306, 0},
-       {307, 0},
+       {310, 0},
        {311, 0},
-       {309, 0},
+       {315, 0},
+       {313, 0},
        {9, 0},
-       {308, 0},
+       {312, 0},
        {10, 0},
        {26, 0},
-       {318, 0},
+       {322, 0},
        {27, 0},
        {25, 0},
-       {328, 0},
+       {332, 0},
        {2, 0},
        {3, 0},
-       {323, 0},
-       {326, 0},
+       {327, 0},
+       {330, 0},
        {1, "lambda"},
-       {312, 0},
-       {313, 0},
-       {314, 0},
+       {316, 0},
        {317, 0},
-       {1, "class"},
+       {318, 0},
        {321, 0},
-       {322, 0},
-       {324, 0},
+       {1, "class"},
        {325, 0},
-       {327, 0},
+       {326, 0},
+       {328, 0},
        {329, 0},
+       {331, 0},
+       {333, 0},
 };
 grammar _PyParser_Grammar = {
-       74,
+       78,
        dfas,
-       {156, labels},
+       {160, labels},
        256
 };