Python PEG 中 bitwise_or 的目的是啥?
Posted
技术标签:
【中文标题】Python PEG 中 bitwise_or 的目的是啥?【英文标题】: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 中的竖线。
【问题讨论】:
【参考方案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
用于可能出现二元运算符的任何位置。
【讨论】:
谢谢。现在我明白了。以上是关于Python PEG 中 bitwise_or 的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Python 之父的解析器系列之三:生成一个 PEG 解析器
正确认高分子PEG:识MTA mPEG,Myristic-acid PEG,肉豆蔻酸 PEG,PEG改性肉豆蔻酸