commit 57fe6b841837da908c6d0d71241fb7e15b8231f4 from: Sergey Bronnikov date: Tue Aug 06 07:37:30 2019 UTC update searchql parser commit - 9a479d01b991c04bb98e67b646037baba6394b60 commit + 57fe6b841837da908c6d0d71241fb7e15b8231f4 blob - 3a5bd90f68bfd046e33c9c01b38eb55497d04f5b blob + 3a8a3f8563187e826947f4d44c69c760c34542dd --- src/parse_query.l +++ src/parse_query.l @@ -1,5 +1,5 @@ /* - * Copyright © 2018 Sergey Bronnikov + * Copyright © 2018-2019 Sergey Bronnikov * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -26,13 +26,6 @@ * */ -/* - * 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 #include "parse_query.tab.h" @@ -44,36 +37,36 @@ extern void yyerror(char *s); %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 @@ -1,5 +1,5 @@ /* - * Copyright © 2018 Sergey Bronnikov + * Copyright © 2018-2019 Sergey Bronnikov * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,13 +32,18 @@ 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 * */ @@ -50,31 +55,31 @@ program : program expression NL | ; -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 ; %% @@ -94,7 +99,6 @@ void yyerror(char *s) int main( int argc, char **argv ) { progname = argv[0]; - if (argc > 1) { yyin = fopen(argv[1], "r"); @@ -104,9 +108,8 @@ int main( int argc, char **argv ) { return -1; } } - yyparse(); + close(yyin); - /* close(yyin); */ return 0; }