From aeeba1f2e2cfb9bd287ba7a805affda778ef9529 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Fri, 13 Nov 2015 21:39:43 -0500 Subject: [PATCH] grammar neaten --- c/dsls/filter_dsl_lexer.l | 1 - c/dsls/put_dsl_lexer.l | 247 ++++++++++++++++++++------------------ c/todo.txt | 2 + 3 files changed, 134 insertions(+), 116 deletions(-) diff --git a/c/dsls/filter_dsl_lexer.l b/c/dsls/filter_dsl_lexer.l index abb4f337e..635c0dd25 100644 --- a/c/dsls/filter_dsl_lexer.l +++ b/c/dsls/filter_dsl_lexer.l @@ -29,7 +29,6 @@ *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); return FILTER_DSL_DOES_NOT_MATCH; } - "==" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); return FILTER_DSL_EQ; diff --git a/c/dsls/put_dsl_lexer.l b/c/dsls/put_dsl_lexer.l index ccad140f4..893c335c7 100644 --- a/c/dsls/put_dsl_lexer.l +++ b/c/dsls/put_dsl_lexer.l @@ -11,15 +11,143 @@ %option extra-type="struct _mlr_dsl_ast_node_t **" %% +";" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY); + return PUT_DSL_SEMICOLON; +} + +"=" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_ASSIGN; +} +"||" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_LOGICAL_OR; +} + +"&&" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_LOGICAL_AND; +} + +"=~" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_MATCHES; +} +"!=~" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_DOES_NOT_MATCH; +} +"==" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_EQ; +} +"!=" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_NE; +} + +">" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_GT; +} +">=" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_GE; +} +"<" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_LT; +} +"<=" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_LE; +} + +"|" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_BIT_OR; +} + +"^" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_BIT_XOR; +} + +"&" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_BIT_AND; +} + +"+" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_PLUS; +} +"-" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_MINUS; +} +"\." { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_DOT; +} + +"*" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_TIMES; +} +"/" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_DIVIDE; +} +"//" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_INT_DIVIDE; +} +"%" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_MOD; +} + +"!" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_NOT; +} + +"~" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_DSL_BIT_NOT; +} + +"**" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); + return PUT_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; } -"=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_ASSIGN; + +[0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+ { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_LITERAL); + return PUT_DSL_NUMBER; +} +0x[0-9a-fA-F]+ { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_LITERAL); + return PUT_DSL_NUMBER; +} + +\"([^\\\"]|\\.)*\" { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_LITERAL); + return PUT_DSL_STRING; +} + +\"([^\\\"]|\\.)*\"\i { + *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_REGEXI); + return PUT_DSL_REGEXI; } "NF" { @@ -55,114 +183,6 @@ *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME); return PUT_DSL_FCN_NAME; } -[0-9]+|[0-9]+\.[0-9]*|[0-9]*\.[0-9]+ { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_LITERAL); - return PUT_DSL_NUMBER; -} - -0x[0-9a-fA-F]+ { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_LITERAL); - return PUT_DSL_NUMBER; -} - -\"([^\\\"]|\\.)*\" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_LITERAL); - return PUT_DSL_STRING; -} - -\"([^\\\"]|\\.)*\"\i { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_REGEXI); - return PUT_DSL_REGEXI; -} - -"\." { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_DOT; -} -"+" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_PLUS; -} -"-" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_MINUS; -} -"*" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_TIMES; -} -"/" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_DIVIDE; -} -"//" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_INT_DIVIDE; -} -"%" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_MOD; -} -"**" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_POW; -} - -"<" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_LT; -} -"<=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_LE; -} -">" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_GT; -} -">=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_GE; -} - -"||" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_LOGICAL_OR; -} -"&&" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_LOGICAL_AND; -} -"!" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_NOT; -} - -"|" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_BIT_OR; -} -"^" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_BIT_XOR; -} -"&" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_BIT_AND; -} -"~" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_BIT_NOT; -} - -"==" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_EQ; -} -"!=" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR); - return PUT_DSL_NE; -} "(" { *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY); @@ -172,14 +192,11 @@ *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY); return PUT_DSL_RPAREN; } + "," { *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY); return PUT_DSL_COMMA; } -";" { - *yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY); - return PUT_DSL_SEMICOLON; -} [ \t\r\n] { } diff --git a/c/todo.txt b/c/todo.txt index 7c537e4b9..612f04664 100644 --- a/c/todo.txt +++ b/c/todo.txt @@ -26,6 +26,7 @@ TOP OF LIST o sgn function needs UT cases o bitops UTs x put/filter o >>, <<, ~ + o MATCHES etc. into put grammar o urandint -> w/urand @ mlr -h, mld, etc. o OR -> LOGICAL_OR etc. o bitops filter faqent / online help: filter '0 != $x | $y' vs. filter '0 != ($x | $y)' @@ -49,6 +50,7 @@ NEW binary+ binary- . left to right binary* / % left to right ! ~ ++ -- unary+ unary- & right to left + ** right to left () left to right -> put in dot & other mlr operators