python / python-docs-zh-cn

zh_CN translation of the Python documentation
https://docs.python.org/zh-cn/
431 stars 74 forks source link

3.11文档 标准库ast模块两处翻译错误 #292

Closed wanglc02 closed 1 year ago

wanglc02 commented 1 year ago

1.

中文链接 英文链接

中文第二段:抽象语法定义的每个左侧符号(比方说, ast.stmt 或者 ast.expr)定义了一个类。另外,在抽象语法定义的右侧,对每一个构造器也定义了一个类;这些类继承自树左侧的类。比如,ast.BinOp 继承自 ast.expr。对于多分支产生式(也就是"和规则"),树 右侧 的类是抽象的;只有特定构造器结点的实例能被构造。

按照实际情况及英文原文,右侧 应为 左侧

另,第一段没有被翻译。我将第一段和第二段完整翻译如下,可供采纳:

这是所有 AST 节点类的基类。实际上,这些节点类来源于 Parser/Python.asdl 文件,文件内容被完整展示如上(抽象文法)。它们在 C 语言模块 _ast 中定义,并在这个 ast 模块中被“再导出”给用户。

抽象文法中的每个等号左边的符号(比方说, ast.stmt 或者 ast.expr)定义了一个类。另外,在等号右边,对每一个构造器也定义了一个类;这些类继承自等号左边的类。比如,ast.BinOp 继承自 ast.expr。对于多分支产生式(也就是含有“ | ”的产生式),左边的类是抽象的;只有具体构造器类的实例能够被 compile() 构造。

2.

中文链接 英文链接

ast.expr 和 ast.stmt 子类的实例有 linenocol_offsetend_linenoend_lineno 属性。

最后的end_lineno应为end_col_offset,且相应的超链接也应该指向end_col_offset而不是end_lineno

建议修改为:

ast.expr 和 ast.stmt 的子类的实例的属性包括 lineno、col_offset、end_lineno 和 end_col_offset。lineno 和 end_lineno 是源代码的第一行行数和最后一行行数(从1开始, 所以第一行的行数是1),而 col_offset 和 end_col_offset 是该生成该节点第一个和最后一个 token 的 UTF-8 字节偏移量。记录 UTF-8 偏移量的原因是 parser 内部使用 UTF-8 。

注意上面的修改删去了所有的超链接,因为这些超链接都指向这一段自身,用处不大,反而可能使读者因点击链接而拖慢阅读速度。当然,保留超链接亦可。

WendaoLee commented 1 year ago

问题1与问题2的翻译错误已Fix。

因为ast这个模块我并不了解,所以没有更改或添加原本的翻译。如果您愿意,您可以到transifex上修缮相关文档。

另:Python文档用的是reStructureText,因此如果对应的标记错了,对应的超链接也会错误,这是问题2的错误根源。

wanglc02 commented 1 year ago

非常感谢您!没有想到会获得这么丰富的信息(包括指向reStructureText的超链接!),从您这里我第一次听说reStructureText,我感到非常惊喜!我愿意为python文档作出更多贡献。