更改 CPython 的语法¶
摘要¶
更改 Python 的语法不仅仅是编辑 Grammar/python.gram。以下是一份清单。
注意
这些说明适用于 Python 3.9 及更高版本。较早版本使用不同的解析器技术。您可能不应该尝试更改较早 Python 版本的语法,但如果您真的想这样做,请使用 GitHub 在 devguide 中找到此文件的较早版本。
有关如何使用新解析器的更多信息,请查看有关如何使用 CPython 的解析器的部分。
清单¶
注意:有时事情会莫名其妙地不起作用。在放弃之前,请尝试make clean。
Grammar/python.gram:语法,带有构建 AST 节点的动作。更改后,运行make regen-pegen(或在 Windows 上运行build.bat --regen),以重新生成Parser/parser.c。(这会运行 Python 的解析器生成器,Tools/peg_generator)。Grammar/Tokens是添加新令牌类型的地方。更改后,运行make regen-token以重新生成Include/internal/pycore_token.h、Parser/token.c、Lib/token.py和Doc/library/token-list.inc。如果您同时更改了python.gram和Tokens,请先运行make regen-token,然后再运行make regen-pegen。在 Windows 上,build.bat --regen会同时重新生成这两个文件。Parser/Python.asdl可能需要更改以匹配语法。然后运行make regen-ast以重新生成Include/internal/pycore_ast.h和Python/Python-ast.c。Parser/lexer/包含标记化代码。例如,您可以在此处添加一种新的注释或字符串文字类型。Python/ast.c需要更改以验证与语法更改相关的 AST 对象。Python/ast_unparse.c需要更改以取消解析与语法更改相关的 AST(“取消解析”用于根据PEP 563将注释转换为字符串)。编译器设计有自己的页面。
Lib/ast.py文件中的_Unparser可能需要更改以适应 AST 节点的任何修改。Doc/library/ast.rst可能需要更新以反映 AST 节点的更改。将您新语法的部分用法添加到
test_grammar.py。某些更改可能需要调整库模块
pyclbr。Lib/tokenize.py需要更改以匹配标记器的更改。必须编写文档!具体来说,
Doc/reference/中的一个或多个页面需要更新。