// ---------------------------------------------------------------- void mlr_dsl_ast_print(mlr_dsl_ast_t* past) { printf("AST BEGIN STATEMENTS (%d):\n", past->pbegin_statements->length); for (sllve_t* pe = past->pbegin_statements->phead; pe != NULL; pe = pe->pnext) mlr_dsl_ast_node_print(pe->pvvalue); printf("AST MAIN STATEMENTS (%d):\n", past->pmain_statements->length); for (sllve_t* pe = past->pmain_statements->phead; pe != NULL; pe = pe->pnext) mlr_dsl_ast_node_print(pe->pvvalue); printf("AST END STATEMENTS (%d):\n", past->pend_statements->length); for (sllve_t* pe = past->pend_statements->phead; pe != NULL; pe = pe->pnext) mlr_dsl_ast_node_print(pe->pvvalue); }
// ---------------------------------------------------------------- static mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv) { char* verb = argv[(*pargi)++]; char* mlr_dsl_expression = NULL; int print_asts = FALSE; ap_state_t* pstate = ap_alloc(); ap_define_true_flag(pstate, "-v", &print_asts); if (!ap_parse(pstate, verb, pargi, argc, argv)) { mapper_put_usage(argv[0], verb); return NULL; } if ((argc - *pargi) < 1) { mapper_put_usage(argv[0], verb); return NULL; } mlr_dsl_expression = argv[(*pargi)++]; // Linked list of mlr_dsl_ast_node_t*. sllv_t* pasts = put_dsl_parse(mlr_dsl_expression); if (pasts == NULL) { mapper_put_usage(argv[0], verb); return NULL; } if (print_asts) { for (sllve_t* pe = pasts->phead; pe != NULL; pe = pe->pnext) mlr_dsl_ast_node_print(pe->pvdata); } return mapper_put_alloc(pasts); }