Какова цель bitwise_or в Python PEG?
Что значит в грамматике PEG? Точнее, существует множество контекстов, в которых он даже не анализирует | пока есть случаи. Служит ли в 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
Обратите внимание на слово
1 ответ
«Побитовый оператор или», также известный как «побитовый оператор», имеет самый низкий приоритет среди обычных бинарных операторов . Единственными бинарными операторами с более низким приоритетом являются операторы сравнения, которые могут быть объединены в цепочку, например,
a < b < c
примерно эквивалентно
a < b and b < c
- и при этом вести себя особым образом.
Для синтаксического анализатора PEG приоритет обычно кодируется с помощью нарастания приоритета . Это означает, что предложение более низкого приоритета соответствует либо самому себе, либо следующему предложению приоритета. Таким образом, приоритет оператора "
|
<
^
<
&
<... "кодируется в виде лестницы побитового или, побитового xor, побитового и т. д .:
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_xor
, который может быть отложен до
bitwise_and
и так далее до оператора с наивысшим приоритетом. Примечательно, что это означает, что правило грамматики может сопоставлять ввод, который не содержит операции «побитовое или» - например, соответствует
a ^ b
.
Таким образом,
bitwise_or
используется в любой позиции, где может встречаться бинарный оператор.