dfilter: Reformat grammar code

Use a consistent style for grammar rules.

Remove a comment that is too generic. The current code should
conform to how Python operates and does not need additional error
checking.
This commit is contained in:
João Valverde 2022-12-23 00:51:32 +00:00
parent b9a5009cb2
commit 816005fc23
1 changed files with 49 additions and 14 deletions

View File

@ -287,14 +287,53 @@ arithmetic_expr(T) ::= LBRACE arithmetic_expr(F) RBRACE.
}
/* Relational tests */
cmp_op(O) ::= TEST_ALL_EQ(L). { O = L; sttype_oper_set_op(O, STNODE_OP_ALL_EQ); }
cmp_op(O) ::= TEST_ANY_EQ(L). { O = L; sttype_oper_set_op(O, STNODE_OP_ANY_EQ); }
cmp_op(O) ::= TEST_ALL_NE(L). { O = L; sttype_oper_set_op(O, STNODE_OP_ALL_NE); }
cmp_op(O) ::= TEST_ANY_NE(L). { O = L; sttype_oper_set_op(O, STNODE_OP_ANY_NE); }
cmp_op(O) ::= TEST_GT(L). { O = L; sttype_oper_set_op(O, STNODE_OP_GT); }
cmp_op(O) ::= TEST_GE(L). { O = L; sttype_oper_set_op(O, STNODE_OP_GE); }
cmp_op(O) ::= TEST_LT(L). { O = L; sttype_oper_set_op(O, STNODE_OP_LT); }
cmp_op(O) ::= TEST_LE(L). { O = L; sttype_oper_set_op(O, STNODE_OP_LE); }
cmp_op(O) ::= TEST_ALL_EQ(L).
{
O = L;
sttype_oper_set_op(O, STNODE_OP_ALL_EQ);
}
cmp_op(O) ::= TEST_ANY_EQ(L).
{
O = L;
sttype_oper_set_op(O, STNODE_OP_ANY_EQ);
}
cmp_op(O) ::= TEST_ALL_NE(L).
{
O = L;
sttype_oper_set_op(O, STNODE_OP_ALL_NE);
}
cmp_op(O) ::= TEST_ANY_NE(L).
{
O = L;
sttype_oper_set_op(O, STNODE_OP_ANY_NE);
}
cmp_op(O) ::= TEST_GT(L).
{
O = L;
sttype_oper_set_op(O, STNODE_OP_GT);
}
cmp_op(O) ::= TEST_GE(L).
{
O = L;
sttype_oper_set_op(O, STNODE_OP_GE);
}
cmp_op(O) ::= TEST_LT(L).
{
O = L;
sttype_oper_set_op(O, STNODE_OP_LT);
}
cmp_op(O) ::= TEST_LE(L).
{
O = L;
sttype_oper_set_op(O, STNODE_OP_LE);
}
comparison_test(T) ::= arithmetic_expr(E) cmp_op(O) arithmetic_expr(F).
{
@ -306,15 +345,11 @@ comparison_test(T) ::= arithmetic_expr(E) cmp_op(O) arithmetic_expr(F).
comparison_test(T) ::= arithmetic_expr(E) cmp_op(O) comparison_test(R).
{
stnode_t *L, *F;
/* for now generate it like E O F STNODE_OP_AND F P G, later it could be optimized
or semantically checked (to make a <= b >= c or a == b != c invalid)?
*/
F = R;
do {
ws_assert(F != NULL && stnode_type_id(F) == STTYPE_TEST);
while (stnode_type_id(F) == STTYPE_TEST) {
sttype_oper_get(F, NULL, &F, NULL);
} while (stnode_type_id(F) == STTYPE_TEST);
}
L = O;
sttype_oper_set2_args(L, E, stnode_dup(F));