-/* ------------------------------------------------\r
-Copyright 2014 AT&T Intellectual Property\r
- Licensed under the Apache License, Version 2.0 (the "License");\r
- you may not use this file except in compliance with the License.\r
- You may obtain a copy of the License at\r
-\r
- http://www.apache.org/licenses/LICENSE-2.0\r
-\r
- Unless required by applicable law or agreed to in writing, software\r
- distributed under the License is distributed on an "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- See the License for the specific language governing permissions and\r
- limitations under the License.\r
- ------------------------------------------- */\r
-\r
-/*\r
- MUST COMPILE WITH\r
- bison --verbose --defines=ifq.tab.cc.h -p IfqParser -o ifq.tab.cc ifq.y\r
-\r
- (or equivalent).\r
-*/\r
-\r
-%{\r
-\r
-\r
-#include <stdio.h>\r
-\r
-/* Some addn'l includes, necessary but not included by the\r
- bison generated code.\r
-*/\r
-\r
-#include <stdlib.h>\r
-\r
-/* prototypes for the parser callbacks.\r
-*/\r
-\r
-#include "parse_fta.h"\r
-\r
-\r
-extern fta_parse_t *ifq_parse_result;\r
-\r
-\r
-#define YYDEBUG 1\r
-\r
-%}\r
-\r
-\r
- /* symbolic tokens */\r
-\r
-%union {\r
- int intval;\r
- double floatval;\r
- char *strval;\r
- int subtok;\r
-\r
-/* for FTA definition. */\r
- literal_t *litval;\r
- scalarexp_t *scalarval;\r
- se_list_t *se_listval;\r
- select_list_t *select_listval;\r
- table_exp_t *tblp;\r
- predicate_t *predp;\r
- literal_list_t *lit_l;\r
- tablevar_t *table;\r
- tablevar_list_t *tbl_list;\r
- colref_t *colref;\r
- colref_list_t *clist;\r
- var_defs_t *var_defs;\r
- var_pair_t *var_pair;\r
- gb_t *gb_val;\r
- gb_list_t *gb_list;\r
-\r
- query_list_t *q_list;\r
-\r
-\r
-}\r
-\r
-%token <strval> NAME\r
-%token <strval> PRED\r
-%token <strval> STRING_TOKEN\r
-%token <strval> INTNUM\r
-%token <strval> LONGINTNUM\r
-%token <strval> APPROXNUM\r
-\r
-/* for FTA definition. */\r
-%type <q_list> query_list\r
-%type <tblp> gsql\r
-%type <tblp> select_statement\r
-%type <tblp> table_exp\r
-%type <predp> where_clause\r
-%type <predp> search_condition\r
-%type <predp> predicate\r
-%type <litval> literal\r
-%type <scalarval> scalar_exp\r
-%type <se_listval> scalar_exp_commalist\r
-\r
-\r
-\r
-\r
-\r
- /* operators */\r
-\r
-%left OR\r
-%left AND\r
-%left NOT\r
-\r
- /* literal keyword tokens */\r
-%token SEMICOLON LEFTBRACE RIGHTBRACE\r
-/* For query definition */\r
-%token BY AS\r
-%token <strval> AGGR\r
-%token FROM INNER_JOIN OUTER_JOIN LEFT_OUTER_JOIN RIGHT_OUTER_JOIN\r
-%token GROUP HAVING IN\r
-%token SELECT\r
-%token WHERE\r
-%token SUCH THAT\r
-\r
-%token TRUE_V FALSE_V\r
-%token TIMEVAL_L HEX_L LHEX_L IP_L\r
-%token MERGE SLACK\r
-\r
-%token DEFINE_SEC PARAM_SEC\r
-\r
-/* For table definition */\r
-%token RIGHTBRACE PROTOCOL TABLE STREAM FTA\r
-%token OPERATOR OPERATOR_VIEW FIELDS SUBQUERIES SELECTION_PUSHDOWN\r
-\r
-\r
-%%\r
-\r
-/* Union of possible results */\r
-parse_result: query_list {\r
- ifq_parse_result->parse_tree_list = $1;\r
- ifq_parse_result->tables = NULL;\r
- ifq_parse_result->parse_type = QUERY_PARSE;\r
- }\r
- ;\r
-\r
-\r
-\r
-/* Query definition.\r
- WARNING: there might be some relics.\r
-*/\r
-\r
-gsql: NAME ':' select_statement {\r
- $$ = $3; $$->nmap["name"] = $1;\r
- }\r
- ;\r
-\r
-query_list: gsql {$$ = new query_list_t($1);}\r
- | query_list SEMICOLON gsql {$$ = $1->append($3);}\r
- ;\r
-\r
-\r
-select_statement:\r
- table_exp {$$ = $1;}\r
- ;\r
-\r
-\r
- /* query expressions */\r
-\r
-\r
-\r
-table_exp:\r
- where_clause {$$=new table_exp_t(NULL,$1,NULL,NULL,NULL,NULL,NULL,NULL);}\r
- ;\r
-\r
-\r
-\r
-where_clause:\r
- search_condition {$$ = $1;}\r
- ;\r
-\r
-\r
-\r
- /* search conditions */\r
-\r
-search_condition:\r
- search_condition OR search_condition {$$=new predicate_t("OR",$1,$3);}\r
- | search_condition AND search_condition {$$=new predicate_t("AND",$1,$3);}\r
- | NOT search_condition {$$ = new predicate_t("NOT", $2 );}\r
- | '(' search_condition ')' {$$ = $2;}\r
- | predicate {$$ = $1;}\r
- ;\r
-\r
-predicate:\r
- PRED '[' scalar_exp_commalist ']' {$$ = new predicate_t($1, $3->get_se_list()); }\r
- ;\r
-\r
-\r
- /* scalar expressions */\r
-\r
-scalar_exp:\r
- literal { $$= scalarexp_t::make_param_reference($1->to_string().c_str());}\r
- | NAME {$$ = scalarexp_t::make_param_reference($1);}\r
- ;\r
-\r
-\r
-scalar_exp_commalist:\r
- scalar_exp { $$= new se_list_t($1); }\r
- | scalar_exp_commalist ',' scalar_exp { $$=$1->append($3); }\r
- ;\r
-\r
-literal:\r
- STRING_TOKEN {$$ = new literal_t($1,LITERAL_STRING);}\r
- | INTNUM {$$ = new literal_t($1,LITERAL_INT);}\r
- | LONGINTNUM {$$ = new literal_t($1,LITERAL_LONGINT);}\r
- | APPROXNUM {$$ = new literal_t($1,LITERAL_FLOAT);}\r
- | TRUE_V {$$ = new literal_t("TRUE",LITERAL_BOOL);}\r
- | FALSE_V {$$ = new literal_t("FALSE",LITERAL_BOOL);}\r
- | TIMEVAL_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_TIMEVAL);}\r
- | HEX_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_HEX);}\r
- | LHEX_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_LONGHEX);}\r
- | IP_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_IP);}\r
- ;\r
-\r
-\r
-\r
-%%\r
-\r
+/* ------------------------------------------------
+Copyright 2014 AT&T Intellectual Property
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ ------------------------------------------- */
+
+/*
+ MUST COMPILE WITH
+ bison --verbose --defines=ifq.tab.cc.h -p IfqParser -o ifq.tab.cc ifq.y
+
+ (or equivalent).
+*/
+
+%{
+
+
+#include <stdio.h>
+
+/* Some addn'l includes, necessary but not included by the
+ bison generated code.
+*/
+
+#include <stdlib.h>
+
+/* prototypes for the parser callbacks.
+*/
+
+#include "parse_fta.h"
+
+
+extern fta_parse_t *ifq_parse_result;
+
+
+#define YYDEBUG 1
+
+%}
+
+
+ /* symbolic tokens */
+
+%union {
+ int intval;
+ double floatval;
+ char *strval;
+ int subtok;
+
+/* for FTA definition. */
+ literal_t *litval;
+ scalarexp_t *scalarval;
+ se_list_t *se_listval;
+ select_list_t *select_listval;
+ table_exp_t *tblp;
+ predicate_t *predp;
+ literal_list_t *lit_l;
+ tablevar_t *table;
+ tablevar_list_t *tbl_list;
+ colref_t *colref;
+ colref_list_t *clist;
+ var_defs_t *var_defs;
+ var_pair_t *var_pair;
+ gb_t *gb_val;
+ gb_list_t *gb_list;
+
+ query_list_t *q_list;
+
+
+}
+
+%token <strval> NAME
+%token <strval> PRED
+%token <strval> STRING_TOKEN
+%token <strval> INTNUM
+%token <strval> LONGINTNUM
+%token <strval> APPROXNUM
+
+/* for FTA definition. */
+%type <q_list> query_list
+%type <tblp> gsql
+%type <tblp> select_statement
+%type <tblp> table_exp
+%type <predp> where_clause
+%type <predp> search_condition
+%type <predp> predicate
+%type <litval> literal
+%type <scalarval> scalar_exp
+%type <se_listval> scalar_exp_commalist
+
+
+
+
+
+ /* operators */
+
+%left OR
+%left AND
+%left NOT
+
+ /* literal keyword tokens */
+%token SEMICOLON LEFTBRACE RIGHTBRACE
+/* For query definition */
+%token BY AS
+%token <strval> AGGR
+%token FROM INNER_JOIN OUTER_JOIN LEFT_OUTER_JOIN RIGHT_OUTER_JOIN
+%token GROUP HAVING IN
+%token SELECT
+%token WHERE
+%token SUCH THAT
+
+%token TRUE_V FALSE_V
+%token TIMEVAL_L HEX_L LHEX_L IP_L
+%token MERGE SLACK
+
+%token DEFINE_SEC PARAM_SEC
+
+/* For table definition */
+%token RIGHTBRACE PROTOCOL TABLE STREAM FTA
+%token OPERATOR OPERATOR_VIEW FIELDS SUBQUERIES SELECTION_PUSHDOWN
+
+
+%%
+
+/* Union of possible results */
+parse_result: query_list {
+ ifq_parse_result->parse_tree_list = $1;
+ ifq_parse_result->tables = NULL;
+ ifq_parse_result->parse_type = QUERY_PARSE;
+ }
+ ;
+
+
+
+/* Query definition.
+ WARNING: there might be some relics.
+*/
+
+gsql: NAME ':' select_statement {
+ $$ = $3; $$->nmap["name"] = $1;
+ }
+ ;
+
+query_list: gsql {$$ = new query_list_t($1);}
+ | query_list SEMICOLON gsql {$$ = $1->append($3);}
+ ;
+
+
+select_statement:
+ table_exp {$$ = $1;}
+ ;
+
+
+ /* query expressions */
+
+
+
+table_exp:
+ where_clause {$$=new table_exp_t(NULL,$1,NULL,NULL,NULL,NULL,NULL,NULL);}
+ ;
+
+
+
+where_clause:
+ search_condition {$$ = $1;}
+ ;
+
+
+
+ /* search conditions */
+
+search_condition:
+ search_condition OR search_condition {$$=new predicate_t("OR",$1,$3);}
+ | search_condition AND search_condition {$$=new predicate_t("AND",$1,$3);}
+ | NOT search_condition {$$ = new predicate_t("NOT", $2 );}
+ | '(' search_condition ')' {$$ = $2;}
+ | predicate {$$ = $1;}
+ ;
+
+predicate:
+ PRED '[' scalar_exp_commalist ']' {$$ = new predicate_t($1, $3->get_se_list()); }
+ ;
+
+
+ /* scalar expressions */
+
+scalar_exp:
+ literal { $$= scalarexp_t::make_param_reference($1->to_string().c_str());}
+ | NAME {$$ = scalarexp_t::make_param_reference($1);}
+ ;
+
+
+scalar_exp_commalist:
+ scalar_exp { $$= new se_list_t($1); }
+ | scalar_exp_commalist ',' scalar_exp { $$=$1->append($3); }
+ ;
+
+literal:
+ STRING_TOKEN {$$ = new literal_t($1,LITERAL_STRING);}
+ | INTNUM {$$ = new literal_t($1,LITERAL_INT);}
+ | LONGINTNUM {$$ = new literal_t($1,LITERAL_LONGINT);}
+ | APPROXNUM {$$ = new literal_t($1,LITERAL_FLOAT);}
+ | TRUE_V {$$ = new literal_t("TRUE",LITERAL_BOOL);}
+ | FALSE_V {$$ = new literal_t("FALSE",LITERAL_BOOL);}
+ | TIMEVAL_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_TIMEVAL);}
+ | HEX_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_HEX);}
+ | LHEX_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_LONGHEX);}
+ | IP_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_IP);}
+ ;
+
+
+
+%%
+