Fix 'gather' rules in the python parser generator (GH-22021) · python/cpython@e55a0e9

GitHub

@@ -74,7 +74,7 @@ def test_typed_rules(self) -> None:

7474"Rule('term', 'int', Rhs([Alt([NamedItem(None, NameLeaf('NUMBER'))])]))"

7575 )

767677-deftest_repeat_with_separator_rules(self) ->None:

77+deftest_gather(self) ->None:

7878grammar="""

7979 start: ','.thing+ NEWLINE

8080 thing: NUMBER

@@ -85,6 +85,20 @@ def test_repeat_with_separator_rules(self) -> None:

8585"Rule('start', None, Rhs([Alt([NamedItem(None, Gather(StringLeaf(\"','\"), NameLeaf('thing'"

8686 ))

8787self.assertEqual(str(rules["thing"]), "thing: NUMBER")

88+parser_class=make_parser(grammar)

89+node=parse_string("42\n", parser_class)

90+assertnode== [

91+ [[TokenInfo(NUMBER, string="42", start=(1, 0), end=(1, 2), line="42\n")]],

92+TokenInfo(NEWLINE, string="\n", start=(1, 2), end=(1, 3), line="42\n"),

93+ ]

94+node=parse_string("1, 2\n", parser_class)

95+assertnode== [

96+ [

97+ [TokenInfo(NUMBER, string="1", start=(1, 0), end=(1, 1), line="1, 2\n")],

98+ [TokenInfo(NUMBER, string="2", start=(1, 3), end=(1, 4), line="1, 2\n")],

99+ ],

100+TokenInfo(NEWLINE, string="\n", start=(1, 4), end=(1, 5), line="1, 2\n"),

101+ ]

8810289103deftest_expr_grammar(self) ->None:

90104grammar="""