Итак, я наткнулся на грамматику для языка Python (https://docs.python.org/3/reference/grammar.html), и я не могу полностью понять, как он работает. Особенно меня интересует это прорезанное выражение if.
if_stmt: 'if' namedexpr_test ':' suite ('elif' namedexpr_test ':' suite)* ['else' ':' suite]
[...]
namedexpr_test: test [':=' test]
test: or_test ['if' or_test 'else' test] | lambdef
test_nocond: or_test | lambdef_nocond
lambdef: 'lambda' [varargslist] ':' test
lambdef_nocond: 'lambda' [varargslist] ':' test_nocond
or_test: and_test ('or' and_test)*
and_test: not_test ('and' not_test)*
not_test: 'not' not_test | comparison
comparison: expr (comp_op expr)*
# <> isn't actually a valid comparison operator in Python. It's here for the
# sake of a __future__ import described in PEP 401 (which really works :-)
comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'
Здесь есть определенный стиль. Определяя or_test
в терминах and_test
и and_test
снова в терминах not_test
. В чем преимущество этого стиля? (Потому что я видел, что он также используется в грамматике для C ++ и, скорее всего, для многих других языков).