diff --git a/tatsu/ngcodegen/python.py b/tatsu/ngcodegen/python.py index 30725801..6a83e5c5 100644 --- a/tatsu/ngcodegen/python.py +++ b/tatsu/ngcodegen/python.py @@ -243,24 +243,24 @@ def walk_PositiveClosure(self, closure: grammars.PositiveClosure): self.print(f'self._positive_closure(block{n})') def walk_Join(self, join: grammars.Join): - n = self._gen_block(join.sep, name='sep') + m = self._gen_block(join.sep, name='sep') n = self._gen_block(join.exp) - self.print(f'self._join(block{n}, sep{n})') + self.print(f'self._join(block{n}, sep{m})') def walk_PositiveJoin(self, join: grammars.PositiveJoin): - n = self._gen_block(join.sep, name='sep') + m = self._gen_block(join.sep, name='sep') n = self._gen_block(join.exp) - self.print(f'self._positive_join(block{n}, sep{n})') + self.print(f'self._positive_join(block{n}, sep{m})') def walk_LeftJoin(self, join: grammars.LeftJoin): - n = self._gen_block(join.sep, name='sep') + m = self._gen_block(join.sep, name='sep') n = self._gen_block(join.exp) - self.print(f'self._left_join(block{n}, sep{n})') + self.print(f'self._left_join(block{n}, sep{m})') def walk_RightJoin(self, join: grammars.RightJoin): - n = self._gen_block(join.sep, name='sep') + m = self._gen_block(join.sep, name='sep') n = self._gen_block(join.exp) - self.print(f'self._right_join(block{n}, sep{n})') + self.print(f'self._right_join(block{n}, sep{m})') def walk_Gather(self, gather: grammars.Gather): m = self._gen_block(gather.sep, name='sep') diff --git a/test/parser_equivalence_test.py b/test/parser_equivalence_test.py index 27ed9c4b..02b4367f 100644 --- a/test/parser_equivalence_test.py +++ b/test/parser_equivalence_test.py @@ -170,3 +170,22 @@ def test_none_whitespace(): parser = generate_and_load_parser('W', grammar) output = parser.parse(input, parseinfo=False) assert output == ('This is a', ' test') + +def test_sep_join(): + grammar = """ + @@grammar::numbers + + start + = expression $ + ; + + expression + = ~ ( "," )%{ digit }+ + ; + + digit = /\d+/ ; + """ + parser = generate_and_load_parser('W', grammar) + ast = parser.parse('1,2,3,4', nameguard=False) + +