Added quantiling UDAFs
[com/gs-lite.git] / src / ftacmp / ext_fcns.y
index 0713293..b0f08df 100644 (file)
-/* ------------------------------------------------
-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=ext_fcns.tab.cc.h -p Ext_fcnsParser -o ext_fcns.tab.cc ext_fcns.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_ext_fcns.h"
-
-/*             Interface to ext_fcns parser    */
-       int yyparse();
-       void yyerror(char *s);
-       int yylex();
-extern int flex_ext_fcns_lineno, flex_ext_fcns_ch;
-
-/*             Return value    */
-extern ext_fcn_list *Ext_fcns;
-
-#define YYDEBUG 1
-
-%}
-
-
-       /* symbolic tokens */
-
-%union {
-       char* strval;
-       ext_fcn_list *ext_fcn_list_t;
-       ext_fcn_def *ext_fcn_t;
-       ext_fcn_param_list *plist_t;
-       param_list *tplist_t;
-       ext_fcn_param *param_t;
-       ext_fcn_modifier_list *modif_t;
-       }
-
-       
-%token <strval> NAME
-%token <strval> STRING_TOKEN
-%token <strval> INTNUM
-
-
-%type <ext_fcn_t> fcn_def 
-%type <ext_fcn_list_t> fcn_list
-%type <plist_t> param_commalist
-%type <plist_t> opt_param_commalist
-%type <tplist_t> type_param_commalist
-%type <tplist_t> opt_type_param_commalist
-%type <param_t> param
-%type <modif_t> modifier_list
-       /* operators */
-
-
-       /* literal keyword tokens */
-
-%token SEMICOLON HANDLE CONST CLASS FUN PRED
-%token EXTR UDAF STATE SFUN
-
-
-%%
-
-result:        fcn_list        {Ext_fcns = $1;}
-       ;
-
-fcn_list:      fcn_def {$$ = new ext_fcn_list($1);}
-       |       fcn_list fcn_def        {$$ = $1->append_ext_fcn_def($2);}
-       ;
-
-fcn_def:       NAME opt_type_param_commalist FUN '[' modifier_list ']' NAME '(' opt_param_commalist ')' SEMICOLON  {
-                                       $$=new ext_fcn_def($1,$2,$5,$7,$9); delete $5; delete $9; }
-       |       NAME opt_type_param_commalist FUN NAME '(' opt_param_commalist ')' SEMICOLON  {
-                                       $$=new ext_fcn_def($1,$2,NULL,$4,$6); delete $6; }
-       |       PRED '[' modifier_list ']' NAME '[' opt_param_commalist ']' SEMICOLON  {
-                                       $$=new ext_fcn_def($3,$5,$7); delete $3; delete $7; }
-       |       PRED NAME '[' opt_param_commalist ']' SEMICOLON  {
-                                       $$=new ext_fcn_def(NULL,$2,$4); delete $4; }
-       |       NAME opt_type_param_commalist UDAF '[' modifier_list ']' NAME NAME '(' opt_param_commalist ')' SEMICOLON  {
-                                       $$=new ext_fcn_def($1,$2,$5,$7,$8,$10); delete $5; delete $10; }
-       |       NAME opt_type_param_commalist UDAF NAME NAME '(' opt_param_commalist ')' SEMICOLON  {
-                                       $$=new ext_fcn_def($1,$2,NULL,$4,$5, $7); delete $7; }
-       |       NAME opt_type_param_commalist EXTR '[' modifier_list ']' NAME NAME NAME '(' opt_param_commalist ')' SEMICOLON  {
-                                       $$=new ext_fcn_def($1,$2,$5,$7,$8, $9, $11); delete $5; delete $11; }
-       |       NAME opt_type_param_commalist EXTR NAME NAME NAME '(' opt_param_commalist ')' SEMICOLON  {
-                                       $$=new ext_fcn_def($1,$2,NULL,$4,$5, $6, $8); delete $8; }
-       |       NAME opt_type_param_commalist SFUN '[' modifier_list ']' NAME NAME '(' opt_param_commalist ')' SEMICOLON  {
-                                       $$=ext_fcn_def::make_sfun_def($1,$2,$5,$7,$8,$10); delete $10; }
-       |       NAME opt_type_param_commalist SFUN NAME NAME '(' opt_param_commalist ')' SEMICOLON  {
-                                       $$=ext_fcn_def::make_sfun_def($1,$2,NULL,$4,$5,$7); delete $7; }
-       |       NAME STATE NAME SEMICOLON  {
-                                       $$=ext_fcn_def::make_state_def($1,$3); }
-
-       ;
-
-opt_param_commalist:
-               /* empty */    {$$ = NULL;}
-       |       param_commalist {$$ = $1;}
-       ;
-       
-modifier_list:
-               NAME    {$$ = new ext_fcn_modifier_list($1);}
-       |       NAME NAME       {$$ = new ext_fcn_modifier_list($1, $2);}
-       |       modifier_list ',' NAME  {$$ = $1->append($3);   }       
-       |       modifier_list ',' NAME NAME     {$$ = $1->append($3, $4);       }       
-       ;
-       
-param_commalist:
-               param   {$$ = new ext_fcn_param_list($1);}
-       |       param_commalist ',' param {$$ = $1->append($3);}
-       ;
-
-param:
-               NAME opt_type_param_commalist HANDLE    { $$ = new ext_fcn_param($1,$2,1,0,0);}
-       |       NAME opt_type_param_commalist CONST     { $$ = new ext_fcn_param($1,$2,0,1,0);}
-       |       NAME opt_type_param_commalist CLASS     { $$ = new ext_fcn_param($1,$2,0,0,1);}
-       |       NAME opt_type_param_commalist HANDLE CLASS      { $$ = new ext_fcn_param($1,$2,1,0,1);}
-       |       NAME opt_type_param_commalist CONST CLASS       { $$ = new ext_fcn_param($1,$2,0,1,1);}
-       |       NAME opt_type_param_commalist
-                               { $$ = new ext_fcn_param($1,$2,0,0,0);}
-       ;
-
-opt_type_param_commalist:
-               /* empty */    {$$ = NULL;}
-       |       '(' type_param_commalist ')' {$$ = $2;}
-       ;
-
-type_param_commalist:
-               NAME    {$$ = new param_list($1);}
-       |       NAME NAME       {$$ = new param_list($1,$2);}
-       |       NAME STRING_TOKEN       {$$ = new param_list($1,$2);}
-       |       NAME INTNUM     {$$ = new param_list($1,$2);}
-       |       type_param_commalist ',' NAME {$$ = $1->append($3);}
-       |       type_param_commalist ',' NAME NAME {$$ = $1->append($3,$4);}
-       |       type_param_commalist ',' NAME STRING_TOKEN {$$ = $1->append($3,$4);}
-       |       type_param_commalist ',' NAME INTNUM {$$ = $1->append($3,$4);}
-       ;
-
-
-
-%%
+/* ------------------------------------------------\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=ext_fcns.tab.cc.h -p Ext_fcnsParser -o ext_fcns.tab.cc ext_fcns.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_ext_fcns.h"\r
+\r
+/*             Interface to ext_fcns parser    */\r
+       int yyparse();\r
+       void yyerror(char *s);\r
+       int yylex();\r
+extern int flex_ext_fcns_lineno, flex_ext_fcns_ch;\r
+\r
+/*             Return value    */\r
+extern ext_fcn_list *Ext_fcns;\r
+\r
+#define YYDEBUG 1\r
+\r
+%}\r
+\r
+\r
+       /* symbolic tokens */\r
+\r
+%union {\r
+       char* strval;\r
+       ext_fcn_list *ext_fcn_list_t;\r
+       ext_fcn_def *ext_fcn_t;\r
+       ext_fcn_param_list *plist_t;\r
+       param_list *tplist_t;\r
+       ext_fcn_param *param_t;\r
+       ext_fcn_modifier_list *modif_t;\r
+       }\r
+\r
+       \r
+%token <strval> NAME\r
+%token <strval> STRING_TOKEN\r
+%token <strval> INTNUM\r
+\r
+\r
+%type <ext_fcn_t> fcn_def \r
+%type <ext_fcn_list_t> fcn_list\r
+%type <plist_t> param_commalist\r
+%type <plist_t> opt_param_commalist\r
+%type <tplist_t> type_param_commalist\r
+%type <tplist_t> opt_type_param_commalist\r
+%type <param_t> param\r
+%type <modif_t> modifier_list\r
+       /* operators */\r
+\r
+\r
+       /* literal keyword tokens */\r
+\r
+%token SEMICOLON HANDLE CONST CLASS FUN PRED\r
+%token EXTR UDAF STATE SFUN\r
+\r
+\r
+%%\r
+\r
+result:        fcn_list        {Ext_fcns = $1;}\r
+       ;\r
+\r
+fcn_list:      fcn_def {$$ = new ext_fcn_list($1);}\r
+       |       fcn_list fcn_def        {$$ = $1->append_ext_fcn_def($2);}\r
+       ;\r
+\r
+fcn_def:       NAME opt_type_param_commalist FUN '[' modifier_list ']' NAME '(' opt_param_commalist ')' SEMICOLON  {\r
+                                       $$=new ext_fcn_def($1,$2,$5,$7,$9); delete $5; delete $9; }\r
+       |       NAME opt_type_param_commalist FUN NAME '(' opt_param_commalist ')' SEMICOLON  {\r
+                                       $$=new ext_fcn_def($1,$2,NULL,$4,$6); delete $6; }\r
+       |       PRED '[' modifier_list ']' NAME '[' opt_param_commalist ']' SEMICOLON  {\r
+                                       $$=new ext_fcn_def($3,$5,$7); delete $3; delete $7; }\r
+       |       PRED NAME '[' opt_param_commalist ']' SEMICOLON  {\r
+                                       $$=new ext_fcn_def(NULL,$2,$4); delete $4; }\r
+       |       NAME opt_type_param_commalist UDAF '[' modifier_list ']' NAME NAME '(' opt_param_commalist ')' SEMICOLON  {\r
+                                       $$=new ext_fcn_def($1,$2,$5,$7,$8,$10); delete $5; delete $10; }\r
+       |       NAME opt_type_param_commalist UDAF NAME NAME '(' opt_param_commalist ')' SEMICOLON  {\r
+                                       $$=new ext_fcn_def($1,$2,NULL,$4,$5, $7); delete $7; }\r
+       |       NAME opt_type_param_commalist EXTR '[' modifier_list ']' NAME NAME NAME '(' opt_param_commalist ')' SEMICOLON  {\r
+                                       $$=new ext_fcn_def($1,$2,$5,$7,$8, $9, $11); delete $5; delete $11; }\r
+       |       NAME opt_type_param_commalist EXTR NAME NAME NAME '(' opt_param_commalist ')' SEMICOLON  {\r
+                                       $$=new ext_fcn_def($1,$2,NULL,$4,$5, $6, $8); delete $8; }\r
+       |       NAME opt_type_param_commalist SFUN '[' modifier_list ']' NAME NAME '(' opt_param_commalist ')' SEMICOLON  {\r
+                                       $$=ext_fcn_def::make_sfun_def($1,$2,$5,$7,$8,$10); delete $10; }\r
+       |       NAME opt_type_param_commalist SFUN NAME NAME '(' opt_param_commalist ')' SEMICOLON  {\r
+                                       $$=ext_fcn_def::make_sfun_def($1,$2,NULL,$4,$5,$7); delete $7; }\r
+       |       NAME STATE NAME SEMICOLON  {\r
+                                       $$=ext_fcn_def::make_state_def($1,$3); }\r
+\r
+       ;\r
+\r
+opt_param_commalist:\r
+               /* empty */    {$$ = NULL;}\r
+       |       param_commalist {$$ = $1;}\r
+       ;\r
+       \r
+modifier_list:\r
+               NAME    {$$ = new ext_fcn_modifier_list($1);}\r
+       |       NAME NAME       {$$ = new ext_fcn_modifier_list($1, $2);}\r
+       |       modifier_list ',' NAME  {$$ = $1->append($3);   }       \r
+       |       modifier_list ',' NAME NAME     {$$ = $1->append($3, $4);       }       \r
+       ;\r
+       \r
+param_commalist:\r
+               param   {$$ = new ext_fcn_param_list($1);}\r
+       |       param_commalist ',' param {$$ = $1->append($3);}\r
+       ;\r
+\r
+param:\r
+               NAME opt_type_param_commalist HANDLE    { $$ = new ext_fcn_param($1,$2,1,0,0);}\r
+       |       NAME opt_type_param_commalist CONST     { $$ = new ext_fcn_param($1,$2,0,1,0);}\r
+       |       NAME opt_type_param_commalist CLASS     { $$ = new ext_fcn_param($1,$2,0,0,1);}\r
+       |       NAME opt_type_param_commalist HANDLE CLASS      { $$ = new ext_fcn_param($1,$2,1,0,1);}\r
+       |       NAME opt_type_param_commalist CONST CLASS       { $$ = new ext_fcn_param($1,$2,0,1,1);}\r
+       |       NAME opt_type_param_commalist\r
+                               { $$ = new ext_fcn_param($1,$2,0,0,0);}\r
+       ;\r
+\r
+opt_type_param_commalist:\r
+               /* empty */    {$$ = NULL;}\r
+       |       '(' type_param_commalist ')' {$$ = $2;}\r
+       ;\r
+\r
+type_param_commalist:\r
+               NAME    {$$ = new param_list($1);}\r
+       |       NAME NAME       {$$ = new param_list($1,$2);}\r
+       |       NAME STRING_TOKEN       {$$ = new param_list($1,$2);}\r
+       |       NAME INTNUM     {$$ = new param_list($1,$2);}\r
+       |       type_param_commalist ',' NAME {$$ = $1->append($3);}\r
+       |       type_param_commalist ',' NAME NAME {$$ = $1->append($3,$4);}\r
+       |       type_param_commalist ',' NAME STRING_TOKEN {$$ = $1->append($3,$4);}\r
+       |       type_param_commalist ',' NAME INTNUM {$$ = $1->append($3,$4);}\r
+       ;\r
+\r
+\r
+\r
+%%\r
\r