mapvar iterate

This commit is contained in:
John Kerl 2016-11-11 23:54:10 -05:00
parent 337e49781f
commit 420e088eec
4 changed files with 42 additions and 21 deletions

View file

@ -170,11 +170,12 @@ md_statement_not_braced_end(A) ::= MD_TOKEN_SUBR_CALL md_fcn_or_subr_call(B). {
}
// Not valid in begin/end since they refer to srecs:
md_statement_not_braced_end(A) ::= md_srec_assignment(B). { A = B; }
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_srec_assignment(B). { A = B; }
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_full_srec_from_map_literal_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; }
@ -822,9 +823,20 @@ md_oosvar_from_full_srec_assignment(A) ::= md_oosvar_keylist(B) MD_TOKEN_ASSIGN
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_nonindexed_local_variable(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text,
MD_AST_NODE_TYPE_FULL_SREC_FROM_NONINDEXED_LOCAL_VARIABLE_ASSIGNMENT, B, C);
}
md_full_srec_from_oosvar_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_indexed_local_variable(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text,
MD_AST_NODE_TYPE_FULL_SREC_FROM_INDEXED_LOCAL_VARIABLE_ASSIGNMENT, B, C);
}
md_full_srec_from_oosvar_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_full_srec_from_map_literal_assignment(A) ::= MD_TOKEN_FULL_SREC(B) MD_TOKEN_ASSIGN(O) md_map_literal(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);

View file

@ -264,7 +264,7 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) {
case MD_AST_NODE_TYPE_STATEMENT_BLOCK: return "STATEMENT_BLOCK"; break;
case MD_AST_NODE_TYPE_STATEMENT_LIST: return "STATEMENT_LIST"; break;
case MD_AST_NODE_TYPE_FUNC_DEF: return "FUNC_DEF"; break;
case MD_AST_NODE_TYPE_FUNCTION_CALLSITE: return "FUNCTION_CALLSITE"; break;
case MD_AST_NODE_TYPE_FUNCTION_CALLSITE: return "FUNCTION_CALLSITE"; break;
case MD_AST_NODE_TYPE_SUBR_DEF: return "SUBR_DEF"; break;
case MD_AST_NODE_TYPE_SUBR_CALLSITE: return "SUBR_CALLSITE"; break;
case MD_AST_NODE_TYPE_UNTYPED_LOCAL_DEFINITION: return "UNTYPED_LOCAL_DEFINITION"; break;
@ -273,7 +273,7 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) {
case MD_AST_NODE_TYPE_FLOAT_LOCAL_DEFINITION: return "FLOAT_LOCAL_DEFINITION"; break;
case MD_AST_NODE_TYPE_BOOLEAN_LOCAL_DEFINITION: return "BOOLEAN_LOCAL_DEFINITION"; break;
case MD_AST_NODE_TYPE_STRING_LOCAL_DEFINITION: return "STRING_LOCAL_DEFINITION"; break;
case MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION: return "MAP_LOCAL_DEFINITION"; break;
case MD_AST_NODE_TYPE_MAP_LOCAL_DEFINITION: return "MAP_LOCAL_DEFINITION"; break;
case MD_AST_NODE_TYPE_UNTYPED_PARAMETER_DEFINITION: return "UNTYPED_PARAMETER_DEFINITION"; break;
case MD_AST_NODE_TYPE_NUMERIC_PARAMETER_DEFINITION: return "NUMERIC_PARAMETER_DEFINITION"; break;
case MD_AST_NODE_TYPE_INT_PARAMETER_DEFINITION: return "INT_PARAMETER_DEFINITION"; break;
@ -299,13 +299,19 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) {
case MD_AST_NODE_TYPE_FULL_OOSVAR: return "FULL_OOSVAR"; break;
case MD_AST_NODE_TYPE_NON_SIGIL_NAME: return "NON_SIGIL_NAME"; break;
case MD_AST_NODE_TYPE_OPERATOR: return "OPERATOR"; break;
case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT: return "NONINDEXED_LOCAL_ASSIGNMENT"; break;
case MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT: return "INDEXED_LOCAL_ASSIGNMENT"; break;
case MD_AST_NODE_TYPE_NONINDEXED_LOCAL_ASSIGNMENT: return "NONINDEXED_LOCAL_ASSIGNMENT"; break;
case MD_AST_NODE_TYPE_INDEXED_LOCAL_ASSIGNMENT: return "INDEXED_LOCAL_ASSIGNMENT"; break;
case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: return "SREC_ASSIGNMENT"; break;
case MD_AST_NODE_TYPE_INDIRECT_SREC_ASSIGNMENT: return "INDIRECT_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_FULL_SREC_FROM_NONINDEXED_LOCAL_VARIABLE_ASSIGNMENT:
return "FULL_SREC_FROM_NONINDEXED_LOCAL_VARIABLE_ASSIGNMENT";
break;
case MD_AST_NODE_TYPE_FULL_SREC_FROM_INDEXED_LOCAL_VARIABLE_ASSIGNMENT:
return "FULL_SREC_FROM_INDEXED_LOCAL_VARIABLE_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;
@ -348,6 +354,7 @@ char* mlr_dsl_ast_node_describe_type(mlr_dsl_ast_node_type_t type) {
case MD_AST_NODE_TYPE_CONTINUE: return "CONTINUE"; break;
case MD_AST_NODE_TYPE_IF_HEAD: return "IF_HEAD"; break;
case MD_AST_NODE_TYPE_IF_ITEM: return "IF_ITEM"; break;
default: return "UNRECOGNIZED_AST_NODE_TYPE";
}
}

View file

@ -54,6 +54,8 @@ 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_FULL_SREC_FROM_NONINDEXED_LOCAL_VARIABLE_ASSIGNMENT,
MD_AST_NODE_TYPE_FULL_SREC_FROM_INDEXED_LOCAL_VARIABLE_ASSIGNMENT,
MD_AST_NODE_TYPE_ENV_ASSIGNMENT,
MD_AST_NODE_TYPE_CONTEXT_VARIABLE,
MD_AST_NODE_TYPE_ENV,

View file

@ -94,7 +94,7 @@ k assign LHS full-srec ? assign RHS oosvar
- assign LHS full-oosvar ? assign RHS localvar
- assign LHS full-oosvar ? assign RHS func-retval
.
- assign LHS oosvar ? assign RHS maplit
k assign LHS oosvar ? assign RHS maplit
k assign LHS oosvar ? assign RHS full-srec
- assign LHS oosvar ? assign RHS full-oosvar
k assign LHS oosvar ? assign RHS oosvar
@ -105,21 +105,21 @@ k define LHS map-typed-localvar ? assign RHS maplit
k define LHS map-typed-localvar ? assign RHS full-srec
k define LHS map-typed-localvar ? assign RHS full-oosvar
k define LHS map-typed-localvar ? assign RHS oosvar
- define LHS map-typed-localvar ? assign RHS localvar
k define LHS map-typed-localvar ? assign RHS localvar
- define LHS map-typed-localvar ? assign RHS func-retval
.
- define LHS untyped-localvar ? assign RHS maplit
- define LHS untyped-localvar ? assign RHS full-srec
- define LHS untyped-localvar ? assign RHS full-oosvar
- define LHS untyped-localvar ? assign RHS oosvar
- define LHS untyped-localvar ? assign RHS localvar
k define LHS untyped-localvar ? assign RHS maplit
k define LHS untyped-localvar ? assign RHS full-srec
k define LHS untyped-localvar ? assign RHS full-oosvar
k define LHS untyped-localvar ? assign RHS oosvar
k define LHS untyped-localvar ? assign RHS localvar
- define LHS untyped-localvar ? assign RHS func-retval
.
- assign LHS localvar ? assign RHS maplit
- assign LHS localvar ? assign RHS full-srec
- assign LHS localvar ? assign RHS full-oosvar
- assign LHS localvar ? assign RHS oosvar
- assign LHS localvar ? assign RHS localvar
k assign LHS localvar ? assign RHS maplit
k assign LHS localvar ? assign RHS full-srec
k assign LHS localvar ? assign RHS full-oosvar
k assign LHS localvar ? assign RHS oosvar
k assign LHS localvar ? assign RHS localvar
- assign LHS localvar ? assign RHS func-retval
new: