commit - 9a479d01b991c04bb98e67b646037baba6394b60
commit + 57fe6b841837da908c6d0d71241fb7e15b8231f4
blob - 3a5bd90f68bfd046e33c9c01b38eb55497d04f5b
blob + 3a8a3f8563187e826947f4d44c69c760c34542dd
--- src/parse_query.l
+++ src/parse_query.l
/*
- * Copyright © 2018 Sergey Bronnikov
+ * Copyright © 2018-2019 Sergey Bronnikov
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
*
*/
-/*
- * https://github.com/jgarzik/sqlfun/blob/master/sql.l
- * https://github.com/itechbear/SimpleQueryParser/blob/master/lexer.l
- * https://github.com/wclever/NdYaccLexTool/tree/master/progs
- *
- */
-
%{
#include <stdio.h>
#include "parse_query.tab.h"
%option noyywrap
FORMAT "junit"|"testanything"|"subunit_v1"|"subunit_v2"
-FMT "fmt"
-SUITE "suite"
-TEST "test"
-PASSRATE "passrate"
-CREATED "created"
-HOSTNAME "hostname"
+FMT_KEYWORD "fmt"
+SUITE_KEYWORD "suite"
+TEST_KEYWORD "test"
+PASSRATE_KEYWORD "passrate"
+CREATED_KEYWORD "created"
+HOSTNAME_KEYWORD "hostname"
HOST [A-Za-z][A-Za-z0-9\.\-]+
DIGIT [0-9]
SYMBOLS [A-Za-z0-9_\-]
%%
-">" return GT;
-"<" return LT;
-"=" return EQ;
-"<=" return LE;
+"=" return EQ;
+">" return GT;
">=" return GE;
-":" return COLON;
-{FMT}{1} return FMT;
-{SUITE}{1} return SUITE;
-{TEST}{1} return TEST;
-{HOSTNAME}{1} return HOSTNAME;
-{CREATED}{1} return CREATED;
-{PASSRATE}{1} return PASSRATE;
+"<" return LT;
+"<=" return LE;
+":" return COLON;
+{FMT_KEYWORD}{1} return FMT_KEYWORD;
+{SUITE_KEYWORD}{1} return SUITE_KEYWORD;
+{TEST_KEYWORD}{1} return TEST_KEYWORD;
+{HOSTNAME_KEYWORD}{1} return HOSTNAME_KEYWORD;
+{CREATED_KEYWORD}{1} return CREATED_KEYWORD;
+{PASSRATE_KEYWORD}{1} return PASSRATE_KEYWORD;
{FORMAT}{1} return FORMAT;
{DIGIT}{8} return DATE;
{DIGIT}+ return NUMBER;
{HOST}{1} return HOST;
{SYMBOLS}+ return NAME;
-\n return NL;
+\n return NL;
[ \t]+ /* skip whitespace */;
-. { yyerror("Unrecognized character"); }
+. { yyerror("Unrecognized character"); }
%%
blob - 14b76966b8e93ea45f68dee3fa72536c324eb772
blob + 859393e98dbffe5a0f94f07a03fc67045e5758be
--- src/parse_query.y
+++ src/parse_query.y
/*
- * Copyright © 2018 Sergey Bronnikov
+ * Copyright © 2018-2019 Sergey Bronnikov
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
int yylex(void);
%}
-%token GT LT LE GE EQ COLON NL
-%token FMT SUITE TEST HOSTNAME HOST CREATED PASSRATE
-%token FORMAT DATE NAME NUMBER
+%token EQ GT GE LT LE COLON NL
+%token FMT_KEYWORD SUITE_KEYWORD TEST_KEYWORD HOSTNAME_KEYWORD
+%token CREATED_KEYWORD PASSRATE_KEYWORD
+%token HOST FORMAT DATE NAME NUMBER
/*
* https://github.com/jgarzik/sqlfun/blob/master/sql.y
+ * https://github.com/jgarzik/sqlfun/blob/master/sql.l
+ *
* https://github.com/itechbear/SimpleQueryParser/blob/master/parser.y
+ * https://github.com/itechbear/SimpleQueryParser/blob/master/lexer.l
+ *
* https://github.com/wclever/NdYaccLexTool/tree/master/progs
*
*/
|
;
-expression : TEST COLON NAME {
+expression : TEST_KEYWORD COLON NAME {
printf("TEST\n");
}
- | SUITE COLON NAME {
+ | SUITE_KEYWORD COLON NAME {
printf("SUITE\n");
}
- | FMT COLON FORMAT {
+ | FMT_KEYWORD COLON FORMAT {
printf("FMT\n");
}
- | HOSTNAME COLON HOST {
+ | HOSTNAME_KEYWORD COLON HOST {
printf("HOSTNAME\n");
}
- | CREATED compare_op DATE {
+ | CREATED_KEYWORD compare_op DATE {
printf("CREATED\n");
}
- | PASSRATE compare_op NUMBER {
+ | PASSRATE_KEYWORD compare_op NUMBER {
printf("PASSRATE\n");
}
;
compare_op : EQ
| GT
+ | GE
| LT
| LE
- | GE
;
%%
int main( int argc, char **argv ) {
progname = argv[0];
-
if (argc > 1)
{
yyin = fopen(argv[1], "r");
return -1;
}
}
-
yyparse();
+ close(yyin);
- /* close(yyin); */
return 0;
}