【问题标题】:What is the purpose of bitwise_or in Python PEG?Python PEG 中 bitwise_or 的目的是什么?
【发布时间】:2021-08-09 17:42:32
【问题描述】:

bitwise_or 在 PEG 语法中是什么意思?更准确地说,有很多 bitwise_or 在它甚至没有解析为 | 的上下文中。然而还是有的。 bitwise_or 在 PEG 中是否有任何其他用途,而不是作为 |在 Python 中?

从 Python PEG 中提取的示例:-

comparison[expr_ty]:
    | a=bitwise_or b=compare_op_bitwise_or_pair+ {
        _PyAST_Compare(
            a,
            CHECK(asdl_int_seq*, _PyPegen_get_cmpops(p, b)),
            CHECK(asdl_expr_seq*, _PyPegen_get_exprs(p, b)),
            EXTRA) }
    | bitwise_or

请注意此处的 bitwise_or 一词。问题在于,不是 PEG 中的竖线。

【问题讨论】:

    标签: python python-3.x python-3.9 peg python-3.10


    【解决方案1】:

    “按位或运算符”又名| 具有lowest precedence of regular binary operators。唯一具有较低优先级的二元运算符是 comparison operators, which are subject to chaining - 例如,a < b < c 大致相当于 a < b and b < c - 因此表现特殊。

    对于 PEG 解析器,优先级通常使用precedence climbing 编码。这意味着 lower 优先子句匹配自身或 next 优先子句。因此,运算符优先级“| ^ &

    bitwise_or:
        | bitwise_or '|' bitwise_xor 
        | bitwise_xor
    bitwise_xor:
        | bitwise_xor '^' bitwise_and 
        | bitwise_and
    bitwise_and:
        | bitwise_and '&' shift_expr 
        | shift_expr
    

    这使得bitwise_or 成为匹配所有二元运算符的“入口点”:它可以服从bitwise_xor,它可以服从bitwise_and,等等最高优先级运算符。值得注意的是,这意味着语法规则bitwise_or可以匹配不包含操作“按位或”的输入——例如,bitwise_or匹配a ^ b

    因此,bitwise_or 用于可能出现二元运算符的任何位置。

    【讨论】:

    • 谢谢。现在我明白了。
    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2017-05-04
    • 2011-07-26
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    相关资源
    最近更新 更多