$$0 iterate

This commit is contained in:
John Kerl 2016-03-02 23:54:37 -05:00
parent 016b1628b8
commit 3137cb9c70
5 changed files with 38 additions and 1 deletions

View file

@ -151,12 +151,15 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) {
case MD_AST_NODE_TYPE_BOOLEAN_LITERAL: return "boolean_literal"; break;
case MD_AST_NODE_TYPE_REGEXI: return "regexi"; break;
case MD_AST_NODE_TYPE_FIELD_NAME: return "field_name"; break;
case MD_AST_NODE_TYPE_FULL_SREC: return "full_srec"; break;
case MD_AST_NODE_TYPE_OOSVAR_NAME: return "oosvar_name"; break;
case MD_AST_NODE_TYPE_OOSVAR_LEVEL_KEY: return "oosvar_level_key"; break;
case MD_AST_NODE_TYPE_FUNCTION_NAME: return "function_name"; break;
case MD_AST_NODE_TYPE_OPERATOR: return "operator"; break;
case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: return "srec_assignment"; break;
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_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;

View file

@ -12,12 +12,15 @@ typedef enum _mlr_dsl_ast_node_type_t {
MD_AST_NODE_TYPE_BOOLEAN_LITERAL,
MD_AST_NODE_TYPE_REGEXI,
MD_AST_NODE_TYPE_FIELD_NAME,
MD_AST_NODE_TYPE_FULL_SREC,
MD_AST_NODE_TYPE_OOSVAR_NAME,
MD_AST_NODE_TYPE_OOSVAR_LEVEL_KEY,
MD_AST_NODE_TYPE_FUNCTION_NAME,
MD_AST_NODE_TYPE_OPERATOR,
MD_AST_NODE_TYPE_SREC_ASSIGNMENT,
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_CONTEXT_VARIABLE,
MD_AST_NODE_TYPE_ENV,
MD_AST_NODE_TYPE_STRIPPED_AWAY,

View file

@ -252,6 +252,11 @@
return MD_TOKEN_POW_EQUALS;
}
\$\$0 {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FULL_SREC);
return MD_TOKEN_FULL_SREC;
}
\$[a-zA-Z_0-9]+ {
// Note: the parser depends on the dollar sign being here. If this is changed,
// that needs to be changed as well.

View file

@ -47,6 +47,8 @@ md_statement ::= .
md_statement ::= md_main_srec_assignment.
md_statement ::= md_main_oosvar_assignment.
md_statement ::= md_main_oosvar_from_full_srec_assignment.
md_statement ::= md_main_full_srec_from_oosvar_assignment.
md_statement ::= md_main_bare_boolean.
md_statement ::= md_main_filter.
md_statement ::= md_main_unset.
@ -133,6 +135,15 @@ md_main_oosvar_assignment(A) ::= md_oosvar_assignment(B). {
A = B;
sllv_append(past->pmain_statements, A);
}
md_main_oosvar_from_full_srec_assignment(A) ::= md_oosvar_from_full_srec_assignment(B). {
A = B;
sllv_append(past->pmain_statements, A);
}
md_main_full_srec_from_oosvar_assignment(A) ::= md_full_srec_from_oosvar_assignment(B). {
A = B;
sllv_append(past->pmain_statements, A);
}
md_main_bare_boolean(A) ::= md_rhs(B). {
A = B;
sllv_append(past->pmain_statements, A);
@ -250,6 +261,20 @@ md_oosvar_assignment(A) ::= md_keyed_oosvar_name(B) MD_TOKEN_ASSIGN(O) md_rhs(C
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, C);
}
md_oosvar_from_full_srec_assignment(A) ::= md_oosvar_name(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, B, C);
}
md_oosvar_from_full_srec_assignment(A) ::= md_keyed_oosvar_name(B) MD_TOKEN_ASSIGN(O) MD_TOKEN_FULL_SREC(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT, B, C);
}
md_full_srec_from_oosvar_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_oosvar_name(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_FROM_FULL_SREC_ASSIGNMENT, B, C);
}
md_full_srec_from_oosvar_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_keyed_oosvar_name(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_FULL_SREC_FROM_OOSVAR_ASSIGNMENT, B, C);
}
// ----------------------------------------------------------------
md_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_LOGICAL_OR_EQUALS md_rhs(C). {
A = mlr_dsl_ast_node_alloc_binary("=", MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B,

View file

@ -8,7 +8,6 @@ TOP-OF-LIST SUMMARY
* rh/fedora/centos mlr-3.4.0
! sllmv_add w/ free-flags
* neaten/xxxes/valgrind/UT/doc for unset/tri-split-null/+=etal/parameterized emit
* double-check oosvar+emit+tri-split-null by re-implementing as many mappers as possible using ossvars + emit
@ -66,6 +65,8 @@ PARAMETERIZED EMIT AND UNSET
* rename emit restkeys to pullforwardkeys or some such
* cli-parameterize the joinchar (:)
================================================================
TRI-SPLIT NULL, AND += ET AL.