Browse Source

Include soft keywords in keyword.py (GH-20877)

pull/20881/head
Pablo Galindo 6 years ago
committed by GitHub
parent
commit
78319e373d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 7
      Lib/keyword.py
  2. 2
      Tools/peg_generator/pegen/c_generator.py
  3. 15
      Tools/peg_generator/pegen/keywordgen.py

7
Lib/keyword.py

@ -13,7 +13,7 @@ the python source tree and run:
Alternatively, you can run 'make regen-keyword'.
"""
__all__ = ["iskeyword", "kwlist"]
__all__ = ["iskeyword", "issoftkeyword", "kwlist", "softkwlist"]
kwlist = [
'False',
@ -53,4 +53,9 @@ kwlist = [
'yield'
]
softkwlist = [
]
iskeyword = frozenset(kwlist).__contains__
issoftkeyword = frozenset(softkwlist).__contains__

2
Tools/peg_generator/pegen/c_generator.py

@ -105,6 +105,7 @@ class CCallMakerVisitor(GrammarVisitor):
self.non_exact_tokens = non_exact_tokens
self.cache: Dict[Any, FunctionCall] = {}
self.keyword_cache: Dict[str, int] = {}
self.soft_keywords: Set[str] = set()
def keyword_helper(self, keyword: str) -> FunctionCall:
if keyword not in self.keyword_cache:
@ -119,6 +120,7 @@ class CCallMakerVisitor(GrammarVisitor):
)
def soft_keyword_helper(self, value: str) -> FunctionCall:
self.soft_keywords.add(value.replace('"', ""))
return FunctionCall(
assigned_variable="_keyword",
function="_PyPegen_expect_soft_keyword",

15
Tools/peg_generator/pegen/keywordgen.py

@ -21,13 +21,18 @@ the python source tree and run:
Alternatively, you can run 'make regen-keyword'.
"""
__all__ = ["iskeyword", "kwlist"]
__all__ = ["iskeyword", "issoftkeyword", "kwlist", "softkwlist"]
kwlist = [
{keywords}
{keywords}
]
softkwlist = [
{soft_keywords}
]
iskeyword = frozenset(kwlist).__contains__
issoftkeyword = frozenset(softkwlist).__contains__
'''.lstrip()
EXTRA_KEYWORDS = ["async", "await"]
@ -60,9 +65,11 @@ def main():
with args.keyword_file as thefile:
all_keywords = sorted(list(gen.callmakervisitor.keyword_cache.keys()) + EXTRA_KEYWORDS)
all_soft_keywords = sorted(gen.callmakervisitor.soft_keywords)
keywords = ",\n ".join(map(repr, all_keywords))
thefile.write(TEMPLATE.format(keywords=keywords))
keywords = " " + ",\n ".join(map(repr, all_keywords))
soft_keywords = " " + ",\n ".join(map(repr, all_soft_keywords))
thefile.write(TEMPLATE.format(keywords=keywords, soft_keywords=soft_keywords))
if __name__ == "__main__":

Loading…
Cancel
Save