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 旨在成为一个必须修复的地点清单。
这可能是不完整的。如果您发现遗漏,请自行添加 – 您不会冒犯作者的所有权感。否则,请提交一个 bug 或补丁,并分配给 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