DSL name-shortens

This commit is contained in:
John Kerl 2016-01-25 21:09:46 -05:00
parent c7cb1274e8
commit 95e997cbc3
7 changed files with 375 additions and 375 deletions

View file

@ -125,23 +125,23 @@ void mlr_dsl_ast_node_print(mlr_dsl_ast_node_t* pnode) {
// ----------------------------------------------------------------
char* mlr_dsl_ast_node_describe_type(int type) {
switch(type) {
case MLR_DSL_AST_NODE_TYPE_STRNUM_LITERAL: return "strnum_literal"; break;
case MLR_DSL_AST_NODE_TYPE_BOOLEAN_LITERAL: return "boolean_literal"; break;
case MLR_DSL_AST_NODE_TYPE_REGEXI: return "regexi"; break;
case MLR_DSL_AST_NODE_TYPE_FIELD_NAME: return "field_name"; break;
case MLR_DSL_AST_NODE_TYPE_OOSVAR_NAME: return "oosvar_name"; break;
case MLR_DSL_AST_NODE_TYPE_MOOSVAR_NAME: return "moosvar_name"; break;
case MLR_DSL_AST_NODE_TYPE_MOOSVAR_INDEX: return "moosvar_index"; break;
case MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME: return "function_name"; break;
case MLR_DSL_AST_NODE_TYPE_OPERATOR: return "operator"; break;
case MLR_DSL_AST_NODE_TYPE_SREC_ASSIGNMENT: return "srec_assignment"; break;
case MLR_DSL_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: return "oosvar_assignment"; break;
case MLR_DSL_AST_NODE_TYPE_MOOSVAR_ASSIGNMENT: return "moosvar_assignment"; break;
case MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE: return "context_variable"; break;
case MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY: return "stripped_away"; break;
case MLR_DSL_AST_NODE_TYPE_FILTER: return "filter"; break;
case MLR_DSL_AST_NODE_TYPE_GATE: return "gate"; break;
case MLR_DSL_AST_NODE_TYPE_EMIT: return "emit"; break;
case MD_AST_NODE_TYPE_STRNUM_LITERAL: return "strnum_literal"; break;
case MD_AST_NODE_TYPE_BOOLEAN_LITERAL: return "boolean_literal"; break;
case MD_AST_NODE_TYPE_REGEXI: return "regexi"; break;
case MD_AST_NODE_TYPE_FIELD_NAME: return "field_name"; break;
case MD_AST_NODE_TYPE_OOSVAR_NAME: return "oosvar_name"; break;
case MD_AST_NODE_TYPE_MOOSVAR_NAME: return "moosvar_name"; break;
case MD_AST_NODE_TYPE_MOOSVAR_INDEX: return "moosvar_index"; break;
case MD_AST_NODE_TYPE_FUNCTION_NAME: return "function_name"; break;
case MD_AST_NODE_TYPE_OPERATOR: return "operator"; break;
case MD_AST_NODE_TYPE_SREC_ASSIGNMENT: return "srec_assignment"; break;
case MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT: return "oosvar_assignment"; break;
case MD_AST_NODE_TYPE_MOOSVAR_ASSIGNMENT: return "moosvar_assignment"; break;
case MD_AST_NODE_TYPE_CONTEXT_VARIABLE: return "context_variable"; break;
case MD_AST_NODE_TYPE_STRIPPED_AWAY: return "stripped_away"; break;
case MD_AST_NODE_TYPE_FILTER: return "filter"; break;
case MD_AST_NODE_TYPE_GATE: return "gate"; break;
case MD_AST_NODE_TYPE_EMIT: return "emit"; break;
default: return "???";
}
}

View file

@ -6,23 +6,23 @@
#define MLR_DSL_AST_H
#include "sllv.h"
#define MLR_DSL_AST_NODE_TYPE_STRNUM_LITERAL 0xda00
#define MLR_DSL_AST_NODE_TYPE_BOOLEAN_LITERAL 0xda11
#define MLR_DSL_AST_NODE_TYPE_REGEXI 0xda22
#define MLR_DSL_AST_NODE_TYPE_FIELD_NAME 0xda33
#define MLR_DSL_AST_NODE_TYPE_OOSVAR_NAME 0xda44
#define MLR_DSL_AST_NODE_TYPE_MOOSVAR_NAME 0xda55
#define MLR_DSL_AST_NODE_TYPE_MOOSVAR_INDEX 0xda5c
#define MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME 0xda66
#define MLR_DSL_AST_NODE_TYPE_OPERATOR 0xda77
#define MLR_DSL_AST_NODE_TYPE_SREC_ASSIGNMENT 0xda88
#define MLR_DSL_AST_NODE_TYPE_OOSVAR_ASSIGNMENT 0xda99
#define MLR_DSL_AST_NODE_TYPE_MOOSVAR_ASSIGNMENT 0xdaaa
#define MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE 0xdabb
#define MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY 0xdacc
#define MLR_DSL_AST_NODE_TYPE_FILTER 0xdadd
#define MLR_DSL_AST_NODE_TYPE_GATE 0xdaee
#define MLR_DSL_AST_NODE_TYPE_EMIT 0xdaff
#define MD_AST_NODE_TYPE_STRNUM_LITERAL 0xda00
#define MD_AST_NODE_TYPE_BOOLEAN_LITERAL 0xda11
#define MD_AST_NODE_TYPE_REGEXI 0xda22
#define MD_AST_NODE_TYPE_FIELD_NAME 0xda33
#define MD_AST_NODE_TYPE_OOSVAR_NAME 0xda44
#define MD_AST_NODE_TYPE_MOOSVAR_NAME 0xda55
#define MD_AST_NODE_TYPE_MOOSVAR_INDEX 0xda5c
#define MD_AST_NODE_TYPE_FUNCTION_NAME 0xda66
#define MD_AST_NODE_TYPE_OPERATOR 0xda77
#define MD_AST_NODE_TYPE_SREC_ASSIGNMENT 0xda88
#define MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT 0xda99
#define MD_AST_NODE_TYPE_MOOSVAR_ASSIGNMENT 0xdaaa
#define MD_AST_NODE_TYPE_CONTEXT_VARIABLE 0xdabb
#define MD_AST_NODE_TYPE_STRIPPED_AWAY 0xdacc
#define MD_AST_NODE_TYPE_FILTER 0xdadd
#define MD_AST_NODE_TYPE_GATE 0xdaee
#define MD_AST_NODE_TYPE_EMIT 0xdaff
typedef struct _mlr_dsl_ast_t {
sllv_t* pbegin_statements;

View file

@ -12,217 +12,217 @@
%%
";" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return MLR_DSL_SEMICOLON;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY);
return MD_TOKEN_SEMICOLON;
}
"{" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return MLR_DSL_LEFT_BRACE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY);
return MD_TOKEN_LEFT_BRACE;
}
"}" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return MLR_DSL_RIGHT_BRACE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY);
return MD_TOKEN_RIGHT_BRACE;
}
"=" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_SREC_ASSIGNMENT);
return MLR_DSL_ASSIGN;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_SREC_ASSIGNMENT);
return MD_TOKEN_ASSIGN;
}
"filter" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_FILTER);
return MLR_DSL_FILTER;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FILTER);
return MD_TOKEN_FILTER;
}
"gate" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_GATE);
return MLR_DSL_GATE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_GATE);
return MD_TOKEN_GATE;
}
"emit" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_EMIT);
return MLR_DSL_EMIT;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_EMIT);
return MD_TOKEN_EMIT;
}
"begin" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return MLR_DSL_BEGIN;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY);
return MD_TOKEN_BEGIN;
}
"end" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return MLR_DSL_END;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY);
return MD_TOKEN_END;
}
"?" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_QUESTION_MARK;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_QUESTION_MARK;
}
":" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_COLON;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_COLON;
}
"||" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_LOGICAL_OR;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_LOGICAL_OR;
}
"^^" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_LOGICAL_XOR;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_LOGICAL_XOR;
}
"&&" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_LOGICAL_AND;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_LOGICAL_AND;
}
"=~" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_MATCHES;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_MATCHES;
}
"!=~" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_DOES_NOT_MATCH;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_DOES_NOT_MATCH;
}
"==" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_EQ;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_EQ;
}
"!=" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_NE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_NE;
}
">" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_GT;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_GT;
}
">=" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_GE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_GE;
}
"<" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_LT;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_LT;
}
"<=" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_LE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_LE;
}
"|" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_BITWISE_OR;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_BITWISE_OR;
}
"^" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_BITWISE_XOR;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_BITWISE_XOR;
}
"&" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_BITWISE_AND;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_BITWISE_AND;
}
"<<" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_BITWISE_LSH;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_BITWISE_LSH;
}
">>" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_BITWISE_RSH;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_BITWISE_RSH;
}
"+" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_PLUS;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_PLUS;
}
"-" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_MINUS;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_MINUS;
}
"\." {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_DOT;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_DOT;
}
"*" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_TIMES;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_TIMES;
}
"/" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_DIVIDE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_DIVIDE;
}
"//" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_INT_DIVIDE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_INT_DIVIDE;
}
"%" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_MOD;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_MOD;
}
"!" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_LOGICAL_NOT;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_LOGICAL_NOT;
}
"~" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_BITWISE_NOT;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_BITWISE_NOT;
}
"**" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_OPERATOR);
return MLR_DSL_POW;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OPERATOR);
return MD_TOKEN_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 MLR_DSL_FIELD_NAME;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME);
return MD_TOKEN_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 MLR_DSL_BRACED_FIELD_NAME;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FIELD_NAME);
return MD_TOKEN_BRACED_FIELD_NAME;
}
@[a-zA-Z_0-9]+ {
// Note: the parser depends on the at-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_OOSVAR_NAME);
return MLR_DSL_OOSVAR_NAME;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OOSVAR_NAME);
return MD_TOKEN_OOSVAR_NAME;
}
@\{([^\}]|\\.)*\} {
// Note: the parser depends on the at-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_OOSVAR_NAME);
return MLR_DSL_BRACED_OOSVAR_NAME;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_OOSVAR_NAME);
return MD_TOKEN_BRACED_OOSVAR_NAME;
}
@@[a-zA-Z_0-9]+ {
// xxx moosvars are just temporary
// Note: the parser depends on the percent-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_MOOSVAR_NAME);
return MLR_DSL_MOOSVAR_NAME;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_MOOSVAR_NAME);
return MD_TOKEN_MOOSVAR_NAME;
}
@@\{([^\}]|\\.)*\} {
// xxx moosvars are just temporary
// Note: the parser depends on the percent-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_MOOSVAR_NAME);
return MLR_DSL_BRACED_MOOSVAR_NAME;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_MOOSVAR_NAME);
return MD_TOKEN_BRACED_MOOSVAR_NAME;
}
"\[" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return MLR_DSL_LEFT_BRACKET;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY);
return MD_TOKEN_LEFT_BRACKET;
}
"\]" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return MLR_DSL_RIGHT_BRACKET;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY);
return MD_TOKEN_RIGHT_BRACKET;
}
[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]+ {
@ -236,79 +236,79 @@
// 1.2e-3 1.e-3
// .2e3
// .2e-3 1.e-3
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRNUM_LITERAL);
return MLR_DSL_NUMBER;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRNUM_LITERAL);
return MD_TOKEN_NUMBER;
}
0x[0-9a-fA-F]+ {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRNUM_LITERAL);
return MLR_DSL_NUMBER;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRNUM_LITERAL);
return MD_TOKEN_NUMBER;
}
\"([^\\\"]|\\.)*\" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRNUM_LITERAL);
return MLR_DSL_STRING;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRNUM_LITERAL);
return MD_TOKEN_STRING;
}
\"([^\\\"]|\\.)*\"\i {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_REGEXI);
return MLR_DSL_REGEXI;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_REGEXI);
return MD_TOKEN_REGEXI;
}
true {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_BOOLEAN_LITERAL);
return MLR_DSL_TRUE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL);
return MD_TOKEN_TRUE;
}
false {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_BOOLEAN_LITERAL);
return MLR_DSL_FALSE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_BOOLEAN_LITERAL);
return MD_TOKEN_FALSE;
}
"NF" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MLR_DSL_CONTEXT_VARIABLE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MD_TOKEN_CONTEXT_VARIABLE;
}
"NR" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MLR_DSL_CONTEXT_VARIABLE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MD_TOKEN_CONTEXT_VARIABLE;
}
"FNR" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MLR_DSL_CONTEXT_VARIABLE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MD_TOKEN_CONTEXT_VARIABLE;
}
"FILENAME" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MLR_DSL_CONTEXT_VARIABLE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MD_TOKEN_CONTEXT_VARIABLE;
}
"FILENUM" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MLR_DSL_CONTEXT_VARIABLE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MD_TOKEN_CONTEXT_VARIABLE;
}
"PI" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MLR_DSL_CONTEXT_VARIABLE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MD_TOKEN_CONTEXT_VARIABLE;
}
"E" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MLR_DSL_CONTEXT_VARIABLE;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_CONTEXT_VARIABLE);
return MD_TOKEN_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 MLR_DSL_FCN_NAME;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_FUNCTION_NAME);
return MD_TOKEN_FCN_NAME;
}
"(" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return MLR_DSL_LPAREN;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY);
return MD_TOKEN_LPAREN;
}
")" {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return MLR_DSL_RPAREN;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY);
return MD_TOKEN_RPAREN;
}
"," {
*yyextra = mlr_dsl_ast_node_alloc(yytext, MLR_DSL_AST_NODE_TYPE_STRIPPED_AWAY);
return MLR_DSL_COMMA;
*yyextra = mlr_dsl_ast_node_alloc(yytext, MD_AST_NODE_TYPE_STRIPPED_AWAY);
return MD_TOKEN_COMMA;
}
[ \t\r\n] { }

View file

@ -13,7 +13,7 @@
// * parens, commas, semis, line endings, whitespace are all stripped away
// * variable names and literal values remain as leaf nodes of the AST
// * = + - * / ** {function names} remain as non-leaf nodes of the AST
// CST: See the mlr_dsl_cst.c
// CST: See the md_cst.c
// ================================================================
}
@ -37,95 +37,95 @@
}
// ================================================================
mlr_dsl_body ::= mlr_dsl_statements.
md_body ::= md_statements.
mlr_dsl_statements ::= mlr_dsl_statement.
mlr_dsl_statements ::= mlr_dsl_statement MLR_DSL_SEMICOLON mlr_dsl_statements.
md_statements ::= md_statement.
md_statements ::= md_statement MD_TOKEN_SEMICOLON md_statements.
// This allows for trailing semicolon, as well as empty string (or whitespace) between semicolons:
mlr_dsl_statement ::= .
md_statement ::= .
mlr_dsl_statement ::= mlr_dsl_main_srec_assignment.
mlr_dsl_statement ::= mlr_dsl_main_oosvar_assignment.
mlr_dsl_statement ::= mlr_dsl_main_bare_boolean.
mlr_dsl_statement ::= mlr_dsl_main_filter.
mlr_dsl_statement ::= mlr_dsl_main_gate.
mlr_dsl_statement ::= mlr_dsl_main_emit.
md_statement ::= md_main_srec_assignment.
md_statement ::= md_main_oosvar_assignment.
md_statement ::= md_main_bare_boolean.
md_statement ::= md_main_filter.
md_statement ::= md_main_gate.
md_statement ::= md_main_emit.
// E.g. 'begin { emit @count }'
mlr_dsl_statement ::= mlr_dsl_begin_block.
md_statement ::= md_begin_block.
// E.g. 'begin emit @count'
mlr_dsl_statement ::= mlr_dsl_begin_solo_oosvar_assignment.
mlr_dsl_statement ::= mlr_dsl_begin_solo_bare_boolean.
mlr_dsl_statement ::= mlr_dsl_begin_solo_filter.
mlr_dsl_statement ::= mlr_dsl_begin_solo_gate.
mlr_dsl_statement ::= mlr_dsl_begin_solo_emit.
md_statement ::= md_begin_solo_oosvar_assignment.
md_statement ::= md_begin_solo_bare_boolean.
md_statement ::= md_begin_solo_filter.
md_statement ::= md_begin_solo_gate.
md_statement ::= md_begin_solo_emit.
// E.g. 'end { emit @count }'
mlr_dsl_statement ::= mlr_dsl_end_block.
md_statement ::= md_end_block.
// E.g. 'end emit @count'
mlr_dsl_statement ::= mlr_dsl_end_solo_oosvar_assignment.
mlr_dsl_statement ::= mlr_dsl_end_solo_bare_boolean.
mlr_dsl_statement ::= mlr_dsl_end_solo_filter.
mlr_dsl_statement ::= mlr_dsl_end_solo_gate.
mlr_dsl_statement ::= mlr_dsl_end_solo_emit.
md_statement ::= md_end_solo_oosvar_assignment.
md_statement ::= md_end_solo_bare_boolean.
md_statement ::= md_end_solo_filter.
md_statement ::= md_end_solo_gate.
md_statement ::= md_end_solo_emit.
// ----------------------------------------------------------------
// This looks redundant to the above, but it avoids having pathologies such as nested 'begin { begin { ... } }'.
mlr_dsl_begin_block ::= MLR_DSL_BEGIN MLR_DSL_LEFT_BRACE mlr_dsl_begin_block_statements MLR_DSL_RIGHT_BRACE.
md_begin_block ::= MD_TOKEN_BEGIN MD_TOKEN_LEFT_BRACE md_begin_block_statements MD_TOKEN_RIGHT_BRACE.
mlr_dsl_begin_block_statements ::= mlr_dsl_begin_block_statement.
mlr_dsl_begin_block_statements ::= mlr_dsl_begin_block_statement MLR_DSL_SEMICOLON mlr_dsl_begin_block_statements.
md_begin_block_statements ::= md_begin_block_statement.
md_begin_block_statements ::= md_begin_block_statement MD_TOKEN_SEMICOLON md_begin_block_statements.
// This allows for trailing semicolon, as well as empty string (or whitespace) between semicolons:
mlr_dsl_begin_block_statement ::= .
mlr_dsl_begin_block_statement ::= mlr_dsl_begin_block_oosvar_assignment.
mlr_dsl_begin_block_statement ::= mlr_dsl_begin_block_moosvar_assignment.
mlr_dsl_begin_block_statement ::= mlr_dsl_begin_block_moosvar_temp.
mlr_dsl_begin_block_statement ::= mlr_dsl_begin_block_bare_boolean.
mlr_dsl_begin_block_statement ::= mlr_dsl_begin_block_filter.
mlr_dsl_begin_block_statement ::= mlr_dsl_begin_block_gate.
mlr_dsl_begin_block_statement ::= mlr_dsl_begin_block_emit.
md_begin_block_statement ::= .
md_begin_block_statement ::= md_begin_block_oosvar_assignment.
md_begin_block_statement ::= md_begin_block_moosvar_assignment.
md_begin_block_statement ::= md_begin_block_moosvar_temp.
md_begin_block_statement ::= md_begin_block_bare_boolean.
md_begin_block_statement ::= md_begin_block_filter.
md_begin_block_statement ::= md_begin_block_gate.
md_begin_block_statement ::= md_begin_block_emit.
mlr_dsl_end_block ::= MLR_DSL_END MLR_DSL_LEFT_BRACE mlr_dsl_end_block_statements MLR_DSL_RIGHT_BRACE.
md_end_block ::= MD_TOKEN_END MD_TOKEN_LEFT_BRACE md_end_block_statements MD_TOKEN_RIGHT_BRACE.
mlr_dsl_end_block_statements ::= mlr_dsl_end_block_statement.
mlr_dsl_end_block_statements ::= mlr_dsl_end_block_statement MLR_DSL_SEMICOLON mlr_dsl_end_block_statements.
md_end_block_statements ::= md_end_block_statement.
md_end_block_statements ::= md_end_block_statement MD_TOKEN_SEMICOLON md_end_block_statements.
// This allows for trailing semicolon, as well as empty string (or whitespace) between semicolons:
mlr_dsl_end_block_statement ::= .
mlr_dsl_end_block_statement ::= mlr_dsl_end_block_oosvar_assignment.
mlr_dsl_end_block_statement ::= mlr_dsl_end_block_bare_boolean.
mlr_dsl_end_block_statement ::= mlr_dsl_end_block_filter.
mlr_dsl_end_block_statement ::= mlr_dsl_end_block_gate.
mlr_dsl_end_block_statement ::= mlr_dsl_end_block_emit.
md_end_block_statement ::= .
md_end_block_statement ::= md_end_block_oosvar_assignment.
md_end_block_statement ::= md_end_block_bare_boolean.
md_end_block_statement ::= md_end_block_filter.
md_end_block_statement ::= md_end_block_gate.
md_end_block_statement ::= md_end_block_emit.
// ================================================================
// These are top-level; they update the AST top-level statement-lists.
mlr_dsl_main_srec_assignment(A) ::= mlr_dsl_field_name(B) MLR_DSL_ASSIGN(O) mlr_dsl_ternary(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_SREC_ASSIGNMENT, B, C);
md_main_srec_assignment(A) ::= md_field_name(B) MD_TOKEN_ASSIGN(O) md_ternary(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_SREC_ASSIGNMENT, B, C);
sllv_add(past->pmain_statements, A);
}
mlr_dsl_main_oosvar_assignment(A) ::= mlr_dsl_oosvar_assignment(B). {
md_main_oosvar_assignment(A) ::= md_oosvar_assignment(B). {
A = B;
sllv_add(past->pmain_statements, A);
}
mlr_dsl_main_bare_boolean(A) ::= mlr_dsl_ternary(B). {
md_main_bare_boolean(A) ::= md_ternary(B). {
A = B;
sllv_add(past->pmain_statements, A);
}
mlr_dsl_main_filter(A) ::= MLR_DSL_FILTER(O) mlr_dsl_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_FILTER, B);
md_main_filter(A) ::= MD_TOKEN_FILTER(O) md_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_FILTER, B);
sllv_add(past->pmain_statements, A);
}
mlr_dsl_main_gate(A) ::= MLR_DSL_GATE(O) mlr_dsl_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_GATE, B);
md_main_gate(A) ::= MD_TOKEN_GATE(O) md_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_GATE, B);
sllv_add(past->pmain_statements, A);
}
mlr_dsl_main_emit(A) ::= mlr_dsl_emit(B). {
md_main_emit(A) ::= md_emit(B). {
A = B;
sllv_add(past->pmain_statements, A);
}
@ -133,28 +133,28 @@ mlr_dsl_main_emit(A) ::= mlr_dsl_emit(B). {
// ----------------------------------------------------------------
// These are top-level; they update the AST top-level statement-lists.
mlr_dsl_begin_solo_oosvar_assignment(A) ::= MLR_DSL_BEGIN mlr_dsl_oosvar_assignment(B). {
md_begin_solo_oosvar_assignment(A) ::= MD_TOKEN_BEGIN md_oosvar_assignment(B). {
A = B;
sllv_add(past->pbegin_statements, A);
}
mlr_dsl_begin_solo_bare_boolean(A) ::= MLR_DSL_BEGIN mlr_dsl_ternary(B). {
md_begin_solo_bare_boolean(A) ::= MD_TOKEN_BEGIN md_ternary(B). {
A = B;
sllv_add(past->pbegin_statements, A);
}
mlr_dsl_begin_solo_filter(A) ::= MLR_DSL_BEGIN MLR_DSL_FILTER(O) mlr_dsl_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_FILTER, B);
md_begin_solo_filter(A) ::= MD_TOKEN_BEGIN MD_TOKEN_FILTER(O) md_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_FILTER, B);
sllv_add(past->pbegin_statements, A);
}
mlr_dsl_begin_solo_gate(A) ::= MLR_DSL_BEGIN MLR_DSL_GATE(O) mlr_dsl_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_GATE, B);
md_begin_solo_gate(A) ::= MD_TOKEN_BEGIN MD_TOKEN_GATE(O) md_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_GATE, B);
sllv_add(past->pbegin_statements, A);
}
mlr_dsl_begin_solo_emit(A) ::= MLR_DSL_BEGIN mlr_dsl_emit(B). {
md_begin_solo_emit(A) ::= MD_TOKEN_BEGIN md_emit(B). {
A = B;
sllv_add(past->pbegin_statements, A);
}
mlr_dsl_begin_block_oosvar_assignment(A) ::= mlr_dsl_oosvar_assignment(B). {
md_begin_block_oosvar_assignment(A) ::= md_oosvar_assignment(B). {
A = B;
sllv_add(past->pbegin_statements, A);
}
@ -162,36 +162,36 @@ mlr_dsl_begin_block_oosvar_assignment(A) ::= mlr_dsl_oosvar_assignment(B). {
// oosvars work just fine; multi-level hashmaps (moosvars) don't *yet*.
// so having @ for the former and @@ for the latter allows me to separate the working stuff
// from the experimental.
mlr_dsl_begin_block_moosvar_assignment(A) ::= mlr_dsl_moosvar_assignment(B). {
md_begin_block_moosvar_assignment(A) ::= md_moosvar_assignment(B). {
A = B;
sllv_add(past->pbegin_statements, A);
}
mlr_dsl_begin_block_moosvar_temp(A) ::= mlr_dsl_begin_block_moosvar_temp2(B). {
md_begin_block_moosvar_temp(A) ::= md_begin_block_moosvar_temp2(B). {
A = B;
sllv_add(past->pbegin_statements, A);
}
mlr_dsl_begin_block_moosvar_temp2(A) ::= mlr_dsl_moosvar_name(B) MLR_DSL_LEFT_BRACKET mlr_dsl_ternary(C) MLR_DSL_RIGHT_BRACKET. {
A = mlr_dsl_ast_node_alloc_binary("[]", MLR_DSL_AST_NODE_TYPE_MOOSVAR_INDEX, B, C);
md_begin_block_moosvar_temp2(A) ::= md_moosvar_name(B) MD_TOKEN_LEFT_BRACKET md_ternary(C) MD_TOKEN_RIGHT_BRACKET. {
A = mlr_dsl_ast_node_alloc_binary("[]", MD_AST_NODE_TYPE_MOOSVAR_INDEX, B, C);
}
mlr_dsl_begin_block_moosvar_temp2(A) ::= mlr_dsl_begin_block_moosvar_temp2(B) MLR_DSL_LEFT_BRACKET mlr_dsl_ternary(C) MLR_DSL_RIGHT_BRACKET. {
A = mlr_dsl_ast_node_alloc_binary("[]", MLR_DSL_AST_NODE_TYPE_MOOSVAR_INDEX, B, C);
md_begin_block_moosvar_temp2(A) ::= md_begin_block_moosvar_temp2(B) MD_TOKEN_LEFT_BRACKET md_ternary(C) MD_TOKEN_RIGHT_BRACKET. {
A = mlr_dsl_ast_node_alloc_binary("[]", MD_AST_NODE_TYPE_MOOSVAR_INDEX, B, C);
}
mlr_dsl_begin_block_bare_boolean(A) ::= mlr_dsl_ternary(B). {
md_begin_block_bare_boolean(A) ::= md_ternary(B). {
A = B;
sllv_add(past->pbegin_statements, A);
}
mlr_dsl_begin_block_filter(A) ::= MLR_DSL_FILTER(O) mlr_dsl_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_FILTER, B);
md_begin_block_filter(A) ::= MD_TOKEN_FILTER(O) md_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_FILTER, B);
sllv_add(past->pbegin_statements, A);
}
mlr_dsl_begin_block_gate(A) ::= MLR_DSL_GATE(O) mlr_dsl_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_GATE, B);
md_begin_block_gate(A) ::= MD_TOKEN_GATE(O) md_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_GATE, B);
sllv_add(past->pbegin_statements, A);
}
mlr_dsl_begin_block_emit(A) ::= mlr_dsl_emit(B). {
md_begin_block_emit(A) ::= md_emit(B). {
A = B;
sllv_add(past->pbegin_statements, A);
}
@ -199,54 +199,54 @@ mlr_dsl_begin_block_emit(A) ::= mlr_dsl_emit(B). {
// ----------------------------------------------------------------
// These are top-level; they update the AST top-level statement-lists.
mlr_dsl_end_solo_oosvar_assignment(A) ::= MLR_DSL_END mlr_dsl_oosvar_assignment(B). {
md_end_solo_oosvar_assignment(A) ::= MD_TOKEN_END md_oosvar_assignment(B). {
A = B;
sllv_add(past->pend_statements, A);
}
mlr_dsl_end_solo_bare_boolean(A) ::= MLR_DSL_END mlr_dsl_ternary(B). {
md_end_solo_bare_boolean(A) ::= MD_TOKEN_END md_ternary(B). {
A = B;
sllv_add(past->pend_statements, A);
}
mlr_dsl_end_solo_filter(A) ::= MLR_DSL_END MLR_DSL_FILTER(O) mlr_dsl_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_FILTER, B);
md_end_solo_filter(A) ::= MD_TOKEN_END MD_TOKEN_FILTER(O) md_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_FILTER, B);
sllv_add(past->pend_statements, A);
}
mlr_dsl_end_solo_gate(A) ::= MLR_DSL_END MLR_DSL_GATE(O) mlr_dsl_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_GATE, B);
md_end_solo_gate(A) ::= MD_TOKEN_END MD_TOKEN_GATE(O) md_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_GATE, B);
sllv_add(past->pend_statements, A);
}
mlr_dsl_end_solo_emit(A) ::= MLR_DSL_END mlr_dsl_emit(B). {
md_end_solo_emit(A) ::= MD_TOKEN_END md_emit(B). {
A = B;
sllv_add(past->pend_statements, A);
}
mlr_dsl_end_block_oosvar_assignment(A) ::= mlr_dsl_oosvar_assignment(B). {
md_end_block_oosvar_assignment(A) ::= md_oosvar_assignment(B). {
A = B;
sllv_add(past->pend_statements, A);
}
mlr_dsl_end_block_bare_boolean(A) ::= mlr_dsl_ternary(B). {
md_end_block_bare_boolean(A) ::= md_ternary(B). {
A = B;
sllv_add(past->pend_statements, A);
}
mlr_dsl_end_block_filter(A) ::= MLR_DSL_FILTER(O) mlr_dsl_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_FILTER, B);
md_end_block_filter(A) ::= MD_TOKEN_FILTER(O) md_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_FILTER, B);
sllv_add(past->pend_statements, A);
}
mlr_dsl_end_block_gate(A) ::= MLR_DSL_GATE(O) mlr_dsl_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MLR_DSL_AST_NODE_TYPE_GATE, B);
md_end_block_gate(A) ::= MD_TOKEN_GATE(O) md_ternary(B). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_GATE, B);
sllv_add(past->pend_statements, A);
}
mlr_dsl_end_block_emit(A) ::= mlr_dsl_emit(B). {
md_end_block_emit(A) ::= md_emit(B). {
A = B;
sllv_add(past->pend_statements, A);
}
// ----------------------------------------------------------------
mlr_dsl_oosvar_assignment(A) ::= mlr_dsl_oosvar_name(B) MLR_DSL_ASSIGN(O) mlr_dsl_ternary(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, C);
md_oosvar_assignment(A) ::= md_oosvar_name(B) MD_TOKEN_ASSIGN(O) md_ternary(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT, B, C);
}
mlr_dsl_moosvar_assignment(A) ::= mlr_dsl_moosvar_name(B) MLR_DSL_ASSIGN(O) mlr_dsl_ternary(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MLR_DSL_AST_NODE_TYPE_MOOSVAR_ASSIGNMENT, B, C);
md_moosvar_assignment(A) ::= md_moosvar_name(B) MD_TOKEN_ASSIGN(O) md_ternary(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_MOOSVAR_ASSIGNMENT, B, C);
}
// ----------------------------------------------------------------
@ -256,176 +256,176 @@ mlr_dsl_moosvar_assignment(A) ::= mlr_dsl_moosvar_name(B) MLR_DSL_ASSIGN(O) mlr
// * On the "@b" we append the next argument to get "temp @a,@b".
// * On the "@c" we append the next argument to get "temp @a,@b,@c".
// * On the "emit" we change the name to get "emit @a,@b,@c".
mlr_dsl_emit(A) ::= MLR_DSL_EMIT(O) mlr_dsl_emit_args(B). {
md_emit(A) ::= MD_TOKEN_EMIT(O) md_emit_args(B). {
A = mlr_dsl_ast_node_set_function_name(B, O->text);
}
// Need to invalidate "emit $a," -- use some non-empty-args expr.
mlr_dsl_emit_args(A) ::= . {
A = mlr_dsl_ast_node_alloc_zary("temp", MLR_DSL_AST_NODE_TYPE_EMIT);
md_emit_args(A) ::= . {
A = mlr_dsl_ast_node_alloc_zary("temp", MD_AST_NODE_TYPE_EMIT);
}
mlr_dsl_emit_args(A) ::= mlr_dsl_oosvar_name(B). {
A = mlr_dsl_ast_node_alloc_unary("temp", MLR_DSL_AST_NODE_TYPE_EMIT, B);
md_emit_args(A) ::= md_oosvar_name(B). {
A = mlr_dsl_ast_node_alloc_unary("temp", MD_AST_NODE_TYPE_EMIT, B);
}
mlr_dsl_emit_args(A) ::= mlr_dsl_emit_args(B) MLR_DSL_COMMA mlr_dsl_oosvar_name(C). {
md_emit_args(A) ::= md_emit_args(B) MD_TOKEN_COMMA md_oosvar_name(C). {
A = mlr_dsl_ast_node_append_arg(B, C);
}
// ================================================================
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);
md_ternary(A) ::= md_logical_or_term(B) MD_TOKEN_QUESTION_MARK md_ternary(C) MD_TOKEN_COLON md_ternary(D). {
A = mlr_dsl_ast_node_alloc_ternary("? :", MD_AST_NODE_TYPE_OPERATOR, B, C, D);
}
mlr_dsl_ternary(A) ::= mlr_dsl_logical_or_term(B). {
md_ternary(A) ::= md_logical_or_term(B). {
A = B;
}
// ================================================================
mlr_dsl_logical_or_term(A) ::= mlr_dsl_logical_xor_term(B). {
md_logical_or_term(A) ::= md_logical_xor_term(B). {
A = B;
}
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);
md_logical_or_term(A) ::= md_logical_or_term(B) MD_TOKEN_LOGICAL_OR(O) md_logical_xor_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
mlr_dsl_logical_xor_term(A) ::= mlr_dsl_logical_and_term(B). {
md_logical_xor_term(A) ::= md_logical_and_term(B). {
A = B;
}
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);
md_logical_xor_term(A) ::= md_logical_xor_term(B) MD_TOKEN_LOGICAL_XOR(O) md_logical_and_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
mlr_dsl_logical_and_term(A) ::= mlr_dsl_eqne_term(B). {
md_logical_and_term(A) ::= md_eqne_term(B). {
A = B;
}
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);
md_logical_and_term(A) ::= md_logical_and_term(B) MD_TOKEN_LOGICAL_AND(O) md_eqne_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
mlr_dsl_eqne_term(A) ::= mlr_dsl_cmp_term(B). {
md_eqne_term(A) ::= md_cmp_term(B). {
A = B;
}
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);
md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_MATCHES(O) md_cmp_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_DOES_NOT_MATCH(O) md_cmp_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_EQ(O) md_cmp_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_eqne_term(A) ::= md_eqne_term(B) MD_TOKEN_NE(O) md_cmp_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
mlr_dsl_cmp_term(A) ::= mlr_dsl_bitwise_or_term(B). {
md_cmp_term(A) ::= md_bitwise_or_term(B). {
A = B;
}
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);
md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_GT(O) md_bitwise_or_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_GE(O) md_bitwise_or_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_LT(O) md_bitwise_or_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_cmp_term(A) ::= md_cmp_term(B) MD_TOKEN_LE(O) md_bitwise_or_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
mlr_dsl_bitwise_or_term(A) ::= mlr_dsl_bitwise_xor_term(B). {
md_bitwise_or_term(A) ::= md_bitwise_xor_term(B). {
A = B;
}
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);
md_bitwise_or_term(A) ::= md_bitwise_or_term(B) MD_TOKEN_BITWISE_OR(O) md_bitwise_xor_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
mlr_dsl_bitwise_xor_term(A) ::= mlr_dsl_bitwise_and_term(B). {
md_bitwise_xor_term(A) ::= md_bitwise_and_term(B). {
A = B;
}
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);
md_bitwise_xor_term(A) ::= md_bitwise_xor_term(B) MD_TOKEN_BITWISE_XOR(O) md_bitwise_and_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
mlr_dsl_bitwise_and_term(A) ::= mlr_dsl_bitwise_shift_term(B). {
md_bitwise_and_term(A) ::= md_bitwise_shift_term(B). {
A = B;
}
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);
md_bitwise_and_term(A) ::= md_bitwise_and_term(B) MD_TOKEN_BITWISE_AND(O) md_bitwise_shift_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
mlr_dsl_bitwise_shift_term(A) ::= mlr_dsl_addsubdot_term(B). {
md_bitwise_shift_term(A) ::= md_addsubdot_term(B). {
A = B;
}
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);
md_bitwise_shift_term(A) ::= md_bitwise_shift_term(B) MD_TOKEN_BITWISE_LSH(O) md_addsubdot_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_bitwise_shift_term(A) ::= md_bitwise_shift_term(B) MD_TOKEN_BITWISE_RSH(O) md_addsubdot_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
mlr_dsl_addsubdot_term(A) ::= mlr_dsl_muldiv_term(B). {
md_addsubdot_term(A) ::= md_muldiv_term(B). {
A = B;
}
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);
md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_PLUS(O) md_muldiv_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_MINUS(O) md_muldiv_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_addsubdot_term(A) ::= md_addsubdot_term(B) MD_TOKEN_DOT(O) md_muldiv_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
mlr_dsl_muldiv_term(A) ::= mlr_dsl_unary_bitwise_op_term(B). {
md_muldiv_term(A) ::= md_unary_bitwise_op_term(B). {
A = B;
}
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);
md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_TIMES(O) md_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_DIVIDE(O) md_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_INT_DIVIDE(O) md_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, 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);
md_muldiv_term(A) ::= md_muldiv_term(B) MD_TOKEN_MOD(O) md_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
// ----------------------------------------------------------------
mlr_dsl_unary_bitwise_op_term(A) ::= mlr_dsl_pow_term(B). {
md_unary_bitwise_op_term(A) ::= md_pow_term(B). {
A = B;
}
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);
md_unary_bitwise_op_term(A) ::= MD_TOKEN_PLUS(O) md_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, 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);
md_unary_bitwise_op_term(A) ::= MD_TOKEN_MINUS(O) md_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, 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);
md_unary_bitwise_op_term(A) ::= MD_TOKEN_LOGICAL_NOT(O) md_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, 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);
md_unary_bitwise_op_term(A) ::= MD_TOKEN_BITWISE_NOT(O) md_unary_bitwise_op_term(C). {
A = mlr_dsl_ast_node_alloc_unary(O->text, MD_AST_NODE_TYPE_OPERATOR, C);
}
// ----------------------------------------------------------------
mlr_dsl_pow_term(A) ::= mlr_dsl_atom_or_fcn(B). {
md_pow_term(A) ::= md_atom_or_fcn(B). {
A = B;
}
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);
md_pow_term(A) ::= md_atom_or_fcn(B) MD_TOKEN_POW(O) md_pow_term(C). {
A = mlr_dsl_ast_node_alloc_binary(O->text, MD_AST_NODE_TYPE_OPERATOR, B, C);
}
@ -435,15 +435,15 @@ mlr_dsl_pow_term(A) ::= mlr_dsl_atom_or_fcn(B) MLR_DSL_POW(O) mlr_dsl_pow_term(C
// lexer to give us field names with leading "$" so we can confidently strip it
// off here.
mlr_dsl_atom_or_fcn(A) ::= mlr_dsl_field_name(B). {
md_atom_or_fcn(A) ::= md_field_name(B). {
A = B;
}
mlr_dsl_field_name(A) ::= MLR_DSL_FIELD_NAME(B). {
md_field_name(A) ::= MD_TOKEN_FIELD_NAME(B). {
char* dollar_name = B->text;
char* no_dollar_name = &dollar_name[1];
A = mlr_dsl_ast_node_alloc(no_dollar_name, B->type);
}
mlr_dsl_field_name(A) ::= MLR_DSL_BRACED_FIELD_NAME(B). {
md_field_name(A) ::= MD_TOKEN_BRACED_FIELD_NAME(B). {
// Replace "${field.name}" with just "field.name"
char* dollar_name = B->text;
char* no_dollar_name = &dollar_name[2];
@ -453,15 +453,15 @@ mlr_dsl_field_name(A) ::= MLR_DSL_BRACED_FIELD_NAME(B). {
A = mlr_dsl_ast_node_alloc(no_dollar_name, B->type);
}
mlr_dsl_atom_or_fcn(A) ::= mlr_dsl_oosvar_name(B). {
md_atom_or_fcn(A) ::= md_oosvar_name(B). {
A = B;
}
mlr_dsl_oosvar_name(A) ::= MLR_DSL_OOSVAR_NAME(B). {
md_oosvar_name(A) ::= MD_TOKEN_OOSVAR_NAME(B). {
char* at_name = B->text;
char* no_at_name = &at_name[1];
A = mlr_dsl_ast_node_alloc(no_at_name, B->type);
}
mlr_dsl_oosvar_name(A) ::= MLR_DSL_BRACED_OOSVAR_NAME(B). {
md_oosvar_name(A) ::= MD_TOKEN_BRACED_OOSVAR_NAME(B). {
// Replace "@{field.name}" with just "field.name"
char* at_name = B->text;
char* no_at_name = &at_name[2];
@ -471,15 +471,15 @@ mlr_dsl_oosvar_name(A) ::= MLR_DSL_BRACED_OOSVAR_NAME(B). {
A = mlr_dsl_ast_node_alloc(no_at_name, B->type);
}
mlr_dsl_atom_or_fcn(A) ::= mlr_dsl_moosvar_name(B). {
md_atom_or_fcn(A) ::= md_moosvar_name(B). {
A = B;
}
mlr_dsl_moosvar_name(A) ::= MLR_DSL_MOOSVAR_NAME(B). {
md_moosvar_name(A) ::= MD_TOKEN_MOOSVAR_NAME(B). {
char* at_name = B->text;
char* no_at_name = &at_name[2];
A = mlr_dsl_ast_node_alloc(no_at_name, B->type);
}
mlr_dsl_moosvar_name(A) ::= MLR_DSL_BRACED_MOOSVAR_NAME(B). {
md_moosvar_name(A) ::= MD_TOKEN_BRACED_MOOSVAR_NAME(B). {
// Replace "@%{field.name}" with just "field.name"
char* at_name = B->text;
char* no_at_name = &at_name[3];
@ -489,24 +489,24 @@ mlr_dsl_moosvar_name(A) ::= MLR_DSL_BRACED_MOOSVAR_NAME(B). {
A = mlr_dsl_ast_node_alloc(no_at_name, B->type);
}
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_NUMBER(B). {
md_atom_or_fcn(A) ::= MD_TOKEN_NUMBER(B). {
A = B;
}
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_TRUE(B). {
md_atom_or_fcn(A) ::= MD_TOKEN_TRUE(B). {
A = B;
}
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_FALSE(B). {
md_atom_or_fcn(A) ::= MD_TOKEN_FALSE(B). {
A = B;
}
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_STRING(B). {
md_atom_or_fcn(A) ::= MD_TOKEN_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);
}
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_REGEXI(B). {
md_atom_or_fcn(A) ::= MD_TOKEN_REGEXI(B). {
char* input = B->text;
char* stripped = &input[1];
int len = strlen(input);
@ -514,11 +514,11 @@ mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_REGEXI(B). {
A = mlr_dsl_ast_node_alloc(stripped, B->type);
}
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_CONTEXT_VARIABLE(B). {
md_atom_or_fcn(A) ::= MD_TOKEN_CONTEXT_VARIABLE(B). {
A = B;
}
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_LPAREN mlr_dsl_logical_or_term(B) MLR_DSL_RPAREN. {
md_atom_or_fcn(A) ::= MD_TOKEN_LPAREN md_logical_or_term(B) MD_TOKEN_RPAREN. {
A = B;
}
@ -529,17 +529,17 @@ mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_LPAREN mlr_dsl_logical_or_term(B) MLR_DSL_RPA
// * 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)".
mlr_dsl_atom_or_fcn(A) ::= MLR_DSL_FCN_NAME(O) MLR_DSL_LPAREN mlr_dsl_fcn_args(B) MLR_DSL_RPAREN. {
md_atom_or_fcn(A) ::= MD_TOKEN_FCN_NAME(O) MD_TOKEN_LPAREN md_fcn_args(B) MD_TOKEN_RPAREN. {
A = mlr_dsl_ast_node_set_function_name(B, O->text);
}
// Need to invalidate "f(10,)" -- use some non-empty-args expr.
mlr_dsl_fcn_args(A) ::= . {
A = mlr_dsl_ast_node_alloc_zary("anon", MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME);
md_fcn_args(A) ::= . {
A = mlr_dsl_ast_node_alloc_zary("anon", MD_AST_NODE_TYPE_FUNCTION_NAME);
}
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);
md_fcn_args(A) ::= md_logical_or_term(B). {
A = mlr_dsl_ast_node_alloc_unary("anon", MD_AST_NODE_TYPE_FUNCTION_NAME, B);
}
mlr_dsl_fcn_args(A) ::= mlr_dsl_fcn_args(B) MLR_DSL_COMMA mlr_dsl_logical_or_term(C). {
md_fcn_args(A) ::= md_fcn_args(B) MD_TOKEN_COMMA md_logical_or_term(C). {
A = mlr_dsl_ast_node_append_arg(B, C);
}

View file

@ -2111,17 +2111,17 @@ static lrec_evaluator_t* lrec_evaluator_alloc_from_ast_aux(mlr_dsl_ast_node_t* p
int type_inferencing, function_lookup_t* fcn_lookup_table)
{
if (pnode->pchildren == NULL) { // leaf node
if (pnode->type == MLR_DSL_AST_NODE_TYPE_FIELD_NAME) {
if (pnode->type == MD_AST_NODE_TYPE_FIELD_NAME) {
return lrec_evaluator_alloc_from_field_name(pnode->text, type_inferencing);
} else if (pnode->type == MLR_DSL_AST_NODE_TYPE_OOSVAR_NAME) {
} else if (pnode->type == MD_AST_NODE_TYPE_OOSVAR_NAME) {
return lrec_evaluator_alloc_from_oosvar_name(pnode->text);
} else if (pnode->type == MLR_DSL_AST_NODE_TYPE_STRNUM_LITERAL) {
} else if (pnode->type == MD_AST_NODE_TYPE_STRNUM_LITERAL) {
return lrec_evaluator_alloc_from_strnum_literal(pnode->text, type_inferencing);
} else if (pnode->type == MLR_DSL_AST_NODE_TYPE_BOOLEAN_LITERAL) {
} else if (pnode->type == MD_AST_NODE_TYPE_BOOLEAN_LITERAL) {
return lrec_evaluator_alloc_from_boolean_literal(pnode->text);
} else if (pnode->type == MLR_DSL_AST_NODE_TYPE_REGEXI) {
} else if (pnode->type == MD_AST_NODE_TYPE_REGEXI) {
return lrec_evaluator_alloc_from_strnum_literal(pnode->text, type_inferencing);
} else if (pnode->type == MLR_DSL_AST_NODE_TYPE_CONTEXT_VARIABLE) {
} else if (pnode->type == MD_AST_NODE_TYPE_CONTEXT_VARIABLE) {
return lrec_evaluator_alloc_from_context_variable(pnode->text);
} else {
fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n",
@ -2129,8 +2129,8 @@ static lrec_evaluator_t* lrec_evaluator_alloc_from_ast_aux(mlr_dsl_ast_node_t* p
exit(1);
}
} else { // operator/function
if ((pnode->type != MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME)
&& (pnode->type != MLR_DSL_AST_NODE_TYPE_OPERATOR)) {
if ((pnode->type != MD_AST_NODE_TYPE_FUNCTION_NAME)
&& (pnode->type != MD_AST_NODE_TYPE_OPERATOR)) {
fprintf(stderr, "%s: internal coding error detected in file %s at line %d: node type %s\n",
MLR_GLOBALS.argv0, __FILE__, __LINE__, mlr_dsl_ast_node_describe_type(pnode->type));
exit(1);
@ -2153,10 +2153,10 @@ static lrec_evaluator_t* lrec_evaluator_alloc_from_ast_aux(mlr_dsl_ast_node_t* p
mlr_dsl_ast_node_t* parg2_node = pnode->pchildren->phead->pnext->pvvalue;
int type2 = parg2_node->type;
if ((streq(func_name, "=~") || streq(func_name, "!=~")) && type2 == MLR_DSL_AST_NODE_TYPE_STRNUM_LITERAL) {
if ((streq(func_name, "=~") || streq(func_name, "!=~")) && type2 == MD_AST_NODE_TYPE_STRNUM_LITERAL) {
lrec_evaluator_t* parg1 = lrec_evaluator_alloc_from_ast_aux(parg1_node, type_inferencing, fcn_lookup_table);
pevaluator = lrec_evaluator_alloc_from_binary_regex_arg2_func_name(func_name, parg1, parg2_node->text, FALSE);
} else if ((streq(func_name, "=~") || streq(func_name, "!=~")) && type2 == MLR_DSL_AST_NODE_TYPE_REGEXI) {
} else if ((streq(func_name, "=~") || streq(func_name, "!=~")) && type2 == MD_AST_NODE_TYPE_REGEXI) {
lrec_evaluator_t* parg1 = lrec_evaluator_alloc_from_ast_aux(parg1_node, type_inferencing, fcn_lookup_table);
pevaluator = lrec_evaluator_alloc_from_binary_regex_arg2_func_name(func_name, parg1, parg2_node->text,
TYPE_INFER_STRING_FLOAT_INT);
@ -2175,13 +2175,13 @@ static lrec_evaluator_t* lrec_evaluator_alloc_from_ast_aux(mlr_dsl_ast_node_t* p
mlr_dsl_ast_node_t* parg3_node = pnode->pchildren->phead->pnext->pnext->pvvalue;
int type2 = parg2_node->type;
if ((streq(func_name, "sub") || streq(func_name, "gsub")) && type2 == MLR_DSL_AST_NODE_TYPE_STRNUM_LITERAL) {
if ((streq(func_name, "sub") || streq(func_name, "gsub")) && type2 == MD_AST_NODE_TYPE_STRNUM_LITERAL) {
// sub/gsub-regex special case:
lrec_evaluator_t* parg1 = lrec_evaluator_alloc_from_ast_aux(parg1_node, type_inferencing, fcn_lookup_table);
lrec_evaluator_t* parg3 = lrec_evaluator_alloc_from_ast_aux(parg3_node, type_inferencing, fcn_lookup_table);
pevaluator = lrec_evaluator_alloc_from_ternary_regex_arg2_func_name(func_name, parg1, parg2_node->text, FALSE, parg3);
} else if ((streq(func_name, "sub") || streq(func_name, "gsub")) && type2 == MLR_DSL_AST_NODE_TYPE_REGEXI) {
} else if ((streq(func_name, "sub") || streq(func_name, "gsub")) && type2 == MD_AST_NODE_TYPE_REGEXI) {
// sub/gsub-regex special case:
lrec_evaluator_t* parg1 = lrec_evaluator_alloc_from_ast_aux(parg1_node, type_inferencing, fcn_lookup_table);
lrec_evaluator_t* parg3 = lrec_evaluator_alloc_from_ast_aux(parg3_node, type_inferencing, fcn_lookup_table);
@ -2332,11 +2332,11 @@ static char * test3() {
lrec_evaluator_t* px2 = lrec_evaluator_alloc_from_n_nn_func(n_nn_times_func, px, px);
lrec_evaluator_t* p4 = lrec_evaluator_alloc_from_n_nn_func(n_nn_times_func, p2, p2);
mlr_dsl_ast_node_t* pxnode = mlr_dsl_ast_node_alloc("x", MLR_DSL_AST_NODE_TYPE_FIELD_NAME);
mlr_dsl_ast_node_t* plognode = mlr_dsl_ast_node_alloc_zary("log", MLR_DSL_AST_NODE_TYPE_FUNCTION_NAME);
mlr_dsl_ast_node_t* pxnode = mlr_dsl_ast_node_alloc("x", MD_AST_NODE_TYPE_FIELD_NAME);
mlr_dsl_ast_node_t* plognode = mlr_dsl_ast_node_alloc_zary("log", MD_AST_NODE_TYPE_FUNCTION_NAME);
mlr_dsl_ast_node_t* plogxnode = mlr_dsl_ast_node_append_arg(plognode, pxnode);
mlr_dsl_ast_node_t* p2node = mlr_dsl_ast_node_alloc("2", MLR_DSL_AST_NODE_TYPE_STRNUM_LITERAL);
mlr_dsl_ast_node_t* p2logxnode = mlr_dsl_ast_node_alloc_binary("*", MLR_DSL_AST_NODE_TYPE_OPERATOR,
mlr_dsl_ast_node_t* p2node = mlr_dsl_ast_node_alloc("2", MD_AST_NODE_TYPE_STRNUM_LITERAL);
mlr_dsl_ast_node_t* p2logxnode = mlr_dsl_ast_node_alloc_binary("*", MD_AST_NODE_TYPE_OPERATOR,
p2node, plogxnode);
lrec_evaluator_t* pastr = lrec_evaluator_alloc_from_ast(p2logxnode, TYPE_INFER_STRING_FLOAT_INT);

View file

@ -270,7 +270,7 @@ static void evaluate_statements(
int node_type = pstatement->ast_node_type;
if (node_type == MLR_DSL_AST_NODE_TYPE_SREC_ASSIGNMENT || node_type == MLR_DSL_AST_NODE_TYPE_OOSVAR_ASSIGNMENT) {
if (node_type == MD_AST_NODE_TYPE_SREC_ASSIGNMENT || node_type == MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT) {
mlr_dsl_cst_statement_item_t* pitem = pstatement->pitems->phead->pvvalue;
char* output_field_name = pitem->output_field_name;
int is_oosvar = pitem->is_oosvar;
@ -296,7 +296,7 @@ static void evaluate_statements(
lrec_put(pinrec, output_field_name, "bug", NO_FREE);
}
} else if (node_type == MLR_DSL_AST_NODE_TYPE_FILTER) {
} else if (node_type == MD_AST_NODE_TYPE_FILTER) {
mlr_dsl_cst_statement_item_t* pitem = pstatement->pitems->phead->pvvalue;
lrec_evaluator_t* pevaluator = pitem->pevaluator;
@ -310,7 +310,7 @@ static void evaluate_statements(
}
}
} else if (node_type == MLR_DSL_AST_NODE_TYPE_GATE) {
} else if (node_type == MD_AST_NODE_TYPE_GATE) {
mlr_dsl_cst_statement_item_t* pitem = pstatement->pitems->phead->pvvalue;
lrec_evaluator_t* pevaluator = pitem->pevaluator;
@ -323,7 +323,7 @@ static void evaluate_statements(
break;
}
} else if (node_type == MLR_DSL_AST_NODE_TYPE_EMIT) {
} else if (node_type == MD_AST_NODE_TYPE_EMIT) {
lrec_t* prec_to_emit = lrec_unbacked_alloc();
for (sllve_t* pf = pstatement->pitems->phead; pf != NULL; pf = pf->pnext) {
mlr_dsl_cst_statement_item_t* pitem = pf->pvvalue;

View file

@ -87,7 +87,7 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
pstatement->ast_node_type = past->type;
pstatement->pitems = sllv_alloc();
if (past->type == MLR_DSL_AST_NODE_TYPE_SREC_ASSIGNMENT) {
if (past->type == MD_AST_NODE_TYPE_SREC_ASSIGNMENT) {
if ((past->pchildren == NULL) || (past->pchildren->length != 2)) {
fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n",
MLR_GLOBALS.argv0, __FILE__, __LINE__);
@ -97,7 +97,7 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
mlr_dsl_ast_node_t* pleft = past->pchildren->phead->pvvalue;
mlr_dsl_ast_node_t* pright = past->pchildren->phead->pnext->pvvalue;
if (pleft->type != MLR_DSL_AST_NODE_TYPE_FIELD_NAME) {
if (pleft->type != MD_AST_NODE_TYPE_FIELD_NAME) {
fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n",
MLR_GLOBALS.argv0, __FILE__, __LINE__);
exit(1);
@ -112,7 +112,7 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
FALSE,
lrec_evaluator_alloc_from_ast(pright, type_inferencing)));
} else if (past->type == MLR_DSL_AST_NODE_TYPE_OOSVAR_ASSIGNMENT) {
} else if (past->type == MD_AST_NODE_TYPE_OOSVAR_ASSIGNMENT) {
if ((past->pchildren == NULL) || (past->pchildren->length != 2)) {
fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n",
MLR_GLOBALS.argv0, __FILE__, __LINE__);
@ -122,7 +122,7 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
mlr_dsl_ast_node_t* pleft = past->pchildren->phead->pvvalue;
mlr_dsl_ast_node_t* pright = past->pchildren->phead->pnext->pvvalue;
if (pleft->type != MLR_DSL_AST_NODE_TYPE_OOSVAR_NAME) {
if (pleft->type != MD_AST_NODE_TYPE_OOSVAR_NAME) {
fprintf(stderr, "%s: internal coding error detected in file %s at line %d.\n",
MLR_GLOBALS.argv0, __FILE__, __LINE__);
exit(1);
@ -137,21 +137,21 @@ static mlr_dsl_cst_statement_t* cst_statement_alloc(mlr_dsl_ast_node_t* past, in
TRUE,
lrec_evaluator_alloc_from_ast(pright, type_inferencing)));
} else if (past->type == MLR_DSL_AST_NODE_TYPE_FILTER) {
} else if (past->type == MD_AST_NODE_TYPE_FILTER) {
mlr_dsl_ast_node_t* pnode = past->pchildren->phead->pvvalue;
sllv_add(pstatement->pitems, mlr_dsl_cst_statement_item_alloc(
NULL,
TRUE,
lrec_evaluator_alloc_from_ast(pnode, type_inferencing)));
} else if (past->type == MLR_DSL_AST_NODE_TYPE_GATE) {
} else if (past->type == MD_AST_NODE_TYPE_GATE) {
mlr_dsl_ast_node_t* pnode = past->pchildren->phead->pvvalue;
sllv_add(pstatement->pitems, mlr_dsl_cst_statement_item_alloc(
NULL,
TRUE,
lrec_evaluator_alloc_from_ast(pnode, type_inferencing)));
} else if (past->type == MLR_DSL_AST_NODE_TYPE_EMIT) {
} else if (past->type == MD_AST_NODE_TYPE_EMIT) {
// Loop over oosvar names to emit in e.g. 'emit @a, @b, @c'.
for (sllve_t* pe = past->pchildren->phead; pe != NULL; pe = pe->pnext) {
mlr_dsl_ast_node_t* pnode = pe->pvvalue;