diff --git a/c/Makefile.no-autoconfig b/c/Makefile.no-autoconfig index d3b282b49..79153df93 100644 --- a/c/Makefile.no-autoconfig +++ b/c/Makefile.no-autoconfig @@ -26,8 +26,11 @@ LFLAGS=-lm INSTALLDIR=/usr/local/bin CCOPT=$(CC) $(CFLAGS) $(IFLAGS) $(WFLAGS) -O3 +#CCOPT=clang -fsanitize=address $(CFLAGS) $(IFLAGS) $(WFLAGS) -O3 + #CCDEBUG=$(CC) -g -O1 $(CFLAGS) $(IFLAGS) $(WFLAGS) CCDEBUG=$(CC) -g $(CFLAGS) $(IFLAGS) $(WFLAGS) +#CCDEBUG=clang -g -fsanitize=address $(CFLAGS) $(IFLAGS) $(WFLAGS) # ---------------------------------------------------------------- # Miller source except DSL diff --git a/c/dsls/Makefile.no-autoconfig b/c/dsls/Makefile.no-autoconfig index b751b3d69..2b93bd9d6 100644 --- a/c/dsls/Makefile.no-autoconfig +++ b/c/dsls/Makefile.no-autoconfig @@ -6,10 +6,17 @@ # ================================================================ CC=gcc - CFLAGS=-I.. -O3 +#CFLAGS=-I.. -O3 -g +#CFLAGS=-I.. -O2 +#CFLAGS=-I.. -O1 -g +#CFLAGS=-I.. -O1 +#CFLAGS=-I.. -O0 #CFLAGS=-I.. -g +#CC=clang +#CFLAGS=-I.. -O1 -g -fsanitize=address + # ---------------------------------------------------------------- top: mlr_dsl_lexer.o mlr_dsl_parse.o mlr_dsl_wrapper.o diff --git a/c/dsls/lempar.c b/c/dsls/lempar.c index e6e2834d0..4ccb357b0 100644 --- a/c/dsls/lempar.c +++ b/c/dsls/lempar.c @@ -4,6 +4,7 @@ /* First off, code is include which follows the "include" declaration ** in the input file. */ #include +#undef NDEBUG // xxx temp %% /* Next is all token values, in a form suitable for use by makeheaders. ** This section will be null unless lemon is run with the -m switch. @@ -447,13 +448,22 @@ static void yy_reduce( lemon_parser_t *pparser, /* The parser */ int yyruleno) /* Number of the rule by which to reduce */ { - int yygoto; /* The next state */ - int yyact; /* The next action */ + //printf("-- %s %d\n", __FILE__, __LINE__); + int yygoto = -999 ; /* The next state */ + int yyact = -999; /* The next action */ YYMINORTYPE yygotominor; /* The LHS of the rule reduced */ + // xxx + //printf("PRE MEMSET\n"); + //memset(&yygotominor, 0, sizeof(yygotominor)); + //printf("POST MEMSET\n"); yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ + // xxx remove x all + //printf("-- %s %d\n", __FILE__, __LINE__); ParseARG_FETCH; + //printf("-- %s %d\n", __FILE__, __LINE__); yymsp = &pparser->yystack[pparser->yyidx]; + //printf("-- %s %d\n", __FILE__, __LINE__); #ifndef NDEBUG if (yyTraceFILE && yyruleno>=0 && yyrulenoyyidx -= yysize; + //printf("-- %s %d\n", __FILE__, __LINE__); yyact = yy_find_reduce_action(pparser,yygoto); if (yyact < YYNSTATE) { + //printf("-- %s %d\n", __FILE__, __LINE__); yy_shift(pparser,yyact,yygoto,&yygotominor); } else if (yyact == YYNSTATE + YYNRULE + 1) { + //printf("-- %s %d\n", __FILE__, __LINE__); yy_accept(pparser); } + //printf("-- %s %d\n", __FILE__, __LINE__); } /* diff --git a/c/dsls/mlr_dsl_parse.y b/c/dsls/mlr_dsl_parse.y index e588c8dfa..369ffe3c9 100644 --- a/c/dsls/mlr_dsl_parse.y +++ b/c/dsls/mlr_dsl_parse.y @@ -140,33 +140,33 @@ md_statement_not_braced_end ::= md_filter. md_statement_not_braced_end ::= md_unset. md_statement_not_braced_end ::= md_emitf. -//md_statement_not_braced_end ::= md_emitf_write. -//md_statement_not_braced_end ::= md_emitf_append. +//@@md_statement_not_braced_end ::= md_emitf_write. +//@@md_statement_not_braced_end ::= md_emitf_append. md_statement_not_braced_end ::= md_emitp. -//md_statement_not_braced_end ::= md_emitp_write. -//md_statement_not_braced_end ::= md_emitp_append. +//@@md_statement_not_braced_end ::= md_emitp_write. +//@@md_statement_not_braced_end ::= md_emitp_append. md_statement_not_braced_end ::= md_emit. -//md_statement_not_braced_end ::= md_emit_write. -//md_statement_not_braced_end ::= md_emit_append. +//@@md_statement_not_braced_end ::= md_emit_write. +//@@md_statement_not_braced_end ::= md_emit_append. md_statement_not_braced_end ::= md_emitp_lashed. -//md_statement_not_braced_end ::= md_emitp_lashed_write. -//md_statement_not_braced_end ::= md_emitp_lashed_append. +//@@md_statement_not_braced_end ::= md_emitp_lashed_write. +//@@md_statement_not_braced_end ::= md_emitp_lashed_append. md_statement_not_braced_end ::= md_emit_lashed. -//md_statement_not_braced_end ::= md_emit_lashed_write. -//md_statement_not_braced_end ::= md_emit_lashed_append. +//@@md_statement_not_braced_end ::= md_emit_lashed_write. +//@@md_statement_not_braced_end ::= md_emit_lashed_append. md_statement_not_braced_end ::= md_dump. -//md_statement_not_braced_end ::= md_dump_write. -//md_statement_not_braced_end ::= md_dump_append. +//@@md_statement_not_braced_end ::= md_dump_write. +//@@md_statement_not_braced_end ::= md_dump_append. md_statement_not_braced_end ::= md_edump. md_statement_not_braced_end ::= md_print. md_statement_not_braced_end ::= md_eprint. -//md_statement_not_braced_end ::= md_print_write. -//md_statement_not_braced_end ::= md_print_append. +//@@md_statement_not_braced_end ::= md_print_write. +//@@md_statement_not_braced_end ::= md_print_append. md_statement_not_braced_end ::= md_printn. md_statement_not_braced_end ::= md_eprintn. -//md_statement_not_braced_end ::= md_printn_write. -//md_statement_not_braced_end ::= md_printn_append. +//@@md_statement_not_braced_end ::= md_printn_write. +//@@md_statement_not_braced_end ::= md_printn_append. // Valid only within for/while, but we accept them here syntactically and reject them in the AST-to-CST // conversion, where we can produce much more informative error messages: @@ -613,14 +613,14 @@ md_emitf_args(A) ::= md_emitf_args(B) MD_TOKEN_COMMA md_oosvar_keylist(C). { A = mlr_dsl_ast_node_append_arg(B, C); } -//md_emitf_write(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_emitf_args(B). { -// B = mlr_dsl_ast_node_set_function_name(B, O->text); -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF_WRITE, B, F); -//} -//md_emitf_append(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_emitf_args(B). { -// B = mlr_dsl_ast_node_set_function_name(B, O->text); -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF_APPEND, B, F); -//} +//@@md_emitf_write(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_emitf_args(B). { +//@@ B = mlr_dsl_ast_node_set_function_name(B, O->text); +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF_WRITE, B, F); +//@@} +//@@md_emitf_append(A) ::= MD_TOKEN_EMITF(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_emitf_args(B). { +//@@ B = mlr_dsl_ast_node_set_function_name(B, O->text); +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITF_APPEND, B, F); +//@@} // ---------------------------------------------------------------- md_emitp(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_ALL(B). { @@ -642,67 +642,67 @@ md_emitp(A) ::= MD_TOKEN_EMITP(O) md_oosvar_keylist(B) MD_TOKEN_COMMA md_emitp_n A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP, B, C); } -//md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_ALL(B). -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); -//} -//md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emitp_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); -//} -//md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_FULL_OOSVAR(B). -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); -//} -//md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emitp_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); -//} -//md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// md_oosvar_keylist(B). -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); -//} -//md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// md_oosvar_keylist(B) MD_TOKEN_COMMA md_emitp_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); -//} +//@@md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_ALL(B). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); +//@@} +//@@md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emitp_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); +//@@} +//@@md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_FULL_OOSVAR(B). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); +//@@} +//@@md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emitp_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); +//@@} +//@@md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ md_oosvar_keylist(B). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); +//@@} +//@@md_emitp_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ md_oosvar_keylist(B) MD_TOKEN_COMMA md_emitp_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); +//@@} -//md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_ALL(B). -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, F); -//} -//md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emitp_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, C, F); -//} -//md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_FULL_OOSVAR(B). -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); -//} -//md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emitp_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); -//} -//md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// md_oosvar_keylist(B). -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, F); -//} -//md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// md_oosvar_keylist(B) MD_TOKEN_COMMA md_emitp_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, C, F); -//} +//@@md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_ALL(B). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, F); +//@@} +//@@md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emitp_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, C, F); +//@@} +//@@md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_FULL_OOSVAR(B). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, F); +//@@} +//@@md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emitp_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_WRITE, B, C, F); +//@@} +//@@md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ md_oosvar_keylist(B). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, F); +//@@} +//@@md_emitp_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ md_oosvar_keylist(B) MD_TOKEN_COMMA md_emitp_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_APPEND, B, C, F); +//@@} md_emitp_namelist(A) ::= md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary("emitp_namelist", MD_AST_NODE_TYPE_EMITP, B); @@ -733,81 +733,81 @@ md_emit(A) ::= MD_TOKEN_EMIT(O) md_oosvar_keylist(B) MD_TOKEN_COMMA md_emit_name A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT, B, C); } -//md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_ALL(B). -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); -//} -//md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emit_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); -//} -//md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_FULL_OOSVAR(B). -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); -//} -//md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emit_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); -//} -//md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// md_oosvar_keylist(B). -//{ -// // xxx -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); -//} -//md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// md_oosvar_keylist(B) MD_TOKEN_COMMA md_emit_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); -//} +//@@md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_ALL(B). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); +//@@} +//@@md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emit_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); +//@@} +//@@md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_FULL_OOSVAR(B). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); +//@@} +//@@md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emit_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); +//@@} +//@@md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ md_oosvar_keylist(B). +//@@{ +//@@ // xxx +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); +//@@} +//@@md_emit_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ md_oosvar_keylist(B) MD_TOKEN_COMMA md_emit_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); +//@@} -//md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_ALL(B). -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); -//} -//md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emit_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, C, F); -//} -//md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_FULL_OOSVAR(B). -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); -//} -//md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emit_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); -//} -//md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_IF md_rhs(F) MD_TOKEN_COMMA -// md_oosvar_keylist(B). -//{ -// // xxx -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); -//} -//md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_POW md_rhs(F) MD_TOKEN_COMMA -// md_oosvar_keylist(B). -//{ -// // xxx -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); -//} -//md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// md_oosvar_keylist(B). -//{ -// // xxx -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); -//} -//md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA -// md_oosvar_keylist(B) MD_TOKEN_COMMA md_emit_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, C, F); -//} +//@@md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_ALL(B). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); +//@@} +//@@md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_ALL(B) MD_TOKEN_COMMA md_emit_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, C, F); +//@@} +//@@md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_FULL_OOSVAR(B). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, F); +//@@} +//@@md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_FULL_OOSVAR(B) MD_TOKEN_COMMA md_emit_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_WRITE, B, C, F); +//@@} +//@@md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_IF md_rhs(F) MD_TOKEN_COMMA +//@@ md_oosvar_keylist(B). +//@@{ +//@@ // xxx +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); +//@@} +//@@md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_POW md_rhs(F) MD_TOKEN_COMMA +//@@ md_oosvar_keylist(B). +//@@{ +//@@ // xxx +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); +//@@} +//@@md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ md_oosvar_keylist(B). +//@@{ +//@@ // xxx +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, F); +//@@} +//@@md_emit_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RHS md_rhs(F) MD_TOKEN_COMMA +//@@ md_oosvar_keylist(B) MD_TOKEN_COMMA md_emit_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_APPEND, B, C, F); +//@@} md_emit_namelist(A) ::= md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary("emit_namelist", MD_AST_NODE_TYPE_EMIT, B); @@ -829,29 +829,29 @@ md_emitp_lashed(A) ::= MD_TOKEN_EMITP(O) A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED, B, C); } -//md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_WRITE, B, F); -//} -//md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN -// MD_TOKEN_COMMA md_emitp_lashed_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_WRITE, B, C, F); -//} +//@@md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_WRITE, B, F); +//@@} +//@@md_emitp_lashed_write(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN +//@@ MD_TOKEN_COMMA md_emitp_lashed_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_WRITE, B, C, F); +//@@} -//md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_APPEND, B, F); -//} -//md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN -// MD_TOKEN_COMMA md_emitp_lashed_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_APPEND, B, C, F); -//} +//@@md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN. +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_APPEND, B, F); +//@@} +//@@md_emitp_lashed_append(A) ::= MD_TOKEN_EMITP(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_LPAREN md_emitp_lashed_keylists(B) MD_TOKEN_RPAREN +//@@ MD_TOKEN_COMMA md_emitp_lashed_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMITP_LASHED_APPEND, B, C, F); +//@@} md_emitp_lashed_keylists(A) ::= md_oosvar_keylist(B). { A = mlr_dsl_ast_node_alloc_unary("lashed_keylists", MD_AST_NODE_TYPE_EMITP_LASHED, B); @@ -880,29 +880,29 @@ md_emit_lashed(A) ::= MD_TOKEN_EMIT(O) A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED, B, C); } -//md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_WRITE, B, F); -//} -//md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN -// MD_TOKEN_COMMA md_emit_lashed_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_WRITE, B, C, F); -//} +//@@md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_WRITE, B, F); +//@@} +//@@md_emit_lashed_write(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN +//@@ MD_TOKEN_COMMA md_emit_lashed_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_WRITE, B, C, F); +//@@} -//md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. -//{ -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_APPEND, B, F); -//} -//md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA -// MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN -// MD_TOKEN_COMMA md_emit_lashed_namelist(C). -//{ -// A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_APPEND, B, C, F); -//} +//@@md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN. +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_APPEND, B, F); +//@@} +//@@md_emit_lashed_append(A) ::= MD_TOKEN_EMIT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA +//@@ MD_TOKEN_LPAREN md_emit_lashed_keylists(B) MD_TOKEN_RPAREN +//@@ MD_TOKEN_COMMA md_emit_lashed_namelist(C). +//@@{ +//@@ A = mlr_dsl_ast_node_alloc_ternary(O->text, MD_AST_NODE_TYPE_EMIT_LASHED_APPEND, B, C, F); +//@@} md_emit_lashed_keylists(A) ::= md_oosvar_keylist(B). { A = mlr_dsl_ast_node_alloc_unary("lashed_keylists", MD_AST_NODE_TYPE_EMIT_LASHED, B); @@ -925,12 +925,12 @@ md_dump(A) ::= MD_TOKEN_DUMP(O). { md_edump(A) ::= MD_TOKEN_EDUMP(O). { A = mlr_dsl_ast_node_alloc_zary(O->text, MD_AST_NODE_TYPE_EDUMP); } -//md_dump_write(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_GT md_rhs(B). { -// A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_DUMP_WRITE, B); -//} -//md_dump_append(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_RSH md_rhs(B). { -// A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_DUMP_APPEND, B); -//} +//@@md_dump_write(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_GT md_rhs(B). { +//@@ A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_DUMP_WRITE, B); +//@@} +//@@md_dump_append(A) ::= MD_TOKEN_DUMP(O) MD_TOKEN_BITWISE_RSH md_rhs(B). { +//@@ A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_DUMP_APPEND, B); +//@@} md_print(A) ::= MD_TOKEN_PRINT(O) md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_PRINT, B); @@ -938,12 +938,12 @@ md_print(A) ::= MD_TOKEN_PRINT(O) md_rhs(B). { md_eprint(A) ::= MD_TOKEN_EPRINT(O) md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EPRINT, B); } -//md_print_write(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT_WRITE, C, F); -//} -//md_print_append(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT_APPEND, C, F); -//} +//@@md_print_write(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT_WRITE, C, F); +//@@} +//@@md_print_append(A) ::= MD_TOKEN_PRINT(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINT_APPEND, C, F); +//@@} md_printn(A) ::= MD_TOKEN_PRINTN(O) md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_PRINTN, B); @@ -951,12 +951,12 @@ md_printn(A) ::= MD_TOKEN_PRINTN(O) md_rhs(B). { md_eprintn(A) ::= MD_TOKEN_EPRINTN(O) md_rhs(B). { A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_EPRINTN, B); } -//md_printn_write(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN_WRITE, C, F); -//} -//md_printn_append(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { -// A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN_APPEND, C, F); -//} +//@@md_printn_write(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_GT md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN_WRITE, C, F); +//@@} +//@@md_printn_append(A) ::= MD_TOKEN_PRINTN(O) MD_TOKEN_BITWISE_RSH md_rhs(F) MD_TOKEN_COMMA md_rhs(C). { +//@@ A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_PRINTN_APPEND, C, F); +//@@} // ================================================================ // Begin RHS precedence chain diff --git a/c/dsls/mlr_dsl_wrapper.c b/c/dsls/mlr_dsl_wrapper.c index 227f5c3d3..3d7eb2747 100644 --- a/c/dsls/mlr_dsl_wrapper.c +++ b/c/dsls/mlr_dsl_wrapper.c @@ -22,6 +22,9 @@ void mlr_dsl_lemon_parser_free( void *pvparser, /* The parser to be deleted */ void (*freeProc)(void*)); /* Function used to reclaim memory */ +// xxx temp +void mlr_dsl_ParseTrace(FILE *TraceFILE, char *zTracePrompt); + // ---------------------------------------------------------------- // http://flex.sourceforge.net/manual/Init-and-Destroy-Functions.html // http://flex.sourceforge.net/manual/Extra-Data.html @@ -31,6 +34,7 @@ static mlr_dsl_ast_t* mlr_dsl_parse_inner(yyscan_t scanner, void* pvparser, mlr_ int lex_code; int parse_code; mlr_dsl_ast_t* past = mlr_dsl_ast_alloc(); + //////mlr_dsl_ParseTrace(stdout, "[DSLTRACE]"); do { lex_code = mlr_dsl_lexer_lex(scanner); mlr_dsl_ast_node_t* plexed_node = *ppnode; diff --git a/c/todo.txt b/c/todo.txt index 9638a6b7d..419a6698e 100644 --- a/c/todo.txt +++ b/c/todo.txt @@ -17,7 +17,17 @@ TOP OF LIST: ! go through lmag article & clarify all unclears +! undo dsls/M*g gcc -g + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +! lemon boundary issue: + - bisect on #rules + - put #ifdef in .y file + - NDEBUG + - asan (any 2nd opinion from valgrind) + - https://github.com/martinmroz/lemon + - hook in ParseTrace from cliopt + * xxxes * valgrinds * check mlh's