put_dsl -> mlr_dsl renames

This commit is contained in:
John Kerl 2016-01-12 22:08:35 -05:00
parent 120875c8d1
commit 4f6f03ea80
16 changed files with 206 additions and 210 deletions

View file

@ -16,7 +16,7 @@ mlr_LDADD= \
mapping/libmapping.la \
output/liboutput.la \
lib/libmlr.la \
dsls/libpdsl.la \
dsls/libdsl.la \
-lm
# Other executable variants

View file

@ -30,7 +30,7 @@ CCOPT=$(CC) $(CFLAGS) $(IFLAGS) $(WFLAGS) -O3
CCDEBUG=$(CC) -g $(CFLAGS) $(IFLAGS) $(WFLAGS)
# ----------------------------------------------------------------
# Miller source except put-DSL
# Miller source except DSL
NON_DSL_SRCS = \
*.c \
cli/*.c \
@ -41,11 +41,11 @@ NON_DSL_SRCS = \
mapping/*.c \
output/*.c
# put-DSL
PDSL_OBJS = \
./dsls/put_dsl_parse.o \
./dsls/put_dsl_lexer.o \
./dsls/put_dsl_wrapper.o
# DSL
DSL_OBJS = \
./dsls/mlr_dsl_parse.o \
./dsls/mlr_dsl_lexer.o \
./dsls/mlr_dsl_wrapper.o
# Unit-test code
TEST_ARGPARSE_SRCS = \
@ -193,21 +193,21 @@ tags: .always
ctags -R .
mlr: .always dsls
$(CCOPT) $(NON_DSL_SRCS) $(PDSL_OBJS) $(LFLAGS) -o mlr
$(CCOPT) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlr
mlr.static: .always dsls
$(CCOPT) -static $(NON_DSL_SRCS) $(PDSL_OBJS) $(LFLAGS) -o mlr.static
$(CCOPT) -static $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlr.static
dsls: .always
make -C dsls -f Makefile.no-autoconfig put_dsl_parse.o
make -C dsls -f Makefile.no-autoconfig put_dsl_lexer.o
make -C dsls -f Makefile.no-autoconfig put_dsl_wrapper.o
make -C dsls -f Makefile.no-autoconfig mlr_dsl_parse.o
make -C dsls -f Makefile.no-autoconfig mlr_dsl_lexer.o
make -C dsls -f Makefile.no-autoconfig mlr_dsl_wrapper.o
# ----------------------------------------------------------------
# Other executable variants
# Debug version
mlrg: .always dsls
$(CCDEBUG) $(NON_DSL_SRCS) $(PDSL_OBJS) $(LFLAGS) -o mlrg
$(CCDEBUG) $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrg
# Profile version. Usage:
# * make mlrp
@ -215,7 +215,7 @@ mlrg: .always dsls
# * gprof mlrp gmon.out > myfile.txt
# Note: works on Linux; not on OSX.
mlrp: .always dsls
$(CCDEBUG) -g -pg $(NON_DSL_SRCS) $(PDSL_OBJS) $(LFLAGS) -o mlrp
$(CCDEBUG) -g -pg $(NON_DSL_SRCS) $(DSL_OBJS) $(LFLAGS) -o mlrp
# ================================================================
tests: unit-test reg-test

View file

@ -35,7 +35,7 @@ mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_binary(char* text, int type,
mlr_dsl_ast_node_t* mlr_dsl_ast_node_alloc_ternary(char* text, int type,
mlr_dsl_ast_node_t* pa, mlr_dsl_ast_node_t* pb, mlr_dsl_ast_node_t* pc);
// See comments in put_dsl_parse.y for this seemingly awkward syntax wherein
// See comments in mlr_dsl_parse.y for this seemingly awkward syntax wherein
// we change the function name after having set it up. This is a consequence of
// bottom-up DSL parsing.
mlr_dsl_ast_node_t* mlr_dsl_ast_node_append_arg(

View file

@ -21,7 +21,7 @@
// have their ownership transferred to the output mlrval.
//
// This is because the primary purpose of mlrvals is for evaluation of abstract
// syntax trees defined by the DSLs for put and filter. Example AST:
// syntax trees defined by the DSL for put and filter. Example AST:
//
// $ mlr put -v '$z = $x . $y . "sum"' /dev/null
// = (operator):
@ -353,7 +353,7 @@ mv_t does_not_match_no_precomp_func(mv_t* pval1, mv_t* pval2);
mv_t matches_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb);
mv_t does_not_match_precomp_func(mv_t* pval1, regex_t* pregex, string_builder_t* psb);
// For filter/put DSLs:
// For filter/put DSL:
mv_t eq_op_func(mv_t* pval1, mv_t* pval2);
mv_t ne_op_func(mv_t* pval1, mv_t* pval2);
mv_t gt_op_func(mv_t* pval1, mv_t* pval2);

View file

@ -4,36 +4,36 @@ AM_CFLAGS= -std=gnu99
noinst_PROGRAMS= lemon
lemon_SOURCES= lemon.c
noinst_LTLIBRARIES= libpdsl.la
noinst_LTLIBRARIES= libdsl.la
# if we don't want to distribute the generated sources, move them to a nodist_libfoo_la_SOURCES variable
libpdsl_la_SOURCES= put_dsl_lexer.c put_dsl_lexer.h put_dsl_parse.c put_dsl_parse.h put_dsl_wrapper.c put_dsl_wrapper.h
CLEANFILES= put_dsl_lexer.c put_dsl_lexer.h put_dsl_parse.c put_dsl_parse.h put_dsl_parse.out
EXTRA_DIST= lempar.c put_dsl_lexer.l put_dsl_parse.y
libdsl_la_SOURCES= mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_wrapper.c mlr_dsl_wrapper.h
CLEANFILES= mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_parse.out
EXTRA_DIST= lempar.c mlr_dsl_lexer.l mlr_dsl_parse.y
put_dsl_wrapper.c: put_dsl_lexer.h
put_dsl_parse.h: put_dsl_parse.c
put_dsl_parse.c: put_dsl_parse.y lempar.c lemon
./lemon put_dsl_parse.y
mlr_dsl_wrapper.c: mlr_dsl_lexer.h
mlr_dsl_parse.h: mlr_dsl_parse.c
mlr_dsl_parse.c: mlr_dsl_parse.y lempar.c lemon
./lemon mlr_dsl_parse.y
# lemon does not re-generate the file if it exists and is the same
# this causes problems with the dependency above
touch put_dsl_parse.h
mv put_dsl_parse.c put_dsl_parse.c.tmp
touch mlr_dsl_parse.h
mv mlr_dsl_parse.c mlr_dsl_parse.c.tmp
sed \
-e 's/ParseTrace/put_dsl_ParseTrace/g' \
-e 's/ParseTokenName/put_dsl_ParseTokenName/g' \
-e 's/lemon_parser_alloc/put_dsl_lemon_parser_alloc/g' \
-e 's/lemon_parser_free/put_dsl_lemon_parser_free/g' \
-e 's/lemon_parser_parse_token/put_dsl_lemon_parser_parse_token/g' \
-e 's/yy_destructor/put_dsl_yy_destructor/g' \
put_dsl_parse.c.tmp > put_dsl_parse.c
rm -f put_dsl_parse.c.tmp
-e 's/ParseTrace/mlr_dsl_ParseTrace/g' \
-e 's/ParseTokenName/mlr_dsl_ParseTokenName/g' \
-e 's/lemon_parser_alloc/mlr_dsl_lemon_parser_alloc/g' \
-e 's/lemon_parser_free/mlr_dsl_lemon_parser_free/g' \
-e 's/lemon_parser_parse_token/mlr_dsl_lemon_parser_parse_token/g' \
-e 's/yy_destructor/mlr_dsl_yy_destructor/g' \
mlr_dsl_parse.c.tmp > mlr_dsl_parse.c
rm -f mlr_dsl_parse.c.tmp
put_dsl_lexer.h: put_dsl_lexer.c
put_dsl_lexer.c: put_dsl_lexer.l put_dsl_parse.h
flex --prefix=put_dsl_lexer_ --outfile=put_dsl_lexer.c --header-file=put_dsl_lexer.h ${srcdir}/put_dsl_lexer.l
mlr_dsl_lexer.h: mlr_dsl_lexer.c
mlr_dsl_lexer.c: mlr_dsl_lexer.l mlr_dsl_parse.h
flex --prefix=mlr_dsl_lexer_ --outfile=mlr_dsl_lexer.c --header-file=mlr_dsl_lexer.h ${srcdir}/mlr_dsl_lexer.l
distclean-local:
if [ "${srcdir}" != "." ]; then \
rm -f lempar.c put_dsl_parse.y; \
rm -f lempar.c mlr_dsl_parse.y; \
fi

View file

@ -11,26 +11,26 @@ CFLAGS=-I.. -O3
#CFLAGS=-I.. -g
# ----------------------------------------------------------------
top: put_dsl_lexer.o put_dsl_parse.o put_dsl_wrapper.o
top: mlr_dsl_lexer.o mlr_dsl_parse.o mlr_dsl_wrapper.o
# ----------------------------------------------------------------
put_dsl_wrapper.o: put_dsl_wrapper.c put_dsl_wrapper.h put_dsl_parse.h
$(CC) -Wall $(CFLAGS) -c -std=gnu99 put_dsl_wrapper.c
mlr_dsl_wrapper.o: mlr_dsl_wrapper.c mlr_dsl_wrapper.h mlr_dsl_parse.h
$(CC) -Wall $(CFLAGS) -c -std=gnu99 mlr_dsl_wrapper.c
put_dsl_parse.o: put_dsl_parse.c put_dsl_parse.h
$(CC) $(CFLAGS) -c -std=gnu99 put_dsl_parse.c
put_dsl_parse.c put_dsl_parse.h: put_dsl_parse.y lemon
./lemon put_dsl_parse.y
mv put_dsl_parse.c put_dsl_parse.c.tmp
mlr_dsl_parse.o: mlr_dsl_parse.c mlr_dsl_parse.h
$(CC) $(CFLAGS) -c -std=gnu99 mlr_dsl_parse.c
mlr_dsl_parse.c mlr_dsl_parse.h: mlr_dsl_parse.y lemon
./lemon mlr_dsl_parse.y
mv mlr_dsl_parse.c mlr_dsl_parse.c.tmp
sed \
-e 's/ParseTrace/put_dsl_ParseTrace/g' \
-e 's/ParseTokenName/put_dsl_ParseTokenName/g' \
-e 's/lemon_parser_alloc/put_dsl_lemon_parser_alloc/g' \
-e 's/lemon_parser_free/put_dsl_lemon_parser_free/g' \
-e 's/lemon_parser_parse_token/put_dsl_lemon_parser_parse_token/g' \
-e 's/yy_destructor/put_dsl_yy_destructor/g' \
put_dsl_parse.c.tmp > put_dsl_parse.c
rm -f put_dsl_parse.c.tmp
-e 's/ParseTrace/mlr_dsl_ParseTrace/g' \
-e 's/ParseTokenName/mlr_dsl_ParseTokenName/g' \
-e 's/lemon_parser_alloc/mlr_dsl_lemon_parser_alloc/g' \
-e 's/lemon_parser_free/mlr_dsl_lemon_parser_free/g' \
-e 's/lemon_parser_parse_token/mlr_dsl_lemon_parser_parse_token/g' \
-e 's/yy_destructor/mlr_dsl_yy_destructor/g' \
mlr_dsl_parse.c.tmp > mlr_dsl_parse.c
rm -f mlr_dsl_parse.c.tmp
# muldef:
# ParseTrace
@ -40,10 +40,10 @@ put_dsl_parse.c put_dsl_parse.h: put_dsl_parse.y lemon
# lemon_parser_parse_token
# yy_destructor
put_dsl_lexer.o: put_dsl_lexer.c put_dsl_lexer.h put_dsl_parse.h
$(CC) $(CFLAGS) -c -std=gnu99 put_dsl_lexer.c
put_dsl_lexer.c put_dsl_lexer.h: put_dsl_lexer.l
flex --prefix=put_dsl_lexer_ --outfile=put_dsl_lexer.c --header-file=put_dsl_lexer.h put_dsl_lexer.l
mlr_dsl_lexer.o: mlr_dsl_lexer.c mlr_dsl_lexer.h mlr_dsl_parse.h
$(CC) $(CFLAGS) -c -std=gnu99 mlr_dsl_lexer.c
mlr_dsl_lexer.c mlr_dsl_lexer.h: mlr_dsl_lexer.l
flex --prefix=mlr_dsl_lexer_ --outfile=mlr_dsl_lexer.c --header-file=mlr_dsl_lexer.h mlr_dsl_lexer.l
# ----------------------------------------------------------------
lemon: lemon.c lempar.c
@ -52,8 +52,8 @@ lemon: lemon.c lempar.c
# ----------------------------------------------------------------
clean:
rm -f *.o
rm -f put_dsl_parse.c put_dsl_parse.h put_dsl_parse.out
rm -f put_dsl_lexer.c put_dsl_lexer.h
rm -f mlr_dsl_parse.c mlr_dsl_parse.h mlr_dsl_parse.out
rm -f mlr_dsl_lexer.c mlr_dsl_lexer.h
rm -f lemon
.always:

View file

@ -1,7 +1,7 @@
%{
#include "stdio.h" // for fileno() prototype
#include "string.h" // for strdup() prototype
#include "put_dsl_parse.h"
#include "mlr_dsl_parse.h"
#include "../containers/mlr_dsl_ast.h"
// http://flex.sourceforge.net/manual/Extra-Data.html
%}
@ -13,152 +13,152 @@
%%
";" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return PUT_DSL_SEMICOLON;
return MLR_DSL_SEMICOLON;
}
"=" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_ASSIGN;
return MLR_DSL_ASSIGN;
}
"?" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_QUESTION_MARK;
return MLR_DSL_QUESTION_MARK;
}
":" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_COLON;
return MLR_DSL_COLON;
}
"||" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_LOGICAL_OR;
return MLR_DSL_LOGICAL_OR;
}
"^^" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_LOGICAL_XOR;
return MLR_DSL_LOGICAL_XOR;
}
"&&" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_LOGICAL_AND;
return MLR_DSL_LOGICAL_AND;
}
"=~" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_MATCHES;
return MLR_DSL_MATCHES;
}
"!=~" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_DOES_NOT_MATCH;
return MLR_DSL_DOES_NOT_MATCH;
}
"==" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_EQ;
return MLR_DSL_EQ;
}
"!=" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_NE;
return MLR_DSL_NE;
}
">" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_GT;
return MLR_DSL_GT;
}
">=" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_GE;
return MLR_DSL_GE;
}
"<" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_LT;
return MLR_DSL_LT;
}
"<=" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_LE;
return MLR_DSL_LE;
}
"|" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_BITWISE_OR;
return MLR_DSL_BITWISE_OR;
}
"^" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_BITWISE_XOR;
return MLR_DSL_BITWISE_XOR;
}
"&" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_BITWISE_AND;
return MLR_DSL_BITWISE_AND;
}
"<<" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_BITWISE_LSH;
return MLR_DSL_BITWISE_LSH;
}
">>" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_BITWISE_RSH;
return MLR_DSL_BITWISE_RSH;
}
"+" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_PLUS;
return MLR_DSL_PLUS;
}
"-" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_MINUS;
return MLR_DSL_MINUS;
}
"\." {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_DOT;
return MLR_DSL_DOT;
}
"*" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_TIMES;
return MLR_DSL_TIMES;
}
"/" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_DIVIDE;
return MLR_DSL_DIVIDE;
}
"//" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_INT_DIVIDE;
return MLR_DSL_INT_DIVIDE;
}
"%" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_MOD;
return MLR_DSL_MOD;
}
"!" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_LOGICAL_NOT;
return MLR_DSL_LOGICAL_NOT;
}
"~" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_BITWISE_NOT;
return MLR_DSL_BITWISE_NOT;
}
"**" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return PUT_DSL_POW;
return MLR_DSL_POW;
}
\$[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.
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FIELD_NAME);
return PUT_DSL_FIELD_NAME;
return MLR_DSL_FIELD_NAME;
}
\$\{([^\}]|\\.)*\} {
// Note: the parser depends on the dollar sign being here. If this is changed,
// that needs to be changed as well.
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FIELD_NAME);
return PUT_DSL_BRACKETED_FIELD_NAME;
return MLR_DSL_BRACKETED_FIELD_NAME;
}
[0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+|[0-9]+[eE][0-9]+|[0-9]+[eE]-[0-9]+|[0-9]+\.[0-9]*[eE][0-9]+|[0-9]+\.[0-9]*[eE]-[0-9]+|[0-9]*\.[0-9]+[eE][0-9]+|[0-9]*\.[0-9]+[eE]-[0-9]+ {
@ -173,69 +173,69 @@
// .2e3
// .2e-3 1.e-3
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_LITERAL);
return PUT_DSL_NUMBER;
return MLR_DSL_NUMBER;
}
0x[0-9a-fA-F]+ {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_LITERAL);
return PUT_DSL_NUMBER;
return MLR_DSL_NUMBER;
}
\"([^\\\"]|\\.)*\" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_LITERAL);
return PUT_DSL_STRING;
return MLR_DSL_STRING;
}
\"([^\\\"]|\\.)*\"\i {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_REGEXI);
return PUT_DSL_REGEXI;
return MLR_DSL_REGEXI;
}
"NF" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return PUT_DSL_CONTEXT_VARIABLE;
return MLR_DSL_CONTEXT_VARIABLE;
}
"NR" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return PUT_DSL_CONTEXT_VARIABLE;
return MLR_DSL_CONTEXT_VARIABLE;
}
"FNR" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return PUT_DSL_CONTEXT_VARIABLE;
return MLR_DSL_CONTEXT_VARIABLE;
}
"FILENAME" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return PUT_DSL_CONTEXT_VARIABLE;
return MLR_DSL_CONTEXT_VARIABLE;
}
"FILENUM" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return PUT_DSL_CONTEXT_VARIABLE;
return MLR_DSL_CONTEXT_VARIABLE;
}
"PI" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return PUT_DSL_CONTEXT_VARIABLE;
return MLR_DSL_CONTEXT_VARIABLE;
}
"E" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return PUT_DSL_CONTEXT_VARIABLE;
return MLR_DSL_CONTEXT_VARIABLE;
}
[a-zA-Z_][a-zA-Z_0-9]+ {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME);
return PUT_DSL_FCN_NAME;
return MLR_DSL_FCN_NAME;
}
"(" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return PUT_DSL_LPAREN;
return MLR_DSL_LPAREN;
}
")" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return PUT_DSL_RPAREN;
return MLR_DSL_RPAREN;
}
"," {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return PUT_DSL_COMMA;
return MLR_DSL_COMMA;
}
[ \t\r\n] { }

View file

@ -37,14 +37,14 @@
fprintf(stderr, "Syntax error!\n");
}
pdsl_body ::= pdsl_statements. // For scan-from-string
mlr_dsl_body ::= mlr_dsl_statements. // For scan-from-string
// ----------------------------------------------------------------
pdsl_statements ::= pdsl_statement.
pdsl_statements ::= pdsl_statement PUT_DSL_SEMICOLON pdsl_statements.
mlr_dsl_statements ::= mlr_dsl_statement.
mlr_dsl_statements ::= mlr_dsl_statement MLR_DSL_SEMICOLON mlr_dsl_statements.
pdsl_statement ::= pdsl_assignment.
pdsl_statement ::= pdsl_filter.
mlr_dsl_statement ::= mlr_dsl_assignment.
mlr_dsl_statement ::= mlr_dsl_filter.
// ================================================================
// In the grammar provided to the user, field names are of the form "$x". But
@ -52,7 +52,7 @@ pdsl_statement ::= pdsl_filter.
// lexer to give us field names with leading "$" so we can confidently strip it
// off here.
pdsl_assignment(A) ::= PUT_DSL_FIELD_NAME(B) PUT_DSL_ASSIGN(O) pdsl_ternary(C). {
mlr_dsl_assignment(A) ::= MLR_DSL_FIELD_NAME(B) MLR_DSL_ASSIGN(O) mlr_dsl_ternary(C). {
// Replace "$field.name" with just "field.name"
char* dollar_name = B->text;
char* no_dollar_name = &dollar_name[1];
@ -61,7 +61,7 @@ pdsl_assignment(A) ::= PUT_DSL_FIELD_NAME(B) PUT_DSL_ASSIGN(O) pdsl_ternary(C).
sllv_add(pasts, A);
}
pdsl_assignment(A) ::= PUT_DSL_BRACKETED_FIELD_NAME(B) PUT_DSL_ASSIGN(O) pdsl_ternary(C). {
mlr_dsl_assignment(A) ::= MLR_DSL_BRACKETED_FIELD_NAME(B) MLR_DSL_ASSIGN(O) mlr_dsl_ternary(C). {
// Replace "${field.name}" with just "field.name"
char* dollar_name = B->text;
char* no_dollar_name = &dollar_name[2];
@ -74,166 +74,166 @@ pdsl_assignment(A) ::= PUT_DSL_BRACKETED_FIELD_NAME(B) PUT_DSL_ASSIGN(O) pdsl_t
}
// ================================================================
pdsl_filter(A) ::= pdsl_ternary(B). {
mlr_dsl_filter(A) ::= mlr_dsl_ternary(B). {
A = B;
sllv_add(pasts, A);
}
// ================================================================
pdsl_ternary(A) ::= pdsl_logical_or_term(B) PUT_DSL_QUESTION_MARK pdsl_ternary(C) PUT_DSL_COLON pdsl_ternary(D). {
mlr_dsl_ternary(A) ::= mlr_dsl_logical_or_term(B) MLR_DSL_QUESTION_MARK mlr_dsl_ternary(C) MLR_DSL_COLON mlr_dsl_ternary(D). {
A = mlr_dsl_ast_node_alloc_ternary("? :", MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C, D);
}
pdsl_ternary(A) ::= pdsl_logical_or_term(B). {
mlr_dsl_ternary(A) ::= mlr_dsl_logical_or_term(B). {
A = B;
}
// ================================================================
pdsl_logical_or_term(A) ::= pdsl_logical_xor_term(B). {
mlr_dsl_logical_or_term(A) ::= mlr_dsl_logical_xor_term(B). {
A = B;
}
pdsl_logical_or_term(A) ::= pdsl_logical_or_term(B) PUT_DSL_LOGICAL_OR(O) pdsl_logical_xor_term(C). {
mlr_dsl_logical_or_term(A) ::= mlr_dsl_logical_or_term(B) MLR_DSL_LOGICAL_OR(O) mlr_dsl_logical_xor_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
pdsl_logical_xor_term(A) ::= pdsl_logical_and_term(B). {
mlr_dsl_logical_xor_term(A) ::= mlr_dsl_logical_and_term(B). {
A = B;
}
pdsl_logical_xor_term(A) ::= pdsl_logical_xor_term(B) PUT_DSL_LOGICAL_XOR(O) pdsl_logical_and_term(C). {
mlr_dsl_logical_xor_term(A) ::= mlr_dsl_logical_xor_term(B) MLR_DSL_LOGICAL_XOR(O) mlr_dsl_logical_and_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
pdsl_logical_and_term(A) ::= pdsl_eqne_term(B). {
mlr_dsl_logical_and_term(A) ::= mlr_dsl_eqne_term(B). {
A = B;
}
pdsl_logical_and_term(A) ::= pdsl_logical_and_term(B) PUT_DSL_LOGICAL_AND(O) pdsl_eqne_term(C). {
mlr_dsl_logical_and_term(A) ::= mlr_dsl_logical_and_term(B) MLR_DSL_LOGICAL_AND(O) mlr_dsl_eqne_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
pdsl_eqne_term(A) ::= pdsl_cmp_term(B). {
mlr_dsl_eqne_term(A) ::= mlr_dsl_cmp_term(B). {
A = B;
}
pdsl_eqne_term(A) ::= pdsl_eqne_term(B) PUT_DSL_MATCHES(O) pdsl_cmp_term(C). {
mlr_dsl_eqne_term(A) ::= mlr_dsl_eqne_term(B) MLR_DSL_MATCHES(O) mlr_dsl_cmp_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_eqne_term(A) ::= pdsl_eqne_term(B) PUT_DSL_DOES_NOT_MATCH(O) pdsl_cmp_term(C). {
mlr_dsl_eqne_term(A) ::= mlr_dsl_eqne_term(B) MLR_DSL_DOES_NOT_MATCH(O) mlr_dsl_cmp_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_eqne_term(A) ::= pdsl_eqne_term(B) PUT_DSL_EQ(O) pdsl_cmp_term(C). {
mlr_dsl_eqne_term(A) ::= mlr_dsl_eqne_term(B) MLR_DSL_EQ(O) mlr_dsl_cmp_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_eqne_term(A) ::= pdsl_eqne_term(B) PUT_DSL_NE(O) pdsl_cmp_term(C). {
mlr_dsl_eqne_term(A) ::= mlr_dsl_eqne_term(B) MLR_DSL_NE(O) mlr_dsl_cmp_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
pdsl_cmp_term(A) ::= pdsl_bitwise_or_term(B). {
mlr_dsl_cmp_term(A) ::= mlr_dsl_bitwise_or_term(B). {
A = B;
}
pdsl_cmp_term(A) ::= pdsl_cmp_term(B) PUT_DSL_GT(O) pdsl_bitwise_or_term(C). {
mlr_dsl_cmp_term(A) ::= mlr_dsl_cmp_term(B) MLR_DSL_GT(O) mlr_dsl_bitwise_or_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_cmp_term(A) ::= pdsl_cmp_term(B) PUT_DSL_GE(O) pdsl_bitwise_or_term(C). {
mlr_dsl_cmp_term(A) ::= mlr_dsl_cmp_term(B) MLR_DSL_GE(O) mlr_dsl_bitwise_or_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_cmp_term(A) ::= pdsl_cmp_term(B) PUT_DSL_LT(O) pdsl_bitwise_or_term(C). {
mlr_dsl_cmp_term(A) ::= mlr_dsl_cmp_term(B) MLR_DSL_LT(O) mlr_dsl_bitwise_or_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_cmp_term(A) ::= pdsl_cmp_term(B) PUT_DSL_LE(O) pdsl_bitwise_or_term(C). {
mlr_dsl_cmp_term(A) ::= mlr_dsl_cmp_term(B) MLR_DSL_LE(O) mlr_dsl_bitwise_or_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
pdsl_bitwise_or_term(A) ::= pdsl_bitwise_xor_term(B). {
mlr_dsl_bitwise_or_term(A) ::= mlr_dsl_bitwise_xor_term(B). {
A = B;
}
pdsl_bitwise_or_term(A) ::= pdsl_bitwise_or_term(B) PUT_DSL_BITWISE_OR(O) pdsl_bitwise_xor_term(C). {
mlr_dsl_bitwise_or_term(A) ::= mlr_dsl_bitwise_or_term(B) MLR_DSL_BITWISE_OR(O) mlr_dsl_bitwise_xor_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
pdsl_bitwise_xor_term(A) ::= pdsl_bitwise_and_term(B). {
mlr_dsl_bitwise_xor_term(A) ::= mlr_dsl_bitwise_and_term(B). {
A = B;
}
pdsl_bitwise_xor_term(A) ::= pdsl_bitwise_xor_term(B) PUT_DSL_BITWISE_XOR(O) pdsl_bitwise_and_term(C). {
mlr_dsl_bitwise_xor_term(A) ::= mlr_dsl_bitwise_xor_term(B) MLR_DSL_BITWISE_XOR(O) mlr_dsl_bitwise_and_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
pdsl_bitwise_and_term(A) ::= pdsl_bitwise_shift_term(B). {
mlr_dsl_bitwise_and_term(A) ::= mlr_dsl_bitwise_shift_term(B). {
A = B;
}
pdsl_bitwise_and_term(A) ::= pdsl_bitwise_and_term(B) PUT_DSL_BITWISE_AND(O) pdsl_bitwise_shift_term(C). {
mlr_dsl_bitwise_and_term(A) ::= mlr_dsl_bitwise_and_term(B) MLR_DSL_BITWISE_AND(O) mlr_dsl_bitwise_shift_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
pdsl_bitwise_shift_term(A) ::= pdsl_addsubdot_term(B). {
mlr_dsl_bitwise_shift_term(A) ::= mlr_dsl_addsubdot_term(B). {
A = B;
}
pdsl_bitwise_shift_term(A) ::= pdsl_bitwise_shift_term(B) PUT_DSL_BITWISE_LSH(O) pdsl_addsubdot_term(C). {
mlr_dsl_bitwise_shift_term(A) ::= mlr_dsl_bitwise_shift_term(B) MLR_DSL_BITWISE_LSH(O) mlr_dsl_addsubdot_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_bitwise_shift_term(A) ::= pdsl_bitwise_shift_term(B) PUT_DSL_BITWISE_RSH(O) pdsl_addsubdot_term(C). {
mlr_dsl_bitwise_shift_term(A) ::= mlr_dsl_bitwise_shift_term(B) MLR_DSL_BITWISE_RSH(O) mlr_dsl_addsubdot_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
pdsl_addsubdot_term(A) ::= pdsl_muldiv_term(B). {
mlr_dsl_addsubdot_term(A) ::= mlr_dsl_muldiv_term(B). {
A = B;
}
pdsl_addsubdot_term(A) ::= pdsl_addsubdot_term(B) PUT_DSL_PLUS(O) pdsl_muldiv_term(C). {
mlr_dsl_addsubdot_term(A) ::= mlr_dsl_addsubdot_term(B) MLR_DSL_PLUS(O) mlr_dsl_muldiv_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_addsubdot_term(A) ::= pdsl_addsubdot_term(B) PUT_DSL_MINUS(O) pdsl_muldiv_term(C). {
mlr_dsl_addsubdot_term(A) ::= mlr_dsl_addsubdot_term(B) MLR_DSL_MINUS(O) mlr_dsl_muldiv_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_addsubdot_term(A) ::= pdsl_addsubdot_term(B) PUT_DSL_DOT(O) pdsl_muldiv_term(C). {
mlr_dsl_addsubdot_term(A) ::= mlr_dsl_addsubdot_term(B) MLR_DSL_DOT(O) mlr_dsl_muldiv_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
pdsl_muldiv_term(A) ::= pdsl_unary_bitwise_op_term(B). {
mlr_dsl_muldiv_term(A) ::= mlr_dsl_unary_bitwise_op_term(B). {
A = B;
}
pdsl_muldiv_term(A) ::= pdsl_muldiv_term(B) PUT_DSL_TIMES(O) pdsl_unary_bitwise_op_term(C). {
mlr_dsl_muldiv_term(A) ::= mlr_dsl_muldiv_term(B) MLR_DSL_TIMES(O) mlr_dsl_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_muldiv_term(A) ::= pdsl_muldiv_term(B) PUT_DSL_DIVIDE(O) pdsl_unary_bitwise_op_term(C). {
mlr_dsl_muldiv_term(A) ::= mlr_dsl_muldiv_term(B) MLR_DSL_DIVIDE(O) mlr_dsl_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_muldiv_term(A) ::= pdsl_muldiv_term(B) PUT_DSL_INT_DIVIDE(O) pdsl_unary_bitwise_op_term(C). {
mlr_dsl_muldiv_term(A) ::= mlr_dsl_muldiv_term(B) MLR_DSL_INT_DIVIDE(O) mlr_dsl_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
pdsl_muldiv_term(A) ::= pdsl_muldiv_term(B) PUT_DSL_MOD(O) pdsl_unary_bitwise_op_term(C). {
mlr_dsl_muldiv_term(A) ::= mlr_dsl_muldiv_term(B) MLR_DSL_MOD(O) mlr_dsl_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
pdsl_unary_bitwise_op_term(A) ::= pdsl_pow_term(B). {
mlr_dsl_unary_bitwise_op_term(A) ::= mlr_dsl_pow_term(B). {
A = B;
}
pdsl_unary_bitwise_op_term(A) ::= PUT_DSL_PLUS(O) pdsl_unary_bitwise_op_term(C). {
mlr_dsl_unary_bitwise_op_term(A) ::= MLR_DSL_PLUS(O) mlr_dsl_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, C);
}
pdsl_unary_bitwise_op_term(A) ::= PUT_DSL_MINUS(O) pdsl_unary_bitwise_op_term(C). {
mlr_dsl_unary_bitwise_op_term(A) ::= MLR_DSL_MINUS(O) mlr_dsl_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, C);
}
pdsl_unary_bitwise_op_term(A) ::= PUT_DSL_LOGICAL_NOT(O) pdsl_unary_bitwise_op_term(C). {
mlr_dsl_unary_bitwise_op_term(A) ::= MLR_DSL_LOGICAL_NOT(O) mlr_dsl_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, C);
}
pdsl_unary_bitwise_op_term(A) ::= PUT_DSL_BITWISE_NOT(O) pdsl_unary_bitwise_op_term(C). {
mlr_dsl_unary_bitwise_op_term(A) ::= MLR_DSL_BITWISE_NOT(O) mlr_dsl_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, C);
}
// ----------------------------------------------------------------
pdsl_pow_term(A) ::= pdsl_atom_or_fcn(B). {
mlr_dsl_pow_term(A) ::= mlr_dsl_atom_or_fcn(B). {
A = B;
}
pdsl_pow_term(A) ::= pdsl_atom_or_fcn(B) PUT_DSL_POW(O) pdsl_pow_term(C). {
mlr_dsl_pow_term(A) ::= mlr_dsl_atom_or_fcn(B) MLR_DSL_POW(O) mlr_dsl_pow_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B, C);
}
@ -243,14 +243,14 @@ pdsl_pow_term(A) ::= pdsl_atom_or_fcn(B) PUT_DSL_POW(O) pdsl_pow_term(C). {
// within Miller internally, field names are of the form "x". We coded the
// lexer to give us field names with leading "$" so we can confidently strip it
// off here.
pdsl_atom_or_fcn(A) ::= PUT_DSL_FIELD_NAME(B). {
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_FIELD_NAME(B). {
// not:
// A = B;
char* dollar_name = B->text;
char* no_dollar_name = &dollar_name[1];
A = mlr_dsl_ast_node_alloc(no_dollar_name, B->type);
}
pdsl_atom_or_fcn(A) ::= PUT_DSL_BRACKETED_FIELD_NAME(B). {
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_BRACKETED_FIELD_NAME(B). {
// Replace "${field.name}" with just "field.name"
char* dollar_name = B->text;
char* no_dollar_name = &dollar_name[2];
@ -259,18 +259,18 @@ pdsl_atom_or_fcn(A) ::= PUT_DSL_BRACKETED_FIELD_NAME(B). {
no_dollar_name[len-1] = 0;
A = mlr_dsl_ast_node_alloc(no_dollar_name, B->type);
}
pdsl_atom_or_fcn(A) ::= PUT_DSL_NUMBER(B). {
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_NUMBER(B). {
A = B;
}
pdsl_atom_or_fcn(A) ::= PUT_DSL_STRING(B). {
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_STRING(B). {
char* input = B->text;
char* stripped = &input[1];
int len = strlen(input);
stripped[len-2] = 0;
A = mlr_dsl_ast_node_alloc(stripped, B->type);
}
pdsl_atom_or_fcn(A) ::= PUT_DSL_REGEXI(B). {
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_REGEXI(B). {
char* input = B->text;
char* stripped = &input[1];
int len = strlen(input);
@ -278,14 +278,14 @@ pdsl_atom_or_fcn(A) ::= PUT_DSL_REGEXI(B). {
A = mlr_dsl_ast_node_alloc(stripped, B->type);
}
pdsl_atom_or_fcn(A) ::= PUT_DSL_CONTEXT_VARIABLE(B). {
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_CONTEXT_VARIABLE(B). {
A = B;
}
pdsl_atom_or_fcn(A) ::= PUT_DSL_LPAREN pdsl_logical_or_term(B) PUT_DSL_RPAREN. {
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_LPAREN mlr_dsl_logical_or_term(B) MLR_DSL_RPAREN. {
A = B;
}
///pdsl_atom_or_fcn(A) ::= PUT_DSL_MINUS(O) pdsl_atom_or_fcn(B). {
///mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_MINUS(O) mlr_dsl_atom_or_fcn(B). {
///A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_OPERATOR, B);
///}
@ -296,17 +296,17 @@ pdsl_atom_or_fcn(A) ::= PUT_DSL_LPAREN pdsl_logical_or_term(B) PUT_DSL_RPAREN. {
// * On the "c" we append the next argument to get "anon(a,b,c)".
// * On the "f" we change the function name to get "f(a,b,c)".
pdsl_atom_or_fcn(A) ::= PUT_DSL_FCN_NAME(O) PUT_DSL_LPAREN pdsl_fcn_args(B) PUT_DSL_RPAREN. {
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_FCN_NAME(O) MLR_DSL_LPAREN mlr_dsl_fcn_args(B) MLR_DSL_RPAREN. {
A = mlr_dsl_ast_node_set_function_name(B, O->text);
}
// xxx need to invalidate "f(10,)" -- use some non-empty-args expr.
pdsl_fcn_args(A) ::= . {
mlr_dsl_fcn_args(A) ::= . {
A = mlr_dsl_ast_node_alloc_zary("anon", MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME);
}
pdsl_fcn_args(A) ::= pdsl_logical_or_term(B). {
mlr_dsl_fcn_args(A) ::= mlr_dsl_logical_or_term(B). {
A = mlr_dsl_ast_node_alloc_unary("anon", MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME, B);
}
pdsl_fcn_args(A) ::= pdsl_fcn_args(B) PUT_DSL_COMMA pdsl_logical_or_term(C). {
mlr_dsl_fcn_args(A) ::= mlr_dsl_fcn_args(B) MLR_DSL_COMMA mlr_dsl_logical_or_term(C). {
A = mlr_dsl_ast_node_append_arg(B, C);
}

View file

@ -1,24 +1,24 @@
#include <stdio.h>
#include <stdlib.h>
#include "put_dsl_wrapper.h"
#include "put_dsl_lexer.h"
#include "put_dsl_parse.h"
#include "mlr_dsl_wrapper.h"
#include "mlr_dsl_lexer.h"
#include "mlr_dsl_parse.h"
#include "../lib/mlrutil.h"
#include "../containers/mlr_dsl_ast.h"
#include "../containers/sllv.h"
// These prototypes are copied out manually from put_dsl_parse.c. With some
// These prototypes are copied out manually from mlr_dsl_parse.c. With some
// more work I could have Lemon autogenerate these prototypes into
// put_dsl_parse.h.
// mlr_dsl_parse.h.
void *put_dsl_lemon_parser_alloc(void *(*mallocProc)(size_t));
void *mlr_dsl_lemon_parser_alloc(void *(*mallocProc)(size_t));
int put_dsl_lemon_parser_parse_token(
int mlr_dsl_lemon_parser_parse_token(
void *pvparser, /* The parser */
int yymajor, /* The major token code number */
mlr_dsl_ast_node_t* yyminor, /* The value for the token */
sllv_t* pasts); /* Optional %extra_argument parameter */
void put_dsl_lemon_parser_free(
void mlr_dsl_lemon_parser_free(
void *pvparser, /* The parser to be deleted */
void (*freeProc)(void*)); /* Function used to reclaim memory */
@ -27,14 +27,14 @@ void put_dsl_lemon_parser_free(
// http://flex.sourceforge.net/manual/Extra-Data.html
// Returns linked list of mlr_dsl_ast_node_t*.
static sllv_t* put_dsl_parse_inner(yyscan_t scanner, void* pvparser, mlr_dsl_ast_node_t** ppnode) {
static sllv_t* mlr_dsl_parse_inner(yyscan_t scanner, void* pvparser, mlr_dsl_ast_node_t** ppnode) {
int lex_code;
int parse_code;
sllv_t* pasts = sllv_alloc();
do {
lex_code = put_dsl_lexer_lex(scanner);
lex_code = mlr_dsl_lexer_lex(scanner);
mlr_dsl_ast_node_t* plexed_node = *ppnode;
parse_code = put_dsl_lemon_parser_parse_token(pvparser, lex_code, plexed_node, pasts);
parse_code = mlr_dsl_lemon_parser_parse_token(pvparser, lex_code, plexed_node, pasts);
if (parse_code == 0)
return NULL;
} while (lex_code > 0);
@ -42,7 +42,7 @@ static sllv_t* put_dsl_parse_inner(yyscan_t scanner, void* pvparser, mlr_dsl_ast
fprintf(stderr, "The scanner encountered an error.\n");
return NULL;
}
parse_code = put_dsl_lemon_parser_parse_token(pvparser, 0, NULL, pasts);
parse_code = mlr_dsl_lemon_parser_parse_token(pvparser, 0, NULL, pasts);
if (parse_code == 0)
return NULL;
@ -51,27 +51,27 @@ static sllv_t* put_dsl_parse_inner(yyscan_t scanner, void* pvparser, mlr_dsl_ast
// ----------------------------------------------------------------
// Returns linked list of mlr_dsl_ast_node_t*.
sllv_t* put_dsl_parse(char* string) {
sllv_t* mlr_dsl_parse(char* string) {
mlr_dsl_ast_node_t* pnode = NULL;
yyscan_t scanner;
put_dsl_lexer_lex_init_extra(&pnode, &scanner);
void* pvparser = put_dsl_lemon_parser_alloc(malloc);
mlr_dsl_lexer_lex_init_extra(&pnode, &scanner);
void* pvparser = mlr_dsl_lemon_parser_alloc(malloc);
YY_BUFFER_STATE buf = NULL;
if (string == NULL) {
put_dsl_lexer_set_in(stdin, scanner);
mlr_dsl_lexer_set_in(stdin, scanner);
} else {
YY_BUFFER_STATE buf = put_dsl_lexer__scan_string(string, scanner);
put_dsl_lexer__switch_to_buffer (buf, scanner);
YY_BUFFER_STATE buf = mlr_dsl_lexer__scan_string(string, scanner);
mlr_dsl_lexer__switch_to_buffer (buf, scanner);
}
sllv_t* pasts = put_dsl_parse_inner(scanner, pvparser, &pnode);
sllv_t* pasts = mlr_dsl_parse_inner(scanner, pvparser, &pnode);
if (buf != NULL)
put_dsl_lexer__delete_buffer(buf, scanner);
mlr_dsl_lexer__delete_buffer(buf, scanner);
put_dsl_lexer_lex_destroy(scanner);
put_dsl_lemon_parser_free(pvparser, free);
mlr_dsl_lexer_lex_destroy(scanner);
mlr_dsl_lemon_parser_free(pvparser, free);
return pasts;
}

View file

@ -1,9 +1,9 @@
#ifndef PUT_DSL_WRAPPER_H
#define PUT_DSL_WRAPPER_H
#ifndef MLR_DSL_WRAPPER_H
#define MLR_DSL_WRAPPER_H
#include "../containers/mlr_dsl_ast.h"
#include "../containers/sllv.h"
// Returns linked list of mlr_dsl_ast_node_t*.
sllv_t* put_dsl_parse(char* string);
sllv_t* mlr_dsl_parse(char* string);
#endif // PUT_DSL_WRAPPER_H
#endif // MLR_DSL_WRAPPER_H

View file

@ -3,7 +3,7 @@
#include "containers/sllv.h"
#include "mapping/lrec_evaluators.h"
#include "mapping/mappers.h"
#include "dsls/put_dsl_wrapper.h"
#include "dsls/mlr_dsl_wrapper.h"
#include "cli/argparse.h"
typedef struct _mapper_filter_state_t {
@ -88,7 +88,7 @@ static mapper_t* mapper_filter_parse_cli(int* pargi, int argc, char** argv) {
}
mlr_dsl_expression = argv[(*pargi)++];
sllv_t* pasts = put_dsl_parse(mlr_dsl_expression);
sllv_t* pasts = mlr_dsl_parse(mlr_dsl_expression);
if (pasts == NULL) {
mapper_filter_usage(stderr, argv[0], verb);
return NULL;

View file

@ -4,7 +4,7 @@
#include "containers/sllv.h"
#include "mapping/mappers.h"
#include "mapping/lrec_evaluators.h"
#include "dsls/put_dsl_wrapper.h"
#include "dsls/mlr_dsl_wrapper.h"
#include "cli/argparse.h"
typedef struct _mapper_put_state_t {
@ -95,7 +95,7 @@ static mapper_t* mapper_put_parse_cli(int* pargi, int argc, char** argv) {
mlr_dsl_expression = argv[(*pargi)++];
// Linked list of mlr_dsl_ast_node_t*.
sllv_t* pasts = put_dsl_parse(mlr_dsl_expression);
sllv_t* pasts = mlr_dsl_parse(mlr_dsl_expression);
if (pasts == NULL) {
mapper_put_usage(stderr, argv[0], verb);
return NULL;

View file

@ -7,7 +7,6 @@ BUGFIXES
TOP OF LIST
* filter-then-put with capture-groups
! rename put_dsl / pdsl / etc
o expanded lrec_context or some such for the regex backcaptures; or (better) within lrec_t itself
! pointer integrity for backcaptures followed by unlinks/renames etc. ... strdup them?
@ -21,9 +20,6 @@ TOP OF LIST
- breaks all lhmslv's at -g's
- so don't do this
! ternary operator
- UTs
* ewma output-label list in addition to rename
! double-check multi-pair stats2 !
* cump -> one-offs

View file

@ -22,8 +22,8 @@ sed 's/^==.*== //' "$@" | swipe \
| mgrepv '_platform_memchr' \
| mgrepv 'xpc_pipe_routine' \
| grep -v 'MACH_SEND_TRAILER' \
| mgrepv 'put_dsl_lexer_lex' \
| mgrepv 'put_dsl_parse' \
| mgrepv 'mlr_dsl_lexer_lex' \
| mgrepv 'mlr_dsl_parse' \
| mgrepv 'unbackslash' \
| cat

View file

@ -22,7 +22,7 @@ all_ldadd= \
../mapping/libmapping.la \
../output/liboutput.la \
../lib/libmlr.la \
../dsls/libpdsl.la \
../dsls/libdsl.la \
-lm
# Unit-test mains

View file

@ -18,7 +18,7 @@ LT_INIT
# TODO: better source handling for lemon sources?
# perhaps lemon can be improved to survive being called from the build dir
AC_CONFIG_LINKS([c/dsls/lempar.c:c/dsls/lempar.c])
AC_CONFIG_LINKS([c/dsls/put_dsl_parse.y:c/dsls/put_dsl_parse.y])
AC_CONFIG_LINKS([c/dsls/mlr_dsl_parse.y:c/dsls/mlr_dsl_parse.y])
AC_CONFIG_FILES([Makefile
c/cli/Makefile