PEP 306 – 如何修改 Python 语法
- 作者:
- Michael Hudson <mwh at python.net>, Jack Diederich <jackdied at gmail.com>, Alyssa Coghlan <ncoghlan at gmail.com>, Benjamin Peterson <benjamin at python.org>
- 状态:
- 已撤回
- 类型:
- 信息性
- 创建:
- 2003年1月29日
- 更新历史:
- 2003年1月30日
注意
此 PEP 已移至 Python 开发指南 [1]。
摘要
修改 Python 语法不仅仅是编辑 Grammar/Grammar
和 Python/compile.c
。本 PEP 的目标是列出也必须修复的位置的清单。
它可能是不完整的。如果您发现有遗漏,请随时添加 - 您不会冒犯作者的所有权意识。否则,提交错误或补丁并将其分配给 mwh。
本 PEP 不打算成为 Python 语法黑客的说明手册,原因如下。
基本原理
人们一直都在犯同样的错误;在有人注意到 [2] 添加地板除运算符 (//
) 破坏了 parser
模块之前,花费了超过一年多的时间。
清单
Grammar/Grammar
:好的,您可能已经想到了这一点 :)Parser/Python.asdl
可能需要更改以匹配Grammar
。运行make
以重新生成Include/Python-ast.h
和Python/Python-ast.c
。Python/ast.c
将需要更改以创建与Grammar
更改相关的 AST 对象。Lib/compiler/ast.py
将需要对纯 Python AST 对象进行匹配更改。Parser/pgen
需要重新运行以重新生成Include/graminit.h
和Python/graminit.c
。(make 应该为您处理此问题。)Python/symbtable.c
:这处理在编译过程之前立即发生的符号收集过程。Python/compile.c
:您需要创建或修改compiler_*
函数以生成您的产生的操作码。- 您可能需要重新生成
Lib/symbol.py
和/或Lib/token.py
和/或Lib/keyword.py
。 parser
模块。将一些新的语法添加到test_parser
中,在Modules/parsermodule.c
上进行测试,直到它通过。- 在
test_grammar.py
中添加一些新语法的用法。 compiler
包。一个很好的测试是使用compiler
包编译标准库和测试套件,然后检查它是否运行。请注意,这只需要在 Python 2.x 中完成。- 如果您已经修改了 Python 的令牌结构,那么
Lib/tokenizer.py
库模块将需要更改。 - 某些更改可能需要调整库模块
pyclbr
。 - 必须编写文档!
- 在所有内容都签入后,您可能会看到对
Python/Python-ast.c
的新更改。这是因为此(生成的)文件包含从中生成源代码的 SVN 版本。无法避免这种情况;您只需单独提交此文件即可。
参考文献
版权
本文档已置于公有领域。
来源: https://github.com/python/peps/blob/main/peps/pep-0306.rst
上次修改: 2023年10月11日 12:05:51 GMT