From 1a4ddaecc732c207fa69890db87ac4b47da867b8 Mon Sep 17 00:00:00 2001 From: Anthony Baxter Date: Tue, 31 Aug 2004 10:07:13 +0000 Subject: [PATCH] SF patch #1007189, multi-line imports, for instance: "from blah import (foo, bar baz, bongo)" --- Doc/ref/ref6.tex | 7 +- Grammar/Grammar | 6 +- Include/graminit.h | 102 +- Lib/compiler/transformer.py | 76 +- Lib/symbol.py | 102 +- Lib/test/output/test_grammar | 3 +- Lib/test/test_compile.py | 41 + Lib/test/test_grammar.py | 6 +- Lib/test/test_parser.py | 14 + Misc/NEWS | 5 +- Modules/parsermodule.c | 120 +- Python/compile.c | 78 +- Python/future.c | 25 +- Python/graminit.c | 1990 +++++++++++++++++----------------- 14 files changed, 1394 insertions(+), 1181 deletions(-) diff --git a/Doc/ref/ref6.tex b/Doc/ref/ref6.tex index 1017acaa476..e74a7dded07 100644 --- a/Doc/ref/ref6.tex +++ b/Doc/ref/ref6.tex @@ -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} diff --git a/Grammar/Grammar b/Grammar/Grammar index 8a7eb59243e..9e4dad8078f 100644 --- a/Grammar/Grammar +++ b/Grammar/Grammar @@ -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]] diff --git a/Include/graminit.h b/Include/graminit.h index ac351be4365..a46cdc9e06c 100644 --- a/Include/graminit.h +++ b/Include/graminit.h @@ -23,52 +23,56 @@ #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 diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py index cdeb5ffdc22..9fb18c28ae5 100644 --- a/Lib/compiler/transformer.py +++ b/Lib/compiler/transformer.py @@ -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): diff --git a/Lib/symbol.py b/Lib/symbol.py index cb57208005e..eaf5a2581d3 100755 --- a/Lib/symbol.py +++ b/Lib/symbol.py @@ -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 = {} diff --git a/Lib/test/output/test_grammar b/Lib/test/output/test_grammar index 00fab49a6dc..6174e7aca79 100644 --- a/Lib/test/output/test_grammar +++ b/Lib/test/output/test_grammar @@ -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 diff --git a/Lib/test/test_compile.py b/Lib/test/test_compile.py index b1644cb35e6..5011d036852 100644 --- a/Lib/test/test_compile.py +++ b/Lib/test/test_compile.py @@ -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) diff --git a/Lib/test/test_grammar.py b/Lib/test/test_grammar.py index e0d5b745d64..7f5d10d1e59 100644 --- a/Lib/test/test_grammar.py +++ b/Lib/test/test_grammar.py @@ -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(): diff --git a/Lib/test/test_parser.py b/Lib/test/test_parser.py index 978ce5712c4..0f8c1d0d0ab 100644 --- a/Lib/test/test_parser.py +++ b/Lib/test/test_parser.py @@ -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") diff --git a/Misc/NEWS b/Misc/NEWS index e01b9e71f0a..819a107ae07 100644 --- 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. diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c index 5f53982627d..eb23b585724 100644 --- a/Modules/parsermodule.c +++ b/Modules/parsermodule.c @@ -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)); + int res = validate_numnodes(tree, 1, "import_stmt"); - if (res && (strcmp(STR(CHILD(tree, 0)), "import") == 0)) { - int j; + if (res) { + int ntype = TYPE(CHILD(tree, 0)); - 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)); - } + 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; diff --git a/Python/compile.c b/Python/compile.c index 4653ff7bc33..e8f4d67d173 100644 --- a/Python/compile.c +++ b/Python/compile.c @@ -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); } } diff --git a/Python/future.c b/Python/future.c index 377ad9abde5..20d8dd29092 100644 --- a/Python/future.c +++ b/Python/future.c @@ -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; } diff --git a/Python/graminit.c b/Python/graminit.c index f4f207e1b75..c4fe66148bf 100644 --- a/Python/graminit.c +++ b/Python/graminit.c @@ -488,836 +488,795 @@ 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 arc arcs_24_3[2] = { - {27, 1}, - {0, 3}, -}; -static arc arcs_24_4[1] = { - {70, 5}, -}; -static arc arcs_24_5[2] = { - {28, 6}, - {73, 7}, -}; -static arc arcs_24_6[1] = { - {0, 6}, -}; -static arc arcs_24_7[2] = { - {27, 8}, - {0, 7}, -}; -static arc arcs_24_8[1] = { - {73, 7}, -}; -static state states_24[9] = { +static state states_24[2] = { {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_25_0[1] = { - {19, 1}, + {72, 1}, }; -static arc arcs_25_1[2] = { - {19, 2}, - {0, 1}, +static arc arcs_25_1[1] = { + {73, 2}, }; static arc arcs_25_2[1] = { - {19, 3}, + {0, 2}, }; -static arc arcs_25_3[1] = { - {0, 3}, -}; -static state states_25[4] = { +static state states_25[3] = { {1, arcs_25_0}, - {2, arcs_25_1}, + {1, arcs_25_1}, {1, arcs_25_2}, - {1, arcs_25_3}, }; static arc arcs_26_0[1] = { - {12, 1}, + {74, 1}, }; -static arc arcs_26_1[2] = { - {19, 2}, - {0, 1}, +static arc arcs_26_1[1] = { + {12, 2}, }; static arc arcs_26_2[1] = { - {19, 3}, + {72, 3}, }; -static arc arcs_26_3[1] = { - {0, 3}, +static arc arcs_26_3[3] = { + {28, 4}, + {13, 5}, + {75, 4}, }; -static state states_26[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}, - {2, arcs_26_1}, + {1, arcs_26_1}, {1, arcs_26_2}, - {1, arcs_26_3}, + {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_27_1[2] = { - {74, 0}, + {19, 2}, {0, 1}, }; -static state states_27[2] = { +static arc arcs_27_2[1] = { + {19, 3}, +}; +static arc arcs_27_3[1] = { + {0, 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_28_0[1] = { - {75, 1}, + {12, 1}, }; -static arc arcs_28_1[1] = { +static arc arcs_28_1[2] = { {19, 2}, + {0, 1}, }; -static arc arcs_28_2[2] = { - {27, 1}, - {0, 2}, +static arc arcs_28_2[1] = { + {19, 3}, }; -static state states_28[3] = { +static arc arcs_28_3[1] = { + {0, 3}, +}; +static state states_28[4] = { {1, arcs_28_0}, - {1, arcs_28_1}, - {2, arcs_28_2}, + {2, arcs_28_1}, + {1, arcs_28_2}, + {1, arcs_28_3}, }; static arc arcs_29_0[1] = { {76, 1}, }; -static arc arcs_29_1[1] = { - {77, 2}, +static arc arcs_29_1[2] = { + {27, 2}, + {0, 1}, }; static arc arcs_29_2[2] = { - {78, 3}, + {76, 1}, {0, 2}, }; -static arc arcs_29_3[1] = { - {26, 4}, -}; -static arc arcs_29_4[2] = { - {27, 5}, - {0, 4}, -}; -static arc arcs_29_5[1] = { - {26, 6}, -}; -static arc arcs_29_6[1] = { - {0, 6}, -}; -static state states_29[7] = { +static state states_29[3] = { {1, arcs_29_0}, - {1, arcs_29_1}, + {2, arcs_29_1}, {2, arcs_29_2}, - {1, arcs_29_3}, - {2, arcs_29_4}, - {1, arcs_29_5}, - {1, arcs_29_6}, }; static arc arcs_30_0[1] = { - {79, 1}, + {77, 1}, }; -static arc arcs_30_1[1] = { - {26, 2}, +static arc arcs_30_1[2] = { + {27, 0}, + {0, 1}, }; -static arc arcs_30_2[2] = { - {27, 3}, - {0, 2}, -}; -static arc arcs_30_3[1] = { - {26, 4}, -}; -static arc arcs_30_4[1] = { - {0, 4}, -}; -static state states_30[5] = { +static state states_30[2] = { {1, arcs_30_0}, - {1, arcs_30_1}, - {2, arcs_30_2}, - {1, arcs_30_3}, - {1, arcs_30_4}, + {2, arcs_30_1}, }; -static arc arcs_31_0[6] = { - {80, 1}, - {81, 1}, - {82, 1}, - {83, 1}, - {17, 1}, - {84, 1}, +static arc arcs_31_0[1] = { + {19, 1}, }; -static arc arcs_31_1[1] = { +static arc arcs_31_1[2] = { + {78, 0}, {0, 1}, }; static state states_31[2] = { - {6, arcs_31_0}, - {1, arcs_31_1}, + {1, arcs_31_0}, + {2, arcs_31_1}, }; static arc arcs_32_0[1] = { - {85, 1}, + {79, 1}, }; static arc arcs_32_1[1] = { - {26, 2}, + {19, 2}, }; -static arc arcs_32_2[1] = { - {21, 3}, +static arc arcs_32_2[2] = { + {27, 1}, + {0, 2}, }; -static arc arcs_32_3[1] = { - {22, 4}, -}; -static arc arcs_32_4[3] = { - {86, 1}, - {87, 5}, - {0, 4}, -}; -static arc arcs_32_5[1] = { - {21, 6}, -}; -static arc arcs_32_6[1] = { - {22, 7}, -}; -static arc arcs_32_7[1] = { - {0, 7}, -}; -static state states_32[8] = { +static state states_32[3] = { {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}, + {2, arcs_32_2}, }; static arc arcs_33_0[1] = { - {88, 1}, + {80, 1}, }; static arc arcs_33_1[1] = { - {26, 2}, + {81, 2}, }; -static arc arcs_33_2[1] = { - {21, 3}, +static arc arcs_33_2[2] = { + {82, 3}, + {0, 2}, }; static arc arcs_33_3[1] = { - {22, 4}, + {26, 4}, }; static arc arcs_33_4[2] = { - {87, 5}, + {27, 5}, {0, 4}, }; static arc arcs_33_5[1] = { - {21, 6}, + {26, 6}, }; static arc arcs_33_6[1] = { - {22, 7}, + {0, 6}, }; -static arc arcs_33_7[1] = { - {0, 7}, -}; -static state states_33[8] = { +static state states_33[7] = { {1, arcs_33_0}, {1, arcs_33_1}, - {1, arcs_33_2}, + {2, arcs_33_2}, {1, arcs_33_3}, {2, arcs_33_4}, {1, arcs_33_5}, {1, arcs_33_6}, - {1, arcs_33_7}, }; static arc arcs_34_0[1] = { - {89, 1}, + {83, 1}, }; static arc arcs_34_1[1] = { - {58, 2}, -}; -static arc arcs_34_2[1] = { - {78, 3}, -}; -static arc arcs_34_3[1] = { - {9, 4}, -}; -static arc arcs_34_4[1] = { - {21, 5}, -}; -static arc arcs_34_5[1] = { - {22, 6}, -}; -static arc arcs_34_6[2] = { - {87, 7}, - {0, 6}, -}; -static arc arcs_34_7[1] = { - {21, 8}, -}; -static arc arcs_34_8[1] = { - {22, 9}, -}; -static arc arcs_34_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 arc arcs_35_0[1] = { - {90, 1}, -}; -static arc arcs_35_1[1] = { - {21, 2}, -}; -static arc arcs_35_2[1] = { - {22, 3}, -}; -static arc arcs_35_3[2] = { - {91, 4}, - {92, 5}, -}; -static arc arcs_35_4[1] = { - {21, 6}, -}; -static arc arcs_35_5[1] = { - {21, 7}, -}; -static arc arcs_35_6[1] = { - {22, 8}, -}; -static arc arcs_35_7[1] = { - {22, 9}, -}; -static arc arcs_35_8[3] = { - {91, 4}, - {87, 5}, - {0, 8}, -}; -static arc arcs_35_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] = { {26, 2}, - {0, 1}, }; -static arc arcs_36_2[2] = { +static arc arcs_34_2[2] = { {27, 3}, {0, 2}, }; -static arc arcs_36_3[1] = { +static arc arcs_34_3[1] = { {26, 4}, }; -static arc arcs_36_4[1] = { +static arc arcs_34_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_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_37_0[2] = { - {3, 1}, - {2, 2}, +static arc arcs_35_0[6] = { + {84, 1}, + {85, 1}, + {86, 1}, + {87, 1}, + {17, 1}, + {88, 1}, }; -static arc arcs_37_1[1] = { +static arc arcs_35_1[1] = { {0, 1}, }; +static state states_35[2] = { + {6, arcs_35_0}, + {1, arcs_35_1}, +}; +static arc arcs_36_0[1] = { + {89, 1}, +}; +static arc arcs_36_1[1] = { + {26, 2}, +}; +static arc arcs_36_2[1] = { + {21, 3}, +}; +static arc arcs_36_3[1] = { + {22, 4}, +}; +static arc arcs_36_4[3] = { + {90, 1}, + {91, 5}, + {0, 4}, +}; +static arc arcs_36_5[1] = { + {21, 6}, +}; +static arc arcs_36_6[1] = { + {22, 7}, +}; +static arc arcs_36_7[1] = { + {0, 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_37_0[1] = { + {92, 1}, +}; +static arc arcs_37_1[1] = { + {26, 2}, +}; static arc arcs_37_2[1] = { - {94, 3}, + {21, 3}, }; static arc arcs_37_3[1] = { - {6, 4}, + {22, 4}, }; static arc arcs_37_4[2] = { - {6, 4}, - {95, 1}, + {91, 5}, + {0, 4}, }; -static state states_37[5] = { - {2, arcs_37_0}, +static arc arcs_37_5[1] = { + {21, 6}, +}; +static arc arcs_37_6[1] = { + {22, 7}, +}; +static arc arcs_37_7[1] = { + {0, 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_38_0[2] = { - {96, 1}, - {98, 2}, +static arc arcs_38_0[1] = { + {93, 1}, }; -static arc arcs_38_1[2] = { - {97, 3}, - {0, 1}, +static arc arcs_38_1[1] = { + {58, 2}, }; static arc arcs_38_2[1] = { - {0, 2}, + {82, 3}, }; static arc arcs_38_3[1] = { - {96, 1}, + {9, 4}, }; -static state states_38[4] = { - {2, arcs_38_0}, - {2, arcs_38_1}, +static arc arcs_38_4[1] = { + {21, 5}, +}; +static arc arcs_38_5[1] = { + {22, 6}, +}; +static arc arcs_38_6[2] = { + {91, 7}, + {0, 6}, +}; +static arc arcs_38_7[1] = { + {21, 8}, +}; +static arc arcs_38_8[1] = { + {22, 9}, +}; +static arc arcs_38_9[1] = { + {0, 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_39_0[1] = { - {99, 1}, + {94, 1}, }; -static arc arcs_39_1[2] = { - {100, 0}, +static arc arcs_39_1[1] = { + {21, 2}, +}; +static arc arcs_39_2[1] = { + {22, 3}, +}; +static arc arcs_39_3[2] = { + {95, 4}, + {96, 5}, +}; +static arc arcs_39_4[1] = { + {21, 6}, +}; +static arc arcs_39_5[1] = { + {21, 7}, +}; +static arc arcs_39_6[1] = { + {22, 8}, +}; +static arc arcs_39_7[1] = { + {22, 9}, +}; +static arc arcs_39_8[3] = { + {95, 4}, + {91, 5}, + {0, 8}, +}; +static arc arcs_39_9[1] = { + {0, 9}, +}; +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 state states_39[2] = { - {1, arcs_39_0}, - {2, arcs_39_1}, -}; -static arc arcs_40_0[2] = { - {101, 1}, - {102, 2}, -}; -static arc arcs_40_1[1] = { - {99, 2}, -}; -static arc arcs_40_2[1] = { +static arc arcs_40_2[2] = { + {27, 3}, {0, 2}, }; -static state states_40[3] = { - {2, arcs_40_0}, - {1, arcs_40_1}, - {1, arcs_40_2}, +static arc arcs_40_3[1] = { + {26, 4}, }; -static arc arcs_41_0[1] = { - {77, 1}, +static arc arcs_40_4[1] = { + {0, 4}, }; -static arc arcs_41_1[2] = { - {103, 0}, +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_41_0[2] = { + {3, 1}, + {2, 2}, +}; +static arc arcs_41_1[1] = { {0, 1}, }; -static state states_41[2] = { - {1, arcs_41_0}, - {2, arcs_41_1}, +static arc arcs_41_2[1] = { + {98, 3}, }; -static arc arcs_42_0[10] = { - {104, 1}, - {105, 1}, - {106, 1}, - {107, 1}, - {108, 1}, - {109, 1}, - {110, 1}, - {78, 1}, - {101, 2}, - {111, 3}, +static arc arcs_41_3[1] = { + {6, 4}, }; -static arc arcs_42_1[1] = { +static arc arcs_41_4[2] = { + {6, 4}, + {99, 1}, +}; +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_42_0[2] = { + {100, 1}, + {102, 2}, +}; +static arc arcs_42_1[2] = { + {101, 3}, {0, 1}, }; static arc arcs_42_2[1] = { - {78, 1}, + {0, 2}, }; -static arc arcs_42_3[2] = { - {101, 1}, - {0, 3}, +static arc arcs_42_3[1] = { + {100, 1}, }; static state states_42[4] = { - {10, arcs_42_0}, - {1, arcs_42_1}, + {2, arcs_42_0}, + {2, arcs_42_1}, {1, arcs_42_2}, - {2, arcs_42_3}, + {1, arcs_42_3}, }; static arc arcs_43_0[1] = { - {112, 1}, + {103, 1}, }; static arc arcs_43_1[2] = { - {113, 0}, + {104, 0}, {0, 1}, }; static state states_43[2] = { {1, arcs_43_0}, {2, arcs_43_1}, }; -static arc arcs_44_0[1] = { - {114, 1}, +static arc arcs_44_0[2] = { + {105, 1}, + {106, 2}, }; -static arc arcs_44_1[2] = { - {115, 0}, - {0, 1}, +static arc arcs_44_1[1] = { + {103, 2}, }; -static state states_44[2] = { - {1, arcs_44_0}, - {2, arcs_44_1}, +static arc arcs_44_2[1] = { + {0, 2}, +}; +static state states_44[3] = { + {2, arcs_44_0}, + {1, arcs_44_1}, + {1, arcs_44_2}, }; static arc arcs_45_0[1] = { - {116, 1}, + {81, 1}, }; static arc arcs_45_1[2] = { - {117, 0}, + {107, 0}, {0, 1}, }; static state states_45[2] = { {1, arcs_45_0}, {2, arcs_45_1}, }; -static arc arcs_46_0[1] = { - {118, 1}, +static arc arcs_46_0[10] = { + {108, 1}, + {109, 1}, + {110, 1}, + {111, 1}, + {112, 1}, + {113, 1}, + {114, 1}, + {82, 1}, + {105, 2}, + {115, 3}, }; -static arc arcs_46_1[3] = { - {119, 0}, - {56, 0}, +static arc arcs_46_1[1] = { {0, 1}, }; -static state states_46[2] = { - {1, arcs_46_0}, - {3, arcs_46_1}, +static arc arcs_46_2[1] = { + {82, 1}, +}; +static arc arcs_46_3[2] = { + {105, 1}, + {0, 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_47_0[1] = { - {120, 1}, + {116, 1}, }; -static arc arcs_47_1[3] = { - {121, 0}, - {122, 0}, +static arc arcs_47_1[2] = { + {117, 0}, {0, 1}, }; static state states_47[2] = { {1, arcs_47_0}, - {3, arcs_47_1}, + {2, arcs_47_1}, }; static arc arcs_48_0[1] = { - {123, 1}, + {118, 1}, }; -static arc arcs_48_1[5] = { - {28, 0}, - {124, 0}, - {125, 0}, - {126, 0}, +static arc arcs_48_1[2] = { + {119, 0}, {0, 1}, }; static state states_48[2] = { {1, arcs_48_0}, - {5, arcs_48_1}, + {2, arcs_48_1}, }; -static arc arcs_49_0[4] = { - {121, 1}, - {122, 1}, - {127, 1}, - {128, 2}, +static arc arcs_49_0[1] = { + {120, 1}, }; -static arc arcs_49_1[1] = { - {123, 2}, +static arc arcs_49_1[2] = { + {121, 0}, + {0, 1}, }; -static arc arcs_49_2[1] = { - {0, 2}, -}; -static state states_49[3] = { - {4, arcs_49_0}, - {1, arcs_49_1}, - {1, arcs_49_2}, +static state states_49[2] = { + {1, arcs_49_0}, + {2, arcs_49_1}, }; static arc arcs_50_0[1] = { - {129, 1}, + {122, 1}, }; static arc arcs_50_1[3] = { - {130, 1}, - {29, 2}, + {123, 0}, + {56, 0}, {0, 1}, }; -static arc arcs_50_2[1] = { - {123, 3}, -}; -static arc arcs_50_3[1] = { - {0, 3}, -}; -static state states_50[4] = { +static state states_50[2] = { {1, arcs_50_0}, {3, arcs_50_1}, - {1, arcs_50_2}, - {1, arcs_50_3}, }; -static arc arcs_51_0[7] = { - {13, 1}, - {132, 2}, - {135, 3}, - {138, 4}, - {19, 5}, - {140, 5}, - {141, 6}, +static arc arcs_51_0[1] = { + {124, 1}, }; -static arc arcs_51_1[2] = { - {131, 7}, - {15, 5}, +static arc arcs_51_1[3] = { + {125, 0}, + {126, 0}, + {0, 1}, }; -static arc arcs_51_2[2] = { - {133, 8}, - {134, 5}, -}; -static arc arcs_51_3[2] = { - {136, 9}, - {137, 5}, -}; -static arc arcs_51_4[1] = { - {139, 10}, -}; -static arc arcs_51_5[1] = { - {0, 5}, -}; -static arc arcs_51_6[2] = { - {141, 6}, - {0, 6}, -}; -static arc arcs_51_7[1] = { - {15, 5}, -}; -static arc arcs_51_8[1] = { - {134, 5}, -}; -static arc arcs_51_9[1] = { - {137, 5}, -}; -static arc arcs_51_10[1] = { - {138, 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_51[2] = { + {1, arcs_51_0}, + {3, arcs_51_1}, }; static arc arcs_52_0[1] = { - {26, 1}, + {127, 1}, }; -static arc arcs_52_1[3] = { - {142, 2}, - {27, 3}, +static arc arcs_52_1[5] = { + {28, 0}, + {128, 0}, + {129, 0}, + {130, 0}, {0, 1}, }; -static arc arcs_52_2[1] = { - {0, 2}, -}; -static arc arcs_52_3[2] = { - {26, 4}, - {0, 3}, -}; -static arc arcs_52_4[2] = { - {27, 3}, - {0, 4}, -}; -static state states_52[5] = { +static state states_52[2] = { {1, arcs_52_0}, - {3, arcs_52_1}, - {1, arcs_52_2}, - {2, arcs_52_3}, - {2, arcs_52_4}, + {5, arcs_52_1}, }; -static arc arcs_53_0[1] = { - {26, 1}, +static arc arcs_53_0[4] = { + {125, 1}, + {126, 1}, + {131, 1}, + {132, 2}, }; -static arc arcs_53_1[3] = { - {143, 2}, - {27, 3}, - {0, 1}, +static arc arcs_53_1[1] = { + {127, 2}, }; static arc arcs_53_2[1] = { {0, 2}, }; -static arc arcs_53_3[2] = { - {26, 4}, - {0, 3}, -}; -static arc arcs_53_4[2] = { - {27, 3}, - {0, 4}, -}; -static state states_53[5] = { - {1, arcs_53_0}, - {3, arcs_53_1}, +static state states_53[3] = { + {4, arcs_53_0}, + {1, arcs_53_1}, {1, arcs_53_2}, - {2, arcs_53_3}, - {2, arcs_53_4}, }; static arc arcs_54_0[1] = { - {144, 1}, + {133, 1}, }; -static arc arcs_54_1[2] = { - {23, 2}, - {21, 3}, +static arc arcs_54_1[3] = { + {134, 1}, + {29, 2}, + {0, 1}, }; static arc arcs_54_2[1] = { - {21, 3}, + {127, 3}, }; static arc arcs_54_3[1] = { - {26, 4}, + {0, 3}, }; -static arc arcs_54_4[1] = { - {0, 4}, -}; -static state states_54[5] = { +static state states_54[4] = { {1, arcs_54_0}, - {2, arcs_54_1}, + {3, arcs_54_1}, {1, arcs_54_2}, {1, arcs_54_3}, - {1, arcs_54_4}, }; -static arc arcs_55_0[3] = { +static arc arcs_55_0[7] = { {13, 1}, - {132, 2}, - {74, 3}, -}; -static arc arcs_55_1[2] = { - {14, 4}, - {15, 5}, -}; -static arc arcs_55_2[1] = { + {136, 2}, + {139, 3}, + {142, 4}, + {19, 5}, + {144, 5}, {145, 6}, }; -static arc arcs_55_3[1] = { - {19, 5}, +static arc arcs_55_1[2] = { + {135, 7}, + {15, 5}, +}; +static arc arcs_55_2[2] = { + {137, 8}, + {138, 5}, +}; +static arc arcs_55_3[2] = { + {140, 9}, + {141, 5}, }; static arc arcs_55_4[1] = { - {15, 5}, + {143, 10}, }; static arc arcs_55_5[1] = { {0, 5}, }; -static arc arcs_55_6[1] = { - {134, 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 arc arcs_56_0[1] = { - {146, 1}, -}; -static arc arcs_56_1[2] = { - {27, 2}, - {0, 1}, -}; -static arc arcs_56_2[2] = { - {146, 1}, - {0, 2}, -}; -static state states_56[3] = { - {1, arcs_56_0}, - {2, arcs_56_1}, - {2, arcs_56_2}, -}; -static arc arcs_57_0[3] = { - {74, 1}, - {26, 2}, - {21, 3}, -}; -static arc arcs_57_1[1] = { - {74, 4}, -}; -static arc arcs_57_2[2] = { - {21, 3}, - {0, 2}, -}; -static arc arcs_57_3[3] = { - {26, 5}, - {147, 6}, - {0, 3}, -}; -static arc arcs_57_4[1] = { - {74, 6}, -}; -static arc arcs_57_5[2] = { - {147, 6}, - {0, 5}, -}; -static arc arcs_57_6[1] = { +static arc arcs_55_6[2] = { + {145, 6}, {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 arc arcs_55_7[1] = { + {15, 5}, }; -static arc arcs_58_0[1] = { - {21, 1}, +static arc arcs_55_8[1] = { + {138, 5}, }; -static arc arcs_58_1[2] = { - {26, 2}, +static arc arcs_55_9[1] = { + {141, 5}, +}; +static arc arcs_55_10[1] = { + {142, 5}, +}; +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_56_0[1] = { + {26, 1}, +}; +static arc arcs_56_1[3] = { + {146, 2}, + {27, 3}, {0, 1}, }; -static arc arcs_58_2[1] = { +static arc arcs_56_2[1] = { {0, 2}, }; -static state states_58[3] = { +static arc arcs_56_3[2] = { + {26, 4}, + {0, 3}, +}; +static arc arcs_56_4[2] = { + {27, 3}, + {0, 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_57_0[1] = { + {26, 1}, +}; +static arc arcs_57_1[3] = { + {147, 2}, + {27, 3}, + {0, 1}, +}; +static arc arcs_57_2[1] = { + {0, 2}, +}; +static arc arcs_57_3[2] = { + {26, 4}, + {0, 3}, +}; +static arc arcs_57_4[2] = { + {27, 3}, + {0, 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_58_0[1] = { + {148, 1}, +}; +static arc arcs_58_1[2] = { + {23, 2}, + {21, 3}, +}; +static arc arcs_58_2[1] = { + {21, 3}, +}; +static arc arcs_58_3[1] = { + {26, 4}, +}; +static arc arcs_58_4[1] = { + {0, 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_59_0[1] = { - {77, 1}, +static arc arcs_59_0[3] = { + {13, 1}, + {136, 2}, + {78, 3}, }; static arc arcs_59_1[2] = { - {27, 2}, - {0, 1}, + {14, 4}, + {15, 5}, }; -static arc arcs_59_2[2] = { - {77, 1}, - {0, 2}, +static arc arcs_59_2[1] = { + {149, 6}, }; -static state states_59[3] = { - {1, arcs_59_0}, +static arc arcs_59_3[1] = { + {19, 5}, +}; +static arc arcs_59_4[1] = { + {15, 5}, +}; +static arc arcs_59_5[1] = { + {0, 5}, +}; +static arc arcs_59_6[1] = { + {138, 5}, +}; +static state states_59[7] = { + {3, arcs_59_0}, {2, arcs_59_1}, - {2, arcs_59_2}, + {1, arcs_59_2}, + {1, arcs_59_3}, + {1, arcs_59_4}, + {1, arcs_59_5}, + {1, arcs_59_6}, }; static arc arcs_60_0[1] = { - {26, 1}, + {150, 1}, }; static arc arcs_60_1[2] = { {27, 2}, {0, 1}, }; static arc arcs_60_2[2] = { - {26, 1}, + {150, 1}, {0, 2}, }; static state states_60[3] = { @@ -1325,298 +1284,381 @@ static state states_60[3] = { {2, arcs_60_1}, {2, arcs_60_2}, }; -static arc arcs_61_0[1] = { - {26, 1}, +static arc arcs_61_0[3] = { + {78, 1}, + {26, 2}, + {21, 3}, }; -static arc arcs_61_1[2] = { +static arc arcs_61_1[1] = { + {78, 4}, +}; +static arc arcs_61_2[2] = { + {21, 3}, + {0, 2}, +}; +static arc arcs_61_3[3] = { + {26, 5}, + {151, 6}, + {0, 3}, +}; +static arc arcs_61_4[1] = { + {78, 6}, +}; +static arc arcs_61_5[2] = { + {151, 6}, + {0, 5}, +}; +static arc arcs_61_6[1] = { + {0, 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_62_0[1] = { + {21, 1}, +}; +static arc arcs_62_1[2] = { + {26, 2}, + {0, 1}, +}; +static arc arcs_62_2[1] = { + {0, 2}, +}; +static state states_62[3] = { + {1, arcs_62_0}, + {2, arcs_62_1}, + {1, arcs_62_2}, +}; +static arc arcs_63_0[1] = { + {81, 1}, +}; +static arc arcs_63_1[2] = { {27, 2}, {0, 1}, }; -static arc arcs_61_2[1] = { - {26, 3}, -}; -static arc arcs_61_3[2] = { - {27, 4}, - {0, 3}, -}; -static arc arcs_61_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 arc arcs_62_0[1] = { - {26, 1}, -}; -static arc arcs_62_1[1] = { - {21, 2}, -}; -static arc arcs_62_2[1] = { - {26, 3}, -}; -static arc arcs_62_3[2] = { - {27, 4}, - {0, 3}, -}; -static arc arcs_62_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 arc arcs_63_0[1] = { - {149, 1}, -}; -static arc arcs_63_1[1] = { - {19, 2}, -}; static arc arcs_63_2[2] = { - {13, 3}, - {21, 4}, + {81, 1}, + {0, 2}, }; -static arc arcs_63_3[1] = { - {9, 5}, -}; -static arc arcs_63_4[1] = { - {22, 6}, -}; -static arc arcs_63_5[1] = { - {15, 7}, -}; -static arc arcs_63_6[1] = { - {0, 6}, -}; -static arc arcs_63_7[1] = { - {21, 4}, -}; -static state states_63[8] = { +static state states_63[3] = { {1, arcs_63_0}, - {1, arcs_63_1}, + {2, 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 arc arcs_64_0[3] = { - {150, 1}, - {28, 2}, - {29, 3}, +static arc arcs_64_0[1] = { + {26, 1}, }; static arc arcs_64_1[2] = { - {27, 4}, + {27, 2}, {0, 1}, }; -static arc arcs_64_2[1] = { - {26, 5}, +static arc arcs_64_2[2] = { + {26, 1}, + {0, 2}, }; -static arc arcs_64_3[1] = { - {26, 6}, -}; -static arc arcs_64_4[4] = { - {150, 1}, - {28, 2}, - {29, 3}, - {0, 4}, -}; -static arc arcs_64_5[2] = { - {27, 7}, - {0, 5}, -}; -static arc arcs_64_6[1] = { - {0, 6}, -}; -static arc arcs_64_7[1] = { - {29, 3}, -}; -static state states_64[8] = { - {3, arcs_64_0}, +static state states_64[3] = { + {1, 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}, + {2, arcs_64_2}, }; static arc arcs_65_0[1] = { {26, 1}, }; -static arc arcs_65_1[3] = { - {25, 2}, - {143, 3}, +static arc arcs_65_1[2] = { + {27, 2}, {0, 1}, }; static arc arcs_65_2[1] = { - {26, 4}, + {26, 3}, }; -static arc arcs_65_3[1] = { +static arc arcs_65_3[2] = { + {27, 4}, {0, 3}, }; static arc arcs_65_4[2] = { - {143, 3}, + {26, 3}, {0, 4}, }; static state states_65[5] = { {1, arcs_65_0}, - {3, arcs_65_1}, + {2, arcs_65_1}, {1, arcs_65_2}, - {1, arcs_65_3}, + {2, arcs_65_3}, {2, arcs_65_4}, }; -static arc arcs_66_0[2] = { - {142, 1}, - {152, 1}, -}; -static arc arcs_66_1[1] = { - {0, 1}, -}; -static state states_66[2] = { - {2, arcs_66_0}, - {1, arcs_66_1}, -}; -static arc arcs_67_0[1] = { - {89, 1}, -}; -static arc arcs_67_1[1] = { - {58, 2}, -}; -static arc arcs_67_2[1] = { - {78, 3}, -}; -static arc arcs_67_3[1] = { - {148, 4}, -}; -static arc arcs_67_4[2] = { - {151, 5}, - {0, 4}, -}; -static arc arcs_67_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 arc arcs_68_0[1] = { - {85, 1}, -}; -static arc arcs_68_1[1] = { - {26, 2}, -}; -static arc arcs_68_2[2] = { - {151, 3}, - {0, 2}, -}; -static arc arcs_68_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 arc arcs_69_0[2] = { - {143, 1}, - {154, 1}, -}; -static arc arcs_69_1[1] = { - {0, 1}, -}; -static state states_69[2] = { - {2, arcs_69_0}, - {1, arcs_69_1}, -}; -static arc arcs_70_0[1] = { - {89, 1}, -}; -static arc arcs_70_1[1] = { - {58, 2}, -}; -static arc arcs_70_2[1] = { - {78, 3}, -}; -static arc arcs_70_3[1] = { - {26, 4}, -}; -static arc arcs_70_4[2] = { - {153, 5}, - {0, 4}, -}; -static arc arcs_70_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 arc arcs_71_0[1] = { - {85, 1}, -}; -static arc arcs_71_1[1] = { - {26, 2}, -}; -static arc arcs_71_2[2] = { - {153, 3}, - {0, 2}, -}; -static arc arcs_71_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 arc arcs_72_0[1] = { +static arc arcs_66_0[1] = { {26, 1}, }; -static arc arcs_72_1[2] = { - {27, 0}, +static arc arcs_66_1[1] = { + {21, 2}, +}; +static arc arcs_66_2[1] = { + {26, 3}, +}; +static arc arcs_66_3[2] = { + {27, 4}, + {0, 3}, +}; +static arc arcs_66_4[2] = { + {26, 1}, + {0, 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_67_0[1] = { + {153, 1}, +}; +static arc arcs_67_1[1] = { + {19, 2}, +}; +static arc arcs_67_2[2] = { + {13, 3}, + {21, 4}, +}; +static arc arcs_67_3[1] = { + {9, 5}, +}; +static arc arcs_67_4[1] = { + {22, 6}, +}; +static arc arcs_67_5[1] = { + {15, 7}, +}; +static arc arcs_67_6[1] = { + {0, 6}, +}; +static arc arcs_67_7[1] = { + {21, 4}, +}; +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_68_0[3] = { + {154, 1}, + {28, 2}, + {29, 3}, +}; +static arc arcs_68_1[2] = { + {27, 4}, {0, 1}, }; -static state states_72[2] = { - {1, arcs_72_0}, - {2, arcs_72_1}, +static arc arcs_68_2[1] = { + {26, 5}, }; -static arc arcs_73_0[1] = { - {19, 1}, +static arc arcs_68_3[1] = { + {26, 6}, +}; +static arc arcs_68_4[4] = { + {154, 1}, + {28, 2}, + {29, 3}, + {0, 4}, +}; +static arc arcs_68_5[2] = { + {27, 7}, + {0, 5}, +}; +static arc arcs_68_6[1] = { + {0, 6}, +}; +static arc arcs_68_7[1] = { + {29, 3}, +}; +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_69_0[1] = { + {26, 1}, +}; +static arc arcs_69_1[3] = { + {25, 2}, + {147, 3}, + {0, 1}, +}; +static arc arcs_69_2[1] = { + {26, 4}, +}; +static arc arcs_69_3[1] = { + {0, 3}, +}; +static arc arcs_69_4[2] = { + {147, 3}, + {0, 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_70_0[2] = { + {146, 1}, + {156, 1}, +}; +static arc arcs_70_1[1] = { + {0, 1}, +}; +static state states_70[2] = { + {2, arcs_70_0}, + {1, arcs_70_1}, +}; +static arc arcs_71_0[1] = { + {93, 1}, +}; +static arc arcs_71_1[1] = { + {58, 2}, +}; +static arc arcs_71_2[1] = { + {82, 3}, +}; +static arc arcs_71_3[1] = { + {152, 4}, +}; +static arc arcs_71_4[2] = { + {155, 5}, + {0, 4}, +}; +static arc arcs_71_5[1] = { + {0, 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_72_0[1] = { + {89, 1}, +}; +static arc arcs_72_1[1] = { + {26, 2}, +}; +static arc arcs_72_2[2] = { + {155, 3}, + {0, 2}, +}; +static arc arcs_72_3[1] = { + {0, 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_73_0[2] = { + {147, 1}, + {158, 1}, }; static arc arcs_73_1[1] = { {0, 1}, }; static state states_73[2] = { - {1, arcs_73_0}, + {2, arcs_73_0}, {1, arcs_73_1}, }; -static dfa dfas[74] = { +static arc arcs_74_0[1] = { + {93, 1}, +}; +static arc arcs_74_1[1] = { + {58, 2}, +}; +static arc arcs_74_2[1] = { + {82, 3}, +}; +static arc arcs_74_3[1] = { + {26, 4}, +}; +static arc arcs_74_4[2] = { + {157, 5}, + {0, 4}, +}; +static arc arcs_74_5[1] = { + {0, 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_75_0[1] = { + {89, 1}, +}; +static arc arcs_75_1[1] = { + {26, 2}, +}; +static arc arcs_75_2[2] = { + {157, 3}, + {0, 2}, +}; +static arc arcs_75_3[1] = { + {0, 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_76_0[1] = { + {26, 1}, +}; +static arc arcs_76_1[2] = { + {27, 0}, + {0, 1}, +}; +static state states_76[2] = { + {1, arcs_76_0}, + {2, arcs_76_1}, +}; +static arc arcs_77_0[1] = { + {19, 1}, +}; +static arc arcs_77_1[1] = { + {0, 1}, +}; +static state states_77[2] = { + {1, arcs_77_0}, + {1, arcs_77_1}, +}; +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"}, - {282, "dotted_as_name", 0, 4, states_26, + {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"}, - {283, "dotted_name", 0, 2, states_27, + {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"}, - {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, + {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"}, + {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"}, + {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"}, - {282, 0}, - {1, "from"}, {281, 0}, + {282, 0}, + {1, "import"}, + {286, 0}, + {1, "from"}, + {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}, - {18, 0}, - {301, 0}, - {33, 0}, - {302, 0}, - {19, 0}, - {303, 0}, - {34, 0}, {304, 0}, + {18, 0}, + {305, 0}, + {33, 0}, + {306, 0}, + {19, 0}, + {307, 0}, + {34, 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}, - {1, "lambda"}, - {312, 0}, - {313, 0}, - {314, 0}, - {317, 0}, - {1, "class"}, - {321, 0}, - {322, 0}, - {324, 0}, - {325, 0}, {327, 0}, + {330, 0}, + {1, "lambda"}, + {316, 0}, + {317, 0}, + {318, 0}, + {321, 0}, + {1, "class"}, + {325, 0}, + {326, 0}, + {328, 0}, {329, 0}, + {331, 0}, + {333, 0}, }; grammar _PyParser_Grammar = { - 74, + 78, dfas, - {156, labels}, + {160, labels}, 256 };