1 /* ------------------------------------------------
\r
2 Copyright 2014 AT&T Intellectual Property
\r
3 Licensed under the Apache License, Version 2.0 (the "License");
\r
4 you may not use this file except in compliance with the License.
\r
5 You may obtain a copy of the License at
\r
7 http://www.apache.org/licenses/LICENSE-2.0
\r
9 Unless required by applicable law or agreed to in writing, software
\r
10 distributed under the License is distributed on an "AS IS" BASIS,
\r
11 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
12 See the License for the specific language governing permissions and
\r
13 limitations under the License.
\r
14 ------------------------------------------- */
\r
18 bison --verbose --defines=ifq.tab.cc.h -p IfqParser -o ifq.tab.cc ifq.y
\r
28 /* Some addn'l includes, necessary but not included by the
\r
29 bison generated code.
\r
34 /* prototypes for the parser callbacks.
\r
37 #include "parse_fta.h"
\r
40 extern fta_parse_t *ifq_parse_result;
\r
48 /* symbolic tokens */
\r
56 /* for FTA definition. */
\r
58 scalarexp_t *scalarval;
\r
59 se_list_t *se_listval;
\r
60 select_list_t *select_listval;
\r
63 literal_list_t *lit_l;
\r
65 tablevar_list_t *tbl_list;
\r
67 colref_list_t *clist;
\r
68 var_defs_t *var_defs;
\r
69 var_pair_t *var_pair;
\r
73 query_list_t *q_list;
\r
78 %token <strval> NAME
\r
79 %token <strval> PRED
\r
80 %token <strval> STRING_TOKEN
\r
81 %token <strval> INTNUM
\r
82 %token <strval> LONGINTNUM
\r
83 %token <strval> APPROXNUM
\r
85 /* for FTA definition. */
\r
86 %type <q_list> query_list
\r
88 %type <tblp> select_statement
\r
89 %type <tblp> table_exp
\r
90 %type <predp> where_clause
\r
91 %type <predp> search_condition
\r
92 %type <predp> predicate
\r
93 %type <litval> literal
\r
94 %type <scalarval> scalar_exp
\r
95 %type <se_listval> scalar_exp_commalist
\r
107 /* literal keyword tokens */
\r
108 %token SEMICOLON LEFTBRACE RIGHTBRACE
\r
109 /* For query definition */
\r
111 %token <strval> AGGR
\r
112 %token FROM INNER_JOIN OUTER_JOIN LEFT_OUTER_JOIN RIGHT_OUTER_JOIN
\r
113 %token GROUP HAVING IN
\r
118 %token TRUE_V FALSE_V
\r
119 %token TIMEVAL_L HEX_L LHEX_L IP_L
\r
122 %token DEFINE_SEC PARAM_SEC
\r
124 /* For table definition */
\r
125 %token RIGHTBRACE PROTOCOL TABLE STREAM FTA
\r
126 %token OPERATOR OPERATOR_VIEW FIELDS SUBQUERIES SELECTION_PUSHDOWN
\r
131 /* Union of possible results */
\r
132 parse_result: query_list {
\r
133 ifq_parse_result->parse_tree_list = $1;
\r
134 ifq_parse_result->tables = NULL;
\r
135 ifq_parse_result->parse_type = QUERY_PARSE;
\r
141 /* Query definition.
\r
142 WARNING: there might be some relics.
\r
145 gsql: NAME ':' select_statement {
\r
146 $$ = $3; $$->nmap["name"] = $1;
\r
150 query_list: gsql {$$ = new query_list_t($1);}
\r
151 | query_list SEMICOLON gsql {$$ = $1->append($3);}
\r
156 table_exp {$$ = $1;}
\r
160 /* query expressions */
\r
165 where_clause {$$=new table_exp_t(NULL,$1,NULL,NULL,NULL,NULL,NULL,NULL);}
\r
171 search_condition {$$ = $1;}
\r
176 /* search conditions */
\r
179 search_condition OR search_condition {$$=new predicate_t("OR",$1,$3);}
\r
180 | search_condition AND search_condition {$$=new predicate_t("AND",$1,$3);}
\r
181 | NOT search_condition {$$ = new predicate_t("NOT", $2 );}
\r
182 | '(' search_condition ')' {$$ = $2;}
\r
183 | predicate {$$ = $1;}
\r
187 PRED '[' scalar_exp_commalist ']' {$$ = new predicate_t($1, $3->get_se_list()); }
\r
191 /* scalar expressions */
\r
194 literal { $$= scalarexp_t::make_param_reference($1->to_string().c_str());}
\r
195 | NAME {$$ = scalarexp_t::make_param_reference($1);}
\r
199 scalar_exp_commalist:
\r
200 scalar_exp { $$= new se_list_t($1); }
\r
201 | scalar_exp_commalist ',' scalar_exp { $$=$1->append($3); }
\r
205 STRING_TOKEN {$$ = new literal_t($1,LITERAL_STRING);}
\r
206 | INTNUM {$$ = new literal_t($1,LITERAL_INT);}
\r
207 | LONGINTNUM {$$ = new literal_t($1,LITERAL_LONGINT);}
\r
208 | APPROXNUM {$$ = new literal_t($1,LITERAL_FLOAT);}
\r
209 | TRUE_V {$$ = new literal_t("TRUE",LITERAL_BOOL);}
\r
210 | FALSE_V {$$ = new literal_t("FALSE",LITERAL_BOOL);}
\r
211 | TIMEVAL_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_TIMEVAL);}
\r
212 | HEX_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_HEX);}
\r
213 | LHEX_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_LONGHEX);}
\r
214 | IP_L STRING_TOKEN {$$ = new literal_t($2,LITERAL_IP);}
\r