Shr*_*yan 2 python peg python-3.x python-3.9 python-3.10
bitwise_orPEG 语法中的含义是什么?更准确地说,有很多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
Run Code Online (Sandbox Code Playgroud)
注意bitwise_or这里的词。问题在于那个不是 PEG 中的竖线。
“按位或运算符”又名|具有常规二元运算符的最低优先级。唯一具有较低优先级的二元运算符是比较运算符,它们受制于链接——例如,a < b < c大致等效于a < b and b < c——因此行为特别。
对于 PEG 解析器,优先级通常使用优先级爬升进行编码。这意味着较低的优先级子句与其自身或下一个优先级子句匹配。因此,运算符优先级“ |< ^< &< ...”被编码为按位或、按位异或、按位与等的阶梯:
bitwise_or:
| bitwise_or '|' bitwise_xor
| bitwise_xor
bitwise_xor:
| bitwise_xor '^' bitwise_and
| bitwise_and
bitwise_and:
| bitwise_and '&' shift_expr
| shift_expr
Run Code Online (Sandbox Code Playgroud)
这使得bitwise_or匹配所有二元运算符的“入口点”:它可能遵循bitwise_xor,可能bitwise_and遵循 ,依此类推到最高优先级的运算符。值得注意的是,这意味着语法规则 bitwise_or可以匹配不包含“按位或”操作的输入——例如,bitwise_ormatches a ^ b。
因此,bitwise_or用于二元运算符可能出现的任何位置。
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |