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/