Pular para o conteúdo

Precedência, provada

Da mais fraca para a mais forte — e cada nível conferido pela forma da árvore.

Uma tabela de precedência que ninguém confere é uma opinião. Esta sai de dataforge/gramatica.py, e cada afirmação embaixo dela é uma expressão em que a ordem decide o resultado — o teste parseia e confere qual nó fica na raiz.

NívelNomeOperadoresAssocia
1pipeline>>esquerda
2ternariogiven … otherwisedireita
3coalesce??esquerda
4ouoresquerda
5eandesquerda
6naonotprefixo
7comparacaois isnt bigger smaller bigger_eq smaller_eq in not inencadeia
8soma+ -esquerda
9produto* / % ~/esquerda
10unario-x +xprefixo
11potencia**direita
12posfixoa.b a?.b a(…) a[…]esquerda

O que fica na raiz#

ExpressãoRaiz
1 + 2 * 3BinaryOp +
2 * 3 ** 2BinaryOp *
-2 ** 2UnaryOp -
1 + 2 bigger 2ComparisonOp bigger
not a and bLogicalOp and
a or b and cLogicalOp or
a ?? b or cCoalesceOp
1 given a otherwise b ?? 2TernaryExpression
xs >> morph n: (n given n bigger 0 otherwise 0)PipelineExpression
xs >> sift n: n bigger 1 >> morph n: n * 2PipelineExpression
7 - 3 - 1BinaryOp -

Para que lado associa#

ExpressãoO lado que guarda o resto
7 - 3 - 1left é BinaryOp
8 / 4 / 2left é BinaryOp
2 ** 3 ** 2right é BinaryOp
a ?? b ?? cleft é CoalesceOp
a or b or cleft é LogicalOp
1 given a otherwise 2 given b otherwise 3else_value é TernaryExpression
1 smaller 2 smaller 3left é ComparisonOp
dataforge
assert (1 smaller 2 smaller 3) is yes
assert (1 smaller 5 smaller 3) is no
assert -2 ** 2 is -4
assert 2 ** 3 ** 2 is 512
assert 7 - 3 - 1 is 3
out "a precedencia confere executando, e nao so na arvore"

No terminal: dataforge gramatica --precedencia. Veja também Precedência.