gh-138970: Add general metadata system to the peg generator (#138971) · python/cpython@0ce9fb7 · GitHub
Skip to content

Commit 0ce9fb7

Browse files
authored
gh-138970: Add general metadata system to the peg generator (#138971)
1 parent b485e50 commit 0ce9fb7

5 files changed

Lines changed: 113 additions & 26 deletions

File tree

Lib/test/test_peg_generator/test_pegen.py

Lines changed: 46 additions & 0 deletions

Tools/peg_generator/pegen/c_generator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -595,7 +595,7 @@ def _set_up_rule_memoization(self, node: Rule, result_type: str) -> None:
595595
self.print(f"{node.name}_raw(Parser *p)")
596596

597597
def _should_memoize(self, node: Rule) -> bool:
598-
return node.memo and not node.left_recursive
598+
return "memo" in node.flags and not node.left_recursive
599599

600600
def _handle_default_rule_body(self, node: Rule, rhs: Rhs, result_type: str) -> None:
601601
memoize = self._should_memoize(node)

Tools/peg_generator/pegen/grammar.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,11 @@ def __iter__(self) -> Iterator[Rule]:
5858

5959

6060
class Rule:
61-
def __init__(self, name: str, type: str | None, rhs: Rhs, memo: object | None = None):
61+
def __init__(self, name: str, type: str | None, rhs: Rhs, flags: frozenset[str] | None = None):
6262
self.name = name
6363
self.type = type
6464
self.rhs = rhs
65-
self.memo = bool(memo)
65+
self.flags = flags or frozenset()
6666
self.left_recursive = False
6767
self.leader = False
6868

@@ -135,7 +135,6 @@ def __repr__(self) -> str:
135135
class Rhs:
136136
def __init__(self, alts: list[Alt]):
137137
self.alts = alts
138-
self.memo: tuple[str | None, str] | None = None
139138

140139
def __str__(self) -> str:
141140
return " | ".join(str(alt) for alt in self.alts)
@@ -263,7 +262,6 @@ class Repeat:
263262

264263
def __init__(self, node: Plain):
265264
self.node = node
266-
self.memo: tuple[str | None, str] | None = None
267265

268266
def __iter__(self) -> Iterator[Plain]:
269267
yield self.node

Tools/peg_generator/pegen/grammar_parser.py

Lines changed: 54 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Tools/peg_generator/pegen/metagrammar.gram

Lines changed: 10 additions & 8 deletions

0 commit comments

Comments
 (0)