mirror of
https://github.com/johnkerl/miller.git
synced 2026-07-18 00:45:47 +00:00
put_dsl -> mlr_dsl renames
This commit is contained in:
parent
120875c8d1
commit
4f6f03ea80
16 changed files with 206 additions and 210 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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] { }
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue