更改 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/
中的一个或多个页面需要更新。