summaryrefslogtreecommitdiffstats
path: root/libsmartcols/src/filter-scanner.l
diff options
context:
space:
mode:
Diffstat (limited to 'libsmartcols/src/filter-scanner.l')
-rw-r--r--libsmartcols/src/filter-scanner.l62
1 files changed, 62 insertions, 0 deletions
diff --git a/libsmartcols/src/filter-scanner.l b/libsmartcols/src/filter-scanner.l
new file mode 100644
index 0000000..501b603
--- /dev/null
+++ b/libsmartcols/src/filter-scanner.l
@@ -0,0 +1,62 @@
+%{
+#include "smartcolsP.h"
+#include "filter-parser.h" /* define tokens (T_*) */
+%}
+
+%option reentrant bison-bridge noyywrap noinput nounput
+
+id [a-zA-Z][a-zA-Z_.%:/\-0-9]*
+int [0-9]+
+blank [ \t]
+str_qu \"[^\"\n]*\"
+str_ap \'[^\'\n]*\'
+
+%%
+
+{blank}+ ; /* ignore */
+[\n]+ ; /* ignore */
+
+"(" return '(';
+")" return ')';
+"'" return '\'';
+
+and|AND|"&&" return T_AND;
+or|OR|"||" return T_OR;
+"!"|not|NOT return T_NEG;
+
+eq|EQ|"==" return T_EQ;
+ne|NE|"!=" return T_NE;
+
+le|LE|"<=" return T_LE;
+lt|LT|"<" return T_LT;
+
+ge|GE|">=" return T_GE;
+gt|GT|">" return T_GT;
+
+"=~" return T_REG;
+"!~" return T_NREG;
+
+false|FALSE return T_FALSE;
+true|TRUE return T_TRUE;
+
+{int}+\.{int}+ {
+ yylval->param_float = strtold(yytext, NULL);
+ return T_FLOAT;
+}
+
+{int}+ {
+ yylval->param_number = (int64_t) strtoumax(yytext, NULL, 10);
+ return T_NUMBER;
+}
+
+{id} {
+ yylval->param_name = yytext;
+ return T_HOLDER;
+}
+
+{str_ap}|{str_qu} {
+ yylval->param_string = yytext;
+ return T_STRING;
+}
+
+