summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Galindo Salgado <Pablogsal@gmail.com>2024-12-15 23:17:01 (GMT)
committerGitHub <noreply@github.com>2024-12-15 23:17:01 (GMT)
commit47c5a0f307cff3ed477528536e8de095c0752efa (patch)
tree3dcf9219dbbfef2aee35611269c1e982c5135786
parentb74c8f58e875d909ce6b5b9dbcddd6d8331d2081 (diff)
downloadcpython-47c5a0f307cff3ed477528536e8de095c0752efa.zip
cpython-47c5a0f307cff3ed477528536e8de095c0752efa.tar.gz
cpython-47c5a0f307cff3ed477528536e8de095c0752efa.tar.bz2
gh-125588: Allow to regenerate the parser with Python < 3.12 (#127969)
Signed-off-by: Pablo Galindo <pablogsal@gmail.com>
-rw-r--r--Tools/peg_generator/pegen/parser.py6
-rw-r--r--Tools/peg_generator/pegen/parser_generator.py6
2 files changed, 9 insertions, 3 deletions
diff --git a/Tools/peg_generator/pegen/parser.py b/Tools/peg_generator/pegen/parser.py
index 692eb9e..a987d30 100644
--- a/Tools/peg_generator/pegen/parser.py
+++ b/Tools/peg_generator/pegen/parser.py
@@ -207,7 +207,7 @@ class Parser:
@memoize
def fstring_start(self) -> Optional[tokenize.TokenInfo]:
- FSTRING_START = getattr(token, "FSTRING_START")
+ FSTRING_START = getattr(token, "FSTRING_START", None)
if not FSTRING_START:
return None
tok = self._tokenizer.peek()
@@ -217,7 +217,7 @@ class Parser:
@memoize
def fstring_middle(self) -> Optional[tokenize.TokenInfo]:
- FSTRING_MIDDLE = getattr(token, "FSTRING_MIDDLE")
+ FSTRING_MIDDLE = getattr(token, "FSTRING_MIDDLE", None)
if not FSTRING_MIDDLE:
return None
tok = self._tokenizer.peek()
@@ -227,7 +227,7 @@ class Parser:
@memoize
def fstring_end(self) -> Optional[tokenize.TokenInfo]:
- FSTRING_END = getattr(token, "FSTRING_END")
+ FSTRING_END = getattr(token, "FSTRING_END", None)
if not FSTRING_END:
return None
tok = self._tokenizer.peek()
diff --git a/Tools/peg_generator/pegen/parser_generator.py b/Tools/peg_generator/pegen/parser_generator.py
index b42b12c..6ce0649 100644
--- a/Tools/peg_generator/pegen/parser_generator.py
+++ b/Tools/peg_generator/pegen/parser_generator.py
@@ -1,3 +1,4 @@
+import sys
import ast
import contextlib
import re
@@ -75,6 +76,11 @@ class RuleCheckingVisitor(GrammarVisitor):
def __init__(self, rules: Dict[str, Rule], tokens: Set[str]):
self.rules = rules
self.tokens = tokens
+ # If python < 3.12 add the virtual fstring tokens
+ if sys.version_info < (3, 12):
+ self.tokens.add("FSTRING_START")
+ self.tokens.add("FSTRING_END")
+ self.tokens.add("FSTRING_MIDDLE")
def visit_NameLeaf(self, node: NameLeaf) -> None:
if node.value not in self.rules and node.value not in self.tokens: