influxdb/parser/query.lex

137 lines
5.1 KiB
Plaintext
Raw Normal View History

%{
#include <stdlib.h>
#include <string.h>
#include "query_types.h"
#include "y.tab.h"
2013-10-07 16:35:04 +00:00
#define YY_USER_ACTION \
do { \
yylloc_param->first_line = yylloc_param->last_line; \
yylloc_param->first_column = yylloc_param->last_column; \
yylloc_param->last_line = yylineno; \
yylloc_param->last_column += yyleng; \
2013-10-07 16:35:04 +00:00
} while(0);
%}
2013-10-07 16:35:04 +00:00
static int yycolumn = 1;
%option reentrant
%option debug
%option bison-bridge
2013-10-07 16:35:04 +00:00
%option bison-locations
%option noyywrap
%s FROM_CLAUSE REGEX_CONDITION
%s LIST_SERIES
%x IN_REGEX
%x IN_TABLE_NAME
%x IN_SIMPLE_NAME
%%
; { return *yytext; }
, { return *yytext; }
"merge" { return MERGE; }
2013-12-18 17:28:38 +00:00
"list" { return LIST; }
"series" { BEGIN(LIST_SERIES); return SERIES; }
2013-12-23 22:30:21 +00:00
"continuous query" { return CONTINUOUS_QUERY; }
"continuous queries" { return CONTINUOUS_QUERIES; }
"inner" { return INNER; }
"join" { return JOIN; }
"from" { BEGIN(FROM_CLAUSE); return FROM; }
<LIST_SERIES,FROM_CLAUSE,REGEX_CONDITION>\/ { BEGIN(IN_REGEX); yylval->string=calloc(1, sizeof(char)); }
<IN_REGEX>\\\/ {
yylval->string = realloc(yylval->string, strlen(yylval->string) + 2);
strcat(yylval->string, "/");
}
<IN_REGEX><<EOF>> {
free(yylval->string);
BEGIN(INITIAL);
return UNKNOWN;
}
<IN_REGEX>\\ {
yylval->string = realloc(yylval->string, strlen(yylval->string) + 2);
strcat(yylval->string, "\\");
}
<IN_REGEX>\/ {
BEGIN(INITIAL);
return REGEX_STRING;
}
<IN_REGEX>\/i {
BEGIN(INITIAL);
return INSENSITIVE_REGEX_STRING;
}
<IN_REGEX>[^\\/]* {
yylval->string=realloc(yylval->string, strlen(yylval->string) + strlen(yytext) + 1);
strcat(yylval->string, yytext);
}
"include" { return INCLUDE; }
"spaces" { return SPACES; }
"where" { BEGIN(INITIAL); return WHERE; }
"as" { return AS; }
"select" { return SELECT; }
2014-03-09 03:28:54 +00:00
"explain" { return EXPLAIN; }
"delete" { return DELETE; }
2013-12-23 22:30:21 +00:00
"drop series" { return DROP_SERIES; }
"drop" { return DROP; }
"limit" { BEGIN(INITIAL); return LIMIT; }
"order" { BEGIN(INITIAL); return ORDER; }
"asc" { return ASC; }
2013-12-02 16:42:54 +00:00
"in" { yylval->string = strdup(yytext); return OPERATION_IN; }
"desc" { return DESC; }
"group" { BEGIN(INITIAL); return GROUP; }
"by" { return BY; }
2013-12-23 22:30:21 +00:00
"into" { return INTO; }
"(" { yylval->character = *yytext; return *yytext; }
")" { yylval->character = *yytext; return *yytext; }
"+" { yylval->character = *yytext; return *yytext; }
"-" { yylval->character = *yytext; return *yytext; }
"*" { yylval->character = *yytext; return *yytext; }
"/" { yylval->character = *yytext; return *yytext; }
2013-10-07 16:55:15 +00:00
"and" { return AND; }
"or" { return OR; }
"=~" { BEGIN(REGEX_CONDITION); yylval->string = strdup(yytext); return REGEX_OP; }
"=" { yylval->string = strdup(yytext); return OPERATION_EQUAL; }
"!~" { BEGIN(REGEX_CONDITION); yylval->string = strdup(yytext); return NEGATION_REGEX_OP; }
"<>" { yylval->string = strdup(yytext); return OPERATION_NE; }
"<" { yylval->string = strdup(yytext); return OPERATION_LT; }
">" { yylval->string = strdup(yytext); return OPERATION_GT; }
"<=" { yylval->string = strdup(yytext); return OPERATION_LE; }
">=" { yylval->string = strdup(yytext); return OPERATION_GE; }
[0-9]+ { yylval->string = strdup(yytext); return INT_VALUE; }
([0-9]+|[0-9]*\.[0-9]+|[0-9]+\.[0-9]*)([usmhdwy]|ms) { yylval->string = strdup(yytext); return DURATION; }
2013-10-16 17:27:53 +00:00
[0-9]*\.[0-9]+|[0-9]+\.[0-9]* { yylval->string = strdup(yytext); return FLOAT_VALUE; }
true|false { yylval->string = strdup(yytext); return BOOLEAN_VALUE; }
[a-zA-Z0-9_]* { yylval->string = strdup(yytext); return SIMPLE_NAME; }
\" { BEGIN(IN_SIMPLE_NAME); yylval->string=calloc(1, sizeof(char)); }
<IN_SIMPLE_NAME>\\\" {
yylval->string = realloc(yylval->string, strlen(yylval->string) + 1);
strcat(yylval->string, "\"");
}
<IN_SIMPLE_NAME>\" {
BEGIN(INITIAL);
return SIMPLE_NAME;
}
<IN_SIMPLE_NAME>[^\\"]* {
yylval->string=realloc(yylval->string, strlen(yylval->string) + strlen(yytext) + 1);
strcat(yylval->string, yytext);
}
[a-zA-Z0-9_][a-zA-Z0-9._]* { yylval->string = strdup(yytext); return TABLE_NAME; }
[:\[a-zA-Z0-9_][:\[\]a-zA-Z0-9._]* { yylval->string = strdup(yytext); return INTO_NAME; }
2013-12-02 16:42:54 +00:00
\'[^\']*\' {
yytext[yyleng-1] = '\0';
yylval->string = strdup(yytext+1);
return STRING_VALUE;
}
[\t ]* {}
. { return *yytext; }