lemon-boundary debug iterate

This commit is contained in:
John Kerl 2016-07-12 08:42:40 -04:00
parent d63c32d404
commit aa4bf75c36
6 changed files with 267 additions and 223 deletions

View file

@ -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

View file

@ -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

View file

@ -4,6 +4,7 @@
/* First off, code is include which follows the "include" declaration
** in the input file. */
#include <stdio.h>
#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
&& yyruleno<sizeof(yyRuleName)/sizeof(yyRuleName[0])) {
@ -462,7 +472,9 @@ static void yy_reduce(
}
#endif /* NDEBUG */
//printf("-- %s %d (%d)\n", __FILE__, __LINE__, yyruleno);
switch (yyruleno) {
//printf("-- %s %d\n", __FILE__, __LINE__);
/* Beginning here are the reduction cases. A typical example
** follows:
** case 0:
@ -472,16 +484,24 @@ static void yy_reduce(
** break;
*/
%%
//printf("-- %s %d\n", __FILE__, __LINE__);
};
//printf("-- %s %d\n", __FILE__, __LINE__);
yygoto = yyRuleInfo[yyruleno].lhs;
//printf("-- %s %d\n", __FILE__, __LINE__);
yysize = yyRuleInfo[yyruleno].nrhs;
//printf("-- %s %d\n", __FILE__, __LINE__);
pparser->yyidx -= 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__);
}
/*

View file

@ -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

View file

@ -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;

View file

@ -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