Skip to content

Commit b01fd53

Browse files
authored
Extract visitors from the grammar nodes and call makers in the peg generator (pythonGH-28172)
Simplify the peg generator logic by extracting as much visitors as possible to disentangle the flow and separate concerns.
1 parent 2826426 commit b01fd53

File tree

13 files changed

+419
-415
lines changed

13 files changed

+419
-415
lines changed

Lib/test/test_peg_generator/test_pegen.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from pegen.grammar import GrammarVisitor, GrammarError, Grammar
1616
from pegen.grammar_visualizer import ASTGrammarPrinter
1717
from pegen.parser import Parser
18+
from pegen.parser_generator import compute_nullables, compute_left_recursives
1819
from pegen.python_generator import PythonParserGenerator
1920

2021

@@ -502,23 +503,22 @@ def test_nullable(self) -> None:
502503
sign: ['-' | '+']
503504
"""
504505
grammar: Grammar = parse_string(grammar_source, GrammarParser)
505-
out = io.StringIO()
506-
genr = PythonParserGenerator(grammar, out)
507506
rules = grammar.rules
508-
self.assertFalse(rules["start"].nullable) # Not None!
509-
self.assertTrue(rules["sign"].nullable)
507+
nullables = compute_nullables(rules)
508+
self.assertNotIn(rules["start"], nullables) # Not None!
509+
self.assertIn(rules["sign"], nullables)
510510

511511
def test_advanced_left_recursive(self) -> None:
512512
grammar_source = """
513513
start: NUMBER | sign start
514514
sign: ['-']
515515
"""
516516
grammar: Grammar = parse_string(grammar_source, GrammarParser)
517-
out = io.StringIO()
518-
genr = PythonParserGenerator(grammar, out)
519517
rules = grammar.rules
520-
self.assertFalse(rules["start"].nullable) # Not None!
521-
self.assertTrue(rules["sign"].nullable)
518+
nullables = compute_nullables(rules)
519+
compute_left_recursives(rules)
520+
self.assertNotIn(rules["start"], nullables) # Not None!
521+
self.assertIn(rules["sign"], nullables)
522522
self.assertTrue(rules["start"].left_recursive)
523523
self.assertFalse(rules["sign"].left_recursive)
524524

0 commit comments

Comments
 (0)