|
15 | 15 | from pegen.grammar import GrammarVisitor, GrammarError, Grammar |
16 | 16 | from pegen.grammar_visualizer import ASTGrammarPrinter |
17 | 17 | from pegen.parser import Parser |
| 18 | + from pegen.parser_generator import compute_nullables, compute_left_recursives |
18 | 19 | from pegen.python_generator import PythonParserGenerator |
19 | 20 |
|
20 | 21 |
|
@@ -502,23 +503,22 @@ def test_nullable(self) -> None: |
502 | 503 | sign: ['-' | '+'] |
503 | 504 | """ |
504 | 505 | grammar: Grammar = parse_string(grammar_source, GrammarParser) |
505 | | - out = io.StringIO() |
506 | | - genr = PythonParserGenerator(grammar, out) |
507 | 506 | 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) |
510 | 510 |
|
511 | 511 | def test_advanced_left_recursive(self) -> None: |
512 | 512 | grammar_source = """ |
513 | 513 | start: NUMBER | sign start |
514 | 514 | sign: ['-'] |
515 | 515 | """ |
516 | 516 | grammar: Grammar = parse_string(grammar_source, GrammarParser) |
517 | | - out = io.StringIO() |
518 | | - genr = PythonParserGenerator(grammar, out) |
519 | 517 | 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) |
522 | 522 | self.assertTrue(rules["start"].left_recursive) |
523 | 523 | self.assertFalse(rules["sign"].left_recursive) |
524 | 524 |
|
|
0 commit comments