python语法中的`~`代表什么意思?

7
我正在查看Python语法规范,并发现以下语句:
for_stmt:
    | 'for' star_targets 'in' ~ star_expressions ':' [TYPE_COMMENT] block [else_block]
在这个语法规则中,~是什么意思?文档中已经记录了其他符号(如&!|),但没有记录~

表示法是EBNFPEG的混合体。特别地,&后面跟着一个符号、标记或括号组,表示肯定先行条件(即必须匹配但不消耗),而!表示否定先行条件(即必须不匹配)。我们使用|分隔符来表示PEG的“有序选择”(在传统的PEG语法中写成/)。

.


@buran 这是关于EBNF/PEG的问题,而不是Python语法。 - theberzi
@theberzi,我的错 - buran
1个回答

9
在语法表达式中,~ 的文档记录在 PEP 617 中:

~

即便解析失败,也要选择当前的备选项。

规则名称: '(' ~ 一些规则 ')' | 一些备选项

在这个例子中,如果解析出左括号,则不会考虑其他备选项,即使无法解析一些规则或')'。

~ 基本上表示一旦到达它,您将被锁定到特定规则中,如果解析失败,则无法移动到下一个规则。 PEP 617 还提到,| 一些备选项 可以写在下一行。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接