mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-30 11:10:11 +00:00
bitwise precedence fix for filter
This commit is contained in:
parent
22988bfc65
commit
364504e95e
2 changed files with 75 additions and 47 deletions
|
|
@ -43,6 +43,7 @@ filter_dsl_body(A) ::= filter_dsl_bool_expr(B). {
|
|||
past->proot = A;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
filter_dsl_bool_expr(A) ::= filter_dsl_or_term(B). {
|
||||
A = B;
|
||||
}
|
||||
|
|
@ -50,6 +51,7 @@ filter_dsl_bool_expr(A) ::= filter_dsl_bool_expr(B) FILTER_DSL_OR(O) filter_dsl_
|
|||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
filter_dsl_or_term(A) ::= filter_dsl_and_term(B). {
|
||||
A = B;
|
||||
}
|
||||
|
|
@ -57,15 +59,49 @@ filter_dsl_or_term(A) ::= filter_dsl_or_term(B) FILTER_DSL_AND(O) filter_dsl_and
|
|||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
|
||||
|
||||
filter_dsl_and_term(A) ::= filter_dsl_bit_or_term(B). {
|
||||
// ----------------------------------------------------------------
|
||||
filter_dsl_and_term(A) ::= filter_dsl_eqne_term(B). {
|
||||
A = B;
|
||||
}
|
||||
filter_dsl_and_term(A) ::= filter_dsl_and_term(B) FILTER_DSL_BIT_OR(O) filter_dsl_bit_or_term(C). {
|
||||
filter_dsl_and_term(A) ::= filter_dsl_and_term(B) FILTER_DSL_MATCHES(O) filter_dsl_eqne_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_and_term(A) ::= filter_dsl_and_term(B) FILTER_DSL_DOES_NOT_MATCH(O) filter_dsl_eqne_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_and_term(A) ::= filter_dsl_and_term(B) FILTER_DSL_EQ(O) filter_dsl_eqne_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_and_term(A) ::= filter_dsl_and_term(B) FILTER_DSL_NE(O) filter_dsl_eqne_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
filter_dsl_eqne_term(A) ::= filter_dsl_cmp_term(B). {
|
||||
A = B;
|
||||
}
|
||||
filter_dsl_eqne_term(A) ::= filter_dsl_eqne_term(B) FILTER_DSL_GT(O) filter_dsl_cmp_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_eqne_term(A) ::= filter_dsl_eqne_term(B) FILTER_DSL_GE(O) filter_dsl_cmp_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_eqne_term(A) ::= filter_dsl_eqne_term(B) FILTER_DSL_LT(O) filter_dsl_cmp_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_eqne_term(A) ::= filter_dsl_eqne_term(B) FILTER_DSL_LE(O) filter_dsl_cmp_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
filter_dsl_cmp_term(A) ::= filter_dsl_bit_or_term(B). {
|
||||
A = B;
|
||||
}
|
||||
filter_dsl_cmp_term(A) ::= filter_dsl_cmp_term(B) FILTER_DSL_BIT_OR(O) filter_dsl_bit_or_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
filter_dsl_bit_or_term(A) ::= filter_dsl_bit_xor_term(B). {
|
||||
A = B;
|
||||
}
|
||||
|
|
@ -73,6 +109,7 @@ filter_dsl_bit_or_term(A) ::= filter_dsl_bit_or_term(B) FILTER_DSL_BIT_XOR(O) fi
|
|||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
filter_dsl_bit_xor_term(A) ::= filter_dsl_bit_and_term(B). {
|
||||
A = B;
|
||||
}
|
||||
|
|
@ -81,50 +118,16 @@ filter_dsl_bit_xor_term(A) ::= filter_dsl_bit_xor_term(B) FILTER_DSL_BIT_AND(O)
|
|||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
filter_dsl_bit_and_term(A) ::= filter_dsl_eqne_term(B). {
|
||||
filter_dsl_bit_and_term(A) ::= filter_dsl_pmdot_term(B). {
|
||||
A = B;
|
||||
}
|
||||
filter_dsl_bit_and_term(A) ::= filter_dsl_eqne_term(B) FILTER_DSL_MATCHES(O) filter_dsl_eqne_term(C). {
|
||||
filter_dsl_bit_and_term(A) ::= filter_dsl_bit_and_term(B) FILTER_DSL_PLUS(O) filter_dsl_pmdot_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_bit_and_term(A) ::= filter_dsl_eqne_term(B) FILTER_DSL_DOES_NOT_MATCH(O) filter_dsl_eqne_term(C). {
|
||||
filter_dsl_bit_and_term(A) ::= filter_dsl_bit_and_term(B) FILTER_DSL_MINUS(O) filter_dsl_pmdot_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_bit_and_term(A) ::= filter_dsl_eqne_term(B) FILTER_DSL_EQ(O) filter_dsl_eqne_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_bit_and_term(A) ::= filter_dsl_eqne_term(B) FILTER_DSL_NE(O) filter_dsl_eqne_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
filter_dsl_eqne_term(A) ::= filter_dsl_cmp_term(B). {
|
||||
A = B;
|
||||
}
|
||||
filter_dsl_eqne_term(A) ::= filter_dsl_cmp_term(B) FILTER_DSL_GT(O) filter_dsl_cmp_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_eqne_term(A) ::= filter_dsl_cmp_term(B) FILTER_DSL_GE(O) filter_dsl_cmp_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_eqne_term(A) ::= filter_dsl_cmp_term(B) FILTER_DSL_LT(O) filter_dsl_cmp_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_eqne_term(A) ::= filter_dsl_cmp_term(B) FILTER_DSL_LE(O) filter_dsl_cmp_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
filter_dsl_cmp_term(A) ::= filter_dsl_pmdot_term(B). {
|
||||
A = B;
|
||||
}
|
||||
filter_dsl_cmp_term(A) ::= filter_dsl_cmp_term(B) FILTER_DSL_PLUS(O) filter_dsl_pmdot_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_cmp_term(A) ::= filter_dsl_cmp_term(B) FILTER_DSL_MINUS(O) filter_dsl_pmdot_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
filter_dsl_cmp_term(A) ::= filter_dsl_cmp_term(B) FILTER_DSL_DOT(O) filter_dsl_pmdot_term(C). {
|
||||
filter_dsl_bit_and_term(A) ::= filter_dsl_bit_and_term(B) FILTER_DSL_DOT(O) filter_dsl_pmdot_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
|
||||
}
|
||||
|
||||
|
|
@ -149,13 +152,13 @@ filter_dsl_pmdot_term(A) ::= filter_dsl_pmdot_term(B) FILTER_DSL_MOD(O) filter_d
|
|||
filter_dsl_muldiv_term(A) ::= filter_dsl_unary_term(B). {
|
||||
A = B;
|
||||
}
|
||||
filter_dsl_muldiv_term(A) ::= FILTER_DSL_PLUS(O) filter_dsl_muldiv_term(C). {
|
||||
filter_dsl_muldiv_term(A) ::= FILTER_DSL_PLUS(O) filter_dsl_unary_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, C);
|
||||
}
|
||||
filter_dsl_muldiv_term(A) ::= FILTER_DSL_MINUS(O) filter_dsl_muldiv_term(C). {
|
||||
filter_dsl_muldiv_term(A) ::= FILTER_DSL_MINUS(O) filter_dsl_unary_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, C);
|
||||
}
|
||||
filter_dsl_muldiv_term(A) ::= FILTER_DSL_NOT(O) filter_dsl_muldiv_term(C). {
|
||||
filter_dsl_muldiv_term(A) ::= FILTER_DSL_NOT(O) filter_dsl_unary_term(C). {
|
||||
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, C);
|
||||
}
|
||||
|
||||
|
|
|
|||
31
c/todo.txt
31
c/todo.txt
|
|
@ -24,13 +24,17 @@ TOP OF LIST
|
|||
http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html.
|
||||
o expanded UTs x all of the above. lncl. ./tmod
|
||||
o sgn function needs UT cases
|
||||
o bitops UTs x put/filter
|
||||
o >>, <<, ~
|
||||
o urandint -> w/urand @ mlr -h, mld, etc.
|
||||
o bitops filter faqent / online help: filter '0 != $x | $y' vs. filter '0 != ($x | $y)'
|
||||
... or change the precedence :)
|
||||
|
||||
o now is a good time to look at bitops. first get the precedence right.
|
||||
|
||||
OLD
|
||||
* mlr doc precedence:
|
||||
Operators Associativity
|
||||
--------- -------------
|
||||
= N/A for Miller (no $a=$b=$c)
|
||||
|| left to right
|
||||
&& left to right
|
||||
| left to right
|
||||
|
|
@ -39,11 +43,32 @@ TOP OF LIST
|
|||
== != left to right
|
||||
< <= > >= left to right
|
||||
<< >> left to right
|
||||
binary+ binary- left to right
|
||||
binary+ binary- . left to right
|
||||
binary* / % left to right
|
||||
! ~ ++ -- unary+ unary- & right to left
|
||||
() left to right
|
||||
|
||||
NEW
|
||||
* mlr doc precedence:
|
||||
Operators Associativity
|
||||
--------- -------------
|
||||
= N/A for Miller (no $a=$b=$c)
|
||||
|| left to right
|
||||
&& left to right
|
||||
== != left to right
|
||||
< <= > >= left to right
|
||||
| left to right
|
||||
^ left to right
|
||||
& left to right
|
||||
<< >> left to right
|
||||
binary+ binary- . left to right
|
||||
binary* / % left to right
|
||||
! ~ ++ -- unary+ unary- & right to left
|
||||
() left to right
|
||||
|
||||
-> put in dot & other mlr operators
|
||||
-> stack the bitwise precedences
|
||||
|
||||
* packaging:
|
||||
- brew version bump?!?
|
||||
- cut a release w/ manpage
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue