python - Python PEG 中 bitwise_or 的目的是什么?

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

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 中的竖线。

最佳答案

“按位或运算符”又名 |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用于二元运算符可能出现的任何位置。

关于python - Python PEG 中 bitwise_or 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67620891/

相关文章:

python - Python/Pandas 中的 bool 列比较

visual-studio-code - 在浏览器中从 VScode 打开 JupyterNotebook

python - 如何在 Keras 中使用 flow_from_directory 进行多类语义分割?

python - Kivy:GridLayout 总是从左到右然后向下,你能从上到下然后从左到右吗?

Django:如何将 2 天添加到用户输入的现有日期

python - 如何按指定时间自动增加数据框列的时间并按天自动增加日期?

python - 检查 Python 模块中是否存在类型

python - 运行 python 3.9.4 时,我无法导入 tkinter,但降级到 3.8.2 工作正常

python - 如何在Windows中将ghostscript DLL库提供给python?

python - 从 python 中的包中获取模块名称