]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Disambiguate the grammar for backtick.
authorGuido van Rossum <guido@python.org>
Fri, 24 May 2002 15:47:06 +0000 (15:47 +0000)
committerGuido van Rossum <guido@python.org>
Fri, 24 May 2002 15:47:06 +0000 (15:47 +0000)
The old syntax suggested that a trailing comma was OK inside backticks,
but in fact (due to ideosyncrasies of pgen) it was not.  Fix the grammar
to avoid the ambiguity.  Fred: you may want to update the refman.

Grammar/Grammar
Include/graminit.h
Modules/parsermodule.c
Python/compile.c
Python/graminit.c

index 27cf1cbbb8a002f32cff20711e5087d9b13b5ea5..3f2b4ef1c60ed70dc5960a16df107ef74cb11323 100644 (file)
@@ -80,7 +80,7 @@ arith_expr: term (('+'|'-') term)*
 term: factor (('*'|'/'|'%'|'//') factor)*
 factor: ('+'|'-'|'~') factor | power
 power: atom trailer* ['**' factor]
-atom: '(' [testlist] ')' | '[' [listmaker] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING+
+atom: '(' [testlist] ')' | '[' [listmaker] ']' | '{' [dictmaker] '}' | '`' testlist1 '`' | NAME | NUMBER | STRING+
 listmaker: test ( list_for | (',' test)* [','] )
 lambdef: 'lambda' [varargslist] ':' test
 trailer: '(' [arglist] ')' | '[' subscriptlist ']' | '.' NAME
@@ -100,3 +100,5 @@ argument: [test '='] test   # Really [keyword '='] test
 list_iter: list_for | list_if
 list_for: 'for' exprlist 'in' testlist_safe [list_iter]
 list_if: 'if' test [list_iter]
+
+testlist1: test (',' test)*
index e3afb939556c8473e9c9abe7d878e9ad4abd4c01..50abda0d3000a81bf781a1f40f1b5ade769e34b5 100644 (file)
@@ -64,3 +64,4 @@
 #define list_iter 319
 #define list_for 320
 #define list_if 321
+#define testlist1 322
index ca0531d6b0f6b53eddc69f12817b47811d706b31..24dec1f208170d2289fd8563bdec58dd09d8f748 100644 (file)
@@ -844,6 +844,7 @@ VALIDATER(subscriptlist);       VALIDATER(sliceop);
 VALIDATER(exprlist);            VALIDATER(dictmaker);
 VALIDATER(arglist);             VALIDATER(argument);
 VALIDATER(listmaker);           VALIDATER(yield_stmt);
+VALIDATER(testlist1);
 
 #undef VALIDATER
 
@@ -1056,6 +1057,14 @@ validate_testlist(node *tree)
 }
 
 
+static int
+validate_testlist1(node *tree)
+{
+    return (validate_repeating_list(tree, testlist1,
+                                    validate_test, "testlist1"));
+}
+
+
 static int
 validate_testlist_safe(node *tree)
 {
@@ -2185,7 +2194,7 @@ validate_atom(node *tree)
             break;
           case BACKQUOTE:
             res = ((nch == 3)
-                   && validate_testlist(CHILD(tree, 1))
+                   && validate_testlist1(CHILD(tree, 1))
                    && validate_ntype(CHILD(tree, 2), BACKQUOTE));
             break;
           case NAME:
@@ -2671,6 +2680,9 @@ validate_node(node *tree)
           case testlist:
             res = validate_testlist(tree);
             break;
+          case testlist1:
+            res = validate_testlist1(tree);
+            break;
           case test:
             res = validate_test(tree);
             break;
index 03f8e3cd516e3b211f1eccb86a950bf56c49d608..d41867f7cf8f63720652db1184bbee754ed57e04 100644 (file)
@@ -2474,6 +2474,7 @@ com_assign(struct compiling *c, node *n, int assigning, node *augn)
                
                case exprlist:
                case testlist:
+               case testlist1:
                        if (NCH(n) > 1) {
                                if (assigning > OP_APPLY) {
                                        com_error(c, PyExc_SyntaxError,
@@ -2955,6 +2956,7 @@ is_constant_false(struct compiling *c, node *n)
 
        case expr_stmt:
        case testlist:
+       case testlist1:
        case test:
        case and_test:
        case not_test:
@@ -3356,6 +3358,7 @@ get_rawdocstring(node *n)
 
        case expr_stmt:
        case testlist:
+       case testlist1:
        case test:
        case and_test:
        case not_test:
@@ -3704,6 +3707,7 @@ com_node(struct compiling *c, node *n)
        /* Expression nodes */
        
        case testlist:
+       case testlist1:
        case testlist_safe:
                com_list(c, n, 0);
                break;
@@ -5447,6 +5451,7 @@ symtable_assign(struct symtable *st, node *n, int def_flag)
                return;
        case exprlist:
        case testlist:
+       case testlist1:
                if (NCH(n) == 1) {
                        n = CHILD(n, 0);
                        goto loop;
index b14fdf95059ba1b789cb6ddb28d4f06c5a6369c8..ef7d4677b5f370290b33a76a3250438d565d9d83 100644 (file)
@@ -1020,8 +1020,8 @@ static arc arcs_49_0[7] = {
        {130, 3},
        {133, 4},
        {12, 5},
-       {134, 5},
-       {135, 6},
+       {135, 5},
+       {136, 6},
 };
 static arc arcs_49_1[2] = {
        {9, 7},
@@ -1036,13 +1036,13 @@ static arc arcs_49_3[2] = {
        {132, 5},
 };
 static arc arcs_49_4[1] = {
-       {9, 10},
+       {134, 10},
 };
 static arc arcs_49_5[1] = {
        {0, 5},
 };
 static arc arcs_49_6[2] = {
-       {135, 6},
+       {136, 6},
        {0, 6},
 };
 static arc arcs_49_7[1] = {
@@ -1074,7 +1074,7 @@ static arc arcs_50_0[1] = {
        {21, 1},
 };
 static arc arcs_50_1[3] = {
-       {136, 2},
+       {137, 2},
        {22, 3},
        {0, 1},
 };
@@ -1097,7 +1097,7 @@ static state states_50[5] = {
        {2, arcs_50_4},
 };
 static arc arcs_51_0[1] = {
-       {137, 1},
+       {138, 1},
 };
 static arc arcs_51_1[2] = {
        {17, 2},
@@ -1125,11 +1125,11 @@ static arc arcs_52_0[3] = {
        {70, 3},
 };
 static arc arcs_52_1[2] = {
-       {138, 4},
+       {139, 4},
        {18, 5},
 };
 static arc arcs_52_2[1] = {
-       {139, 6},
+       {140, 6},
 };
 static arc arcs_52_3[1] = {
        {12, 5},
@@ -1153,14 +1153,14 @@ static state states_52[7] = {
        {1, arcs_52_6},
 };
 static arc arcs_53_0[1] = {
-       {140, 1},
+       {141, 1},
 };
 static arc arcs_53_1[2] = {
        {22, 2},
        {0, 1},
 };
 static arc arcs_53_2[2] = {
-       {140, 1},
+       {141, 1},
        {0, 2},
 };
 static state states_53[3] = {
@@ -1182,14 +1182,14 @@ static arc arcs_54_2[2] = {
 };
 static arc arcs_54_3[3] = {
        {21, 5},
-       {141, 6},
+       {142, 6},
        {0, 3},
 };
 static arc arcs_54_4[1] = {
        {70, 6},
 };
 static arc arcs_54_5[2] = {
-       {141, 6},
+       {142, 6},
        {0, 5},
 };
 static arc arcs_54_6[1] = {
@@ -1301,7 +1301,7 @@ static state states_59[5] = {
        {2, arcs_59_4},
 };
 static arc arcs_60_0[1] = {
-       {143, 1},
+       {144, 1},
 };
 static arc arcs_60_1[1] = {
        {12, 2},
@@ -1336,7 +1336,7 @@ static state states_60[8] = {
        {1, arcs_60_7},
 };
 static arc arcs_61_0[3] = {
-       {144, 1},
+       {145, 1},
        {23, 2},
        {24, 3},
 };
@@ -1351,7 +1351,7 @@ static arc arcs_61_3[1] = {
        {21, 6},
 };
 static arc arcs_61_4[4] = {
-       {144, 1},
+       {145, 1},
        {23, 2},
        {24, 3},
        {0, 4},
@@ -1396,8 +1396,8 @@ static state states_62[4] = {
        {1, arcs_62_3},
 };
 static arc arcs_63_0[2] = {
-       {136, 1},
-       {146, 1},
+       {137, 1},
+       {147, 1},
 };
 static arc arcs_63_1[1] = {
        {0, 1},
@@ -1416,10 +1416,10 @@ static arc arcs_64_2[1] = {
        {74, 3},
 };
 static arc arcs_64_3[1] = {
-       {142, 4},
+       {143, 4},
 };
 static arc arcs_64_4[2] = {
-       {145, 5},
+       {146, 5},
        {0, 4},
 };
 static arc arcs_64_5[1] = {
@@ -1440,7 +1440,7 @@ static arc arcs_65_1[1] = {
        {21, 2},
 };
 static arc arcs_65_2[2] = {
-       {145, 3},
+       {146, 3},
        {0, 2},
 };
 static arc arcs_65_3[1] = {
@@ -1452,13 +1452,24 @@ static state states_65[4] = {
        {2, arcs_65_2},
        {1, arcs_65_3},
 };
-static dfa dfas[66] = {
+static arc arcs_66_0[1] = {
+       {21, 1},
+};
+static arc arcs_66_1[2] = {
+       {22, 0},
+       {0, 1},
+};
+static state states_66[2] = {
+       {1, arcs_66_0},
+       {2, arcs_66_1},
+};
+static dfa dfas[67] = {
        {256, "single_input", 0, 3, states_0,
-        "\004\030\001\000\000\000\124\360\213\011\162\000\002\000\140\210\344\202\000"},
+        "\004\030\001\000\000\000\124\360\213\011\162\000\002\000\140\210\244\005\001"},
        {257, "file_input", 0, 2, states_1,
-        "\204\030\001\000\000\000\124\360\213\011\162\000\002\000\140\210\344\202\000"},
+        "\204\030\001\000\000\000\124\360\213\011\162\000\002\000\140\210\244\005\001"},
        {258, "eval_input", 0, 3, states_2,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\344\002\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
        {259, "funcdef", 0, 6, states_3,
         "\000\010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
        {260, "parameters", 0, 4, states_4,
@@ -1470,13 +1481,13 @@ static dfa dfas[66] = {
        {263, "fplist", 0, 3, states_7,
         "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
        {264, "stmt", 0, 2, states_8,
-        "\000\030\001\000\000\000\124\360\213\011\162\000\002\000\140\210\344\202\000"},
+        "\000\030\001\000\000\000\124\360\213\011\162\000\002\000\140\210\244\005\001"},
        {265, "simple_stmt", 0, 4, states_9,
-        "\000\020\001\000\000\000\124\360\213\011\000\000\002\000\140\210\344\002\000"},
+        "\000\020\001\000\000\000\124\360\213\011\000\000\002\000\140\210\244\005\000"},
        {266, "small_stmt", 0, 2, states_10,
-        "\000\020\001\000\000\000\124\360\213\011\000\000\002\000\140\210\344\002\000"},
+        "\000\020\001\000\000\000\124\360\213\011\000\000\002\000\140\210\244\005\000"},
        {267, "expr_stmt", 0, 6, states_11,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\344\002\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
        {268, "augassign", 0, 2, states_12,
         "\000\000\000\000\300\377\003\000\000\000\000\000\000\000\000\000\000\000\000"},
        {269, "print_stmt", 0, 9, states_13,
@@ -1512,7 +1523,7 @@ static dfa dfas[66] = {
        {284, "assert_stmt", 0, 5, states_28,
         "\000\000\000\000\000\000\000\000\000\010\000\000\000\000\000\000\000\000\000"},
        {285, "compound_stmt", 0, 2, states_29,
-        "\000\010\000\000\000\000\000\000\000\000\162\000\000\000\000\000\000\200\000"},
+        "\000\010\000\000\000\000\000\000\000\000\162\000\000\000\000\000\000\000\001"},
        {286, "if_stmt", 0, 8, states_30,
         "\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
        {287, "while_stmt", 0, 8, states_31,
@@ -1524,69 +1535,71 @@ static dfa dfas[66] = {
        {290, "except_clause", 0, 5, states_34,
         "\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000"},
        {291, "suite", 0, 5, states_35,
-        "\004\020\001\000\000\000\124\360\213\011\000\000\002\000\140\210\344\002\000"},
+        "\004\020\001\000\000\000\124\360\213\011\000\000\002\000\140\210\244\005\000"},
        {292, "test", 0, 4, states_36,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\344\002\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
        {293, "and_test", 0, 2, states_37,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\001\000"},
        {294, "not_test", 0, 3, states_38,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\001\000"},
        {295, "comparison", 0, 2, states_39,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
        {296, "comp_op", 0, 4, states_40,
         "\000\000\000\000\000\000\000\000\000\004\000\000\362\017\000\000\000\000\000"},
        {297, "expr", 0, 2, states_41,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
        {298, "xor_expr", 0, 2, states_42,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
        {299, "and_expr", 0, 2, states_43,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
        {300, "shift_expr", 0, 2, states_44,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
        {301, "arith_expr", 0, 2, states_45,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
        {302, "term", 0, 2, states_46,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
        {303, "factor", 0, 3, states_47,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
        {304, "power", 0, 4, states_48,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\200\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\200\244\001\000"},
        {305, "atom", 0, 11, states_49,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\200\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\000\200\244\001\000"},
        {306, "listmaker", 0, 5, states_50,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\344\002\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
        {307, "lambdef", 0, 5, states_51,
-        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000"},
+        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000"},
        {308, "trailer", 0, 7, states_52,
         "\000\000\001\000\000\000\000\000\100\000\000\000\000\000\000\200\000\000\000"},
        {309, "subscriptlist", 0, 3, states_53,
-        "\000\120\001\000\000\000\000\000\100\000\000\000\002\000\140\210\344\002\000"},
+        "\000\120\001\000\000\000\000\000\100\000\000\000\002\000\140\210\244\005\000"},
        {310, "subscript", 0, 7, states_54,
-        "\000\120\001\000\000\000\000\000\100\000\000\000\002\000\140\210\344\002\000"},
+        "\000\120\001\000\000\000\000\000\100\000\000\000\002\000\140\210\244\005\000"},
        {311, "sliceop", 0, 3, states_55,
         "\000\100\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
        {312, "exprlist", 0, 3, states_56,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\344\000\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\000\000\140\210\244\001\000"},
        {313, "testlist", 0, 3, states_57,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\344\002\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
        {314, "testlist_safe", 0, 5, states_58,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\344\002\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
        {315, "dictmaker", 0, 5, states_59,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\344\002\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
        {316, "classdef", 0, 8, states_60,
-        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\200\000"},
+        "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001"},
        {317, "arglist", 0, 8, states_61,
-        "\000\020\201\001\000\000\000\000\000\000\000\000\002\000\140\210\344\002\000"},
+        "\000\020\201\001\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
        {318, "argument", 0, 4, states_62,
-        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\344\002\000"},
+        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
        {319, "list_iter", 0, 2, states_63,
         "\000\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\000\000\000"},
        {320, "list_for", 0, 6, states_64,
         "\000\000\000\000\000\000\000\000\000\000\040\000\000\000\000\000\000\000\000"},
        {321, "list_if", 0, 4, states_65,
         "\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000"},
+       {322, "testlist1", 0, 2, states_66,
+        "\000\020\001\000\000\000\000\000\000\000\000\000\002\000\140\210\244\005\000"},
 };
-static label labels[147] = {
+static label labels[148] = {
        {0, "EMPTY"},
        {256, 0},
        {4, 0},
@@ -1721,6 +1734,7 @@ static label labels[147] = {
        {315, 0},
        {27, 0},
        {25, 0},
+       {322, 0},
        {2, 0},
        {3, 0},
        {320, 0},
@@ -1736,8 +1750,8 @@ static label labels[147] = {
        {321, 0},
 };
 grammar _PyParser_Grammar = {
-       66,
+       67,
        dfas,
-       {147, labels},
+       {148, labels},
        256
 };