mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-24 00:18:39 +00:00
ENV LHS iterate
This commit is contained in:
parent
3bf02d6fdd
commit
988dedcdfe
3 changed files with 72 additions and 7 deletions
|
|
@ -183,6 +183,7 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) {
|
|||
case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: return "oosvar_assignment"; break;
|
||||
case MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT: return "oosvar_from_full_srec_assignment"; break;
|
||||
case MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT: return "full_srec_from_oosvar_assignment"; break;
|
||||
case MD_AST_NODE_TYPE_ENV_ASSIGNMENT: return "env_assignment"; break;
|
||||
case MD_AST_NODE_TYPE_CONTEXT_VARIABLE: return "context_variable"; break;
|
||||
case MD_AST_NODE_TYPE_STRIPPED_AWAY: return "stripped_away"; break;
|
||||
case MD_AST_NODE_TYPE_CONDITIONAL_BLOCK: return "conditional_block"; break;
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ typedef enum _mlr_dsl_ast_node_type_t {
|
|||
MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_ENV_ASSIGNMENT,
|
||||
MD_AST_NODE_TYPE_CONTEXT_VARIABLE,
|
||||
MD_AST_NODE_TYPE_ENV,
|
||||
MD_AST_NODE_TYPE_STRIPPED_AWAY,
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ md_statement_not_braced_end(A) ::= md_srec_assignment(B). { A =
|
|||
md_statement_not_braced_end(A) ::= md_srec_indirect_assignment(B). { A = B; }
|
||||
md_statement_not_braced_end(A) ::= md_oosvar_from_full_srec_assignment(B). { A = B; }
|
||||
md_statement_not_braced_end(A) ::= md_full_srec_from_oosvar_assignment(B). { A = B; }
|
||||
//md_statement_not_braced_end(A) ::= md_env_assignment(B). { A = B; }
|
||||
md_statement_not_braced_end(A) ::= md_env_assignment(B). { A = B; }
|
||||
|
||||
// Valid in begin/end since they don't refer to srecs (although the RHSs might):
|
||||
md_statement_not_braced_end(A) ::= md_do_while_block(B). { A = B; }
|
||||
|
|
@ -570,12 +570,9 @@ md_full_srec_from_oosvar_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIG
|
|||
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT, B, C);
|
||||
}
|
||||
|
||||
//xxx
|
||||
//make intermediate
|
||||
|
||||
//md_env_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_oosvar_keylist(C). {
|
||||
//A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT, B, C);
|
||||
//}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_ASSIGN(O) md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B, C);
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). {
|
||||
|
|
@ -774,6 +771,72 @@ md_local_assignment(A) ::= md_bound_variable(B) MD_TOKEN_POW_EQUALS md_rhs(C).
|
|||
mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("||", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_LOGICAL_XOR_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("^^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_LOGICAL_AND_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("&&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_OR_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("|", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_XOR_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("^", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_AND_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("&", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_LSH_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("<<", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_BITWISE_RSH_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary(">>", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_PLUS_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("+", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_MINUS_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("-", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_DOT_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary(".", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_TIMES_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_DIVIDE_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("/", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_INT_DIVIDE_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("//", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_MOD_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("%", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
md_env_assignment(A) ::= md_env_index(B) MD_TOKEN_POW_EQUALS md_rhs(C). {
|
||||
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_ENV_ASSIGNMENT, B,
|
||||
mlr_dsl_ast_node_alloc_binary("**", MD_AST_NODE_TYPE_OPERATOR, mlr_dsl_ast_tree_copy(B) , C));
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
md_unset(A) ::= MD_TOKEN_UNSET(O) MD_TOKEN_ALL(B). {
|
||||
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_UNSET, B);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue