gpt4 book ai didi

Python语法: Could colons be optional when at end of line?

转载 作者:太空宇宙 更新时间:2023-11-03 19:47:21 24 4
gpt4 key购买 nike

我想了解是否可以更改 Python 的语法,使复合语句的冒号在行尾时可选(除了空格和注释之外)。例如:

if so()
print("yes")
else
print("no")

此更改会破坏现有的 Python 代码吗?会不会有歧义的结构?解析器在诊断某种错误方面会变得非常糟糕吗?会不会还有一个我现在想不到的问题?

当然,我知道冒号使代码更易于阅读的论点。我认为这是有争议的,但我绝对不想在这里讨论意见。我的问题是关于可能的技术问题。

根据syntax of compound statements in the documentation suite 之前总是有一个 ":",其中 suite 定义为

suite ::=  stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT

if语句为例

if_stmt ::=  "if" expression ":" suite
("elif" expression ":" suite)*
["else" ":" suite]

显然,语法可以这样修改:

suite ::=  ":" stmt_list NEWLINE | [":"] NEWLINE INDENT statement+ DEDENT

if_stmt ::= "if" expression suite
("elif" expression suite)*
["else" suite]

Grammar file of the CPython source code (也可用 here )事情有点不同,并且可选的 type comment 有点复杂。在某些结构中的冒号之后,但总而言之,在我看来,应该可以像上面那样修改语法。

会有哪些技术障碍?

<小时/>

更新:以下可能是更多 LL(1) -套件的友好语法:

suite ::=  colon_suite | indented_suite
colon_suite ::= ":" (stmt_list NEWLINE | indented_suite)
indented_suite ::= NEWLINE INDENT statement+ DEDENT

最佳答案

抛开前瞻技术细节不谈,语法肯定不会变得含糊不清:您所做的就是在任何行的末尾(任何注释之前)插入一个 : ,这样做可以避免语法错误(所以不在 lambda 之后,其中一个是必要的但还不够)。特别是,除了反斜杠或内部括号字符之外,任何套件介绍都不能扩展到多行(不能写 forin exceptas,例如在不同的逻辑行上)。

唯一明显的受损诊断候选者是与三元条件或生成器表达式混淆,但由于 if/for 之前的表达式,这种情况非常弱(以及后者的括号)。可能根本不存在技术障碍。

关于Python语法: Could colons be optional when at end of line?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60044102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com