diff options
Diffstat (limited to 'contrib')
| -rw-r--r-- | contrib/cube/cubeparse.y | 299 | ||||
| -rw-r--r-- | contrib/seg/segparse.y | 208 |
2 files changed, 257 insertions, 250 deletions
diff --git a/contrib/cube/cubeparse.y b/contrib/cube/cubeparse.y index 9e7c87e9036..21fe5378773 100644 --- a/contrib/cube/cubeparse.y +++ b/contrib/cube/cubeparse.y @@ -47,165 +47,167 @@ static NDBOX * write_point_as_box(char *s, int dim); /* Grammar follows */ %% -box: - O_BRACKET paren_list COMMA paren_list C_BRACKET { - - int dim; - - dim = delim_count($2, ',') + 1; - if ( (delim_count($4, ',') + 1) != dim ) { - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("bad cube representation"), - errdetail("Different point dimensions in (%s) and (%s).", - $2, $4))); - YYABORT; - } - if (dim > CUBE_MAX_DIM) { - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("bad cube representation"), - errdetail("A cube cannot have more than %d dimensions.", - CUBE_MAX_DIM))); - YYABORT; - } - - *((void **)result) = write_box( dim, $2, $4 ); - - } - | - paren_list COMMA paren_list { - int dim; - - dim = delim_count($1, ',') + 1; - - if ( (delim_count($3, ',') + 1) != dim ) { - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("bad cube representation"), - errdetail("Different point dimensions in (%s) and (%s).", - $1, $3))); - YYABORT; - } - if (dim > CUBE_MAX_DIM) { - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("bad cube representation"), - errdetail("A cube cannot have more than %d dimensions.", - CUBE_MAX_DIM))); - YYABORT; - } - - *((void **)result) = write_box( dim, $1, $3 ); - } - | - - paren_list { - int dim; - - dim = delim_count($1, ',') + 1; - if (dim > CUBE_MAX_DIM) { - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("bad cube representation"), - errdetail("A cube cannot have more than %d dimensions.", - CUBE_MAX_DIM))); - YYABORT; - } - - *((void **)result) = write_point_as_box($1, dim); - } - - | - - list { - int dim; - - dim = delim_count($1, ',') + 1; - if (dim > CUBE_MAX_DIM) { - ereport(ERROR, - (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("bad cube representation"), - errdetail("A cube cannot have more than %d dimensions.", - CUBE_MAX_DIM))); - YYABORT; - } - *((void **)result) = write_point_as_box($1, dim); - } - ; - -paren_list: - O_PAREN list C_PAREN { - $$ = $2; - } - ; - -list: - CUBEFLOAT { - /* alloc enough space to be sure whole list will fit */ - $$ = palloc(scanbuflen + 1); - strcpy($$, $1); - } - | - list COMMA CUBEFLOAT { - $$ = $1; - strcat($$, ","); - strcat($$, $3); - } - ; +box: O_BRACKET paren_list COMMA paren_list C_BRACKET + { + int dim; + + dim = delim_count($2, ',') + 1; + if ((delim_count($4, ',') + 1) != dim) + { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("bad cube representation"), + errdetail("Different point dimensions in (%s) and (%s).", + $2, $4))); + YYABORT; + } + if (dim > CUBE_MAX_DIM) { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("bad cube representation"), + errdetail("A cube cannot have more than %d dimensions.", + CUBE_MAX_DIM))); + YYABORT; + } + + *((void **)result) = write_box( dim, $2, $4 ); + + } + + | paren_list COMMA paren_list + { + int dim; + + dim = delim_count($1, ',') + 1; + + if ( (delim_count($3, ',') + 1) != dim ) { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("bad cube representation"), + errdetail("Different point dimensions in (%s) and (%s).", + $1, $3))); + YYABORT; + } + if (dim > CUBE_MAX_DIM) { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("bad cube representation"), + errdetail("A cube cannot have more than %d dimensions.", + CUBE_MAX_DIM))); + YYABORT; + } + + *((void **)result) = write_box( dim, $1, $3 ); + } + + | paren_list + { + int dim; + + dim = delim_count($1, ',') + 1; + if (dim > CUBE_MAX_DIM) { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("bad cube representation"), + errdetail("A cube cannot have more than %d dimensions.", + CUBE_MAX_DIM))); + YYABORT; + } + + *((void **)result) = write_point_as_box($1, dim); + } + + | list + { + int dim; + + dim = delim_count($1, ',') + 1; + if (dim > CUBE_MAX_DIM) { + ereport(ERROR, + (errcode(ERRCODE_SYNTAX_ERROR), + errmsg("bad cube representation"), + errdetail("A cube cannot have more than %d dimensions.", + CUBE_MAX_DIM))); + YYABORT; + } + *((void **)result) = write_point_as_box($1, dim); + } + ; + +paren_list: O_PAREN list C_PAREN + { + $$ = $2; + } + ; + +list: CUBEFLOAT + { + /* alloc enough space to be sure whole list will fit */ + $$ = palloc(scanbuflen + 1); + strcpy($$, $1); + } + | list COMMA CUBEFLOAT + { + $$ = $1; + strcat($$, ","); + strcat($$, $3); + } + ; %% static int delim_count(char *s, char delim) { - int ndelim = 0; - - while ((s = strchr(s, delim)) != NULL) - { - ndelim++; - s++; - } - return (ndelim); + int ndelim = 0; + + while ((s = strchr(s, delim)) != NULL) + { + ndelim++; + s++; + } + return (ndelim); } static NDBOX * write_box(unsigned int dim, char *str1, char *str2) { - NDBOX * bp; - char * s; - int i; - int size = offsetof(NDBOX, x[0]) + sizeof(double) * dim * 2; - - bp = palloc0(size); - SET_VARSIZE(bp, size); - bp->dim = dim; - - s = str1; - bp->x[i=0] = strtod(s, NULL); - while ((s = strchr(s, ',')) != NULL) { - s++; i++; - bp->x[i] = strtod(s, NULL); - } - - s = str2; - bp->x[i=dim] = strtod(s, NULL); - while ((s = strchr(s, ',')) != NULL) { - s++; i++; - bp->x[i] = strtod(s, NULL); - } - - return(bp); + NDBOX *bp; + char *s; + int i; + int size = offsetof(NDBOX, x[0]) + sizeof(double) * dim * 2; + + bp = palloc0(size); + SET_VARSIZE(bp, size); + bp->dim = dim; + + s = str1; + bp->x[i=0] = strtod(s, NULL); + while ((s = strchr(s, ',')) != NULL) + { + s++; i++; + bp->x[i] = strtod(s, NULL); + } + + s = str2; + bp->x[i=dim] = strtod(s, NULL); + while ((s = strchr(s, ',')) != NULL) + { + s++; i++; + bp->x[i] = strtod(s, NULL); + } + + return(bp); } - static NDBOX * write_point_as_box(char *str, int dim) { - NDBOX * bp; - int i, size; - double x; - char * s = str; + NDBOX *bp; + int i, + size; + double x; + char *s = str; size = offsetof(NDBOX, x[0]) + sizeof(double) * dim * 2; @@ -217,11 +219,12 @@ write_point_as_box(char *str, int dim) x = strtod(s, NULL); bp->x[0] = x; bp->x[dim] = x; - while ((s = strchr(s, ',')) != NULL) { - s++; i++; - x = strtod(s, NULL); - bp->x[i] = x; - bp->x[i+dim] = x; + while ((s = strchr(s, ',')) != NULL) + { + s++; i++; + x = strtod(s, NULL); + bp->x[i] = x; + bp->x[i+dim] = x; } return(bp); diff --git a/contrib/seg/segparse.y b/contrib/seg/segparse.y index 1f5f0affe8b..e6a0bad5912 100644 --- a/contrib/seg/segparse.y +++ b/contrib/seg/segparse.y @@ -20,22 +20,22 @@ #define YYMALLOC palloc #define YYFREE pfree - extern int seg_yylex(void); +extern int seg_yylex(void); - extern int significant_digits(char *str); /* defined in seg.c */ +extern int significant_digits(char *str); /* defined in seg.c */ - void seg_yyerror(const char *message); - int seg_yyparse(void *result); +void seg_yyerror(const char *message); +int seg_yyparse(void *result); - static float seg_atof(char *value); +static float seg_atof(char *value); - static char strbuf[25] = { - '0', '0', '0', '0', '0', - '0', '0', '0', '0', '0', - '0', '0', '0', '0', '0', - '0', '0', '0', '0', '0', - '0', '0', '0', '0', '\0' - }; +static char strbuf[25] = { + '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', + '0', '0', '0', '0', '0', + '0', '0', '0', '0', '\0' +}; %} @@ -44,12 +44,12 @@ %name-prefix="seg_yy" %union { - struct BND { - float val; - char ext; - char sigd; - } bnd; - char * text; + struct BND { + float val; + char ext; + char sigd; + } bnd; + char * text; } %token <text> SEGFLOAT %token <text> RANGE @@ -63,90 +63,94 @@ %% -range: - boundary PLUMIN deviation { - ((SEG *)result)->lower = $1.val - $3.val; - ((SEG *)result)->upper = $1.val + $3.val; - sprintf(strbuf, "%g", ((SEG *)result)->lower); - ((SEG *)result)->l_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd)); - sprintf(strbuf, "%g", ((SEG *)result)->upper); - ((SEG *)result)->u_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd)); - ((SEG *)result)->l_ext = '\0'; - ((SEG *)result)->u_ext = '\0'; - } - | - boundary RANGE boundary { - ((SEG *)result)->lower = $1.val; - ((SEG *)result)->upper = $3.val; - if ( ((SEG *)result)->lower > ((SEG *)result)->upper ) { - ereport(ERROR, - (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("swapped boundaries: %g is greater than %g", - ((SEG *)result)->lower, ((SEG *)result)->upper))); - - YYERROR; - } - ((SEG *)result)->l_sigd = $1.sigd; - ((SEG *)result)->u_sigd = $3.sigd; - ((SEG *)result)->l_ext = ( $1.ext ? $1.ext : '\0' ); - ((SEG *)result)->u_ext = ( $3.ext ? $3.ext : '\0' ); - } - | - boundary RANGE { - ((SEG *)result)->lower = $1.val; - ((SEG *)result)->upper = HUGE_VAL; - ((SEG *)result)->l_sigd = $1.sigd; - ((SEG *)result)->u_sigd = 0; - ((SEG *)result)->l_ext = ( $1.ext ? $1.ext : '\0' ); - ((SEG *)result)->u_ext = '-'; - } - | - RANGE boundary { - ((SEG *)result)->lower = -HUGE_VAL; - ((SEG *)result)->upper = $2.val; - ((SEG *)result)->l_sigd = 0; - ((SEG *)result)->u_sigd = $2.sigd; - ((SEG *)result)->l_ext = '-'; - ((SEG *)result)->u_ext = ( $2.ext ? $2.ext : '\0' ); - } - | - boundary { - ((SEG *)result)->lower = ((SEG *)result)->upper = $1.val; - ((SEG *)result)->l_sigd = ((SEG *)result)->u_sigd = $1.sigd; - ((SEG *)result)->l_ext = ((SEG *)result)->u_ext = ( $1.ext ? $1.ext : '\0' ); - } - ; - -boundary: - SEGFLOAT { - /* temp variable avoids a gcc 3.3.x bug on Sparc64 */ - float val = seg_atof($1); - - $$.ext = '\0'; - $$.sigd = significant_digits($1); - $$.val = val; - } - | - EXTENSION SEGFLOAT { - /* temp variable avoids a gcc 3.3.x bug on Sparc64 */ - float val = seg_atof($2); - - $$.ext = $1[0]; - $$.sigd = significant_digits($2); - $$.val = val; - } - ; - -deviation: - SEGFLOAT { - /* temp variable avoids a gcc 3.3.x bug on Sparc64 */ - float val = seg_atof($1); - - $$.ext = '\0'; - $$.sigd = significant_digits($1); - $$.val = val; - } - ; +range: boundary PLUMIN deviation + { + ((SEG *)result)->lower = $1.val - $3.val; + ((SEG *)result)->upper = $1.val + $3.val; + sprintf(strbuf, "%g", ((SEG *)result)->lower); + ((SEG *)result)->l_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd)); + sprintf(strbuf, "%g", ((SEG *)result)->upper); + ((SEG *)result)->u_sigd = Max(Min(6, significant_digits(strbuf)), Max($1.sigd, $3.sigd)); + ((SEG *)result)->l_ext = '\0'; + ((SEG *)result)->u_ext = '\0'; + } + + | boundary RANGE boundary + { + ((SEG *)result)->lower = $1.val; + ((SEG *)result)->upper = $3.val; + if ( ((SEG *)result)->lower > ((SEG *)result)->upper ) { + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("swapped boundaries: %g is greater than %g", + ((SEG *)result)->lower, ((SEG *)result)->upper))); + + YYERROR; + } + ((SEG *)result)->l_sigd = $1.sigd; + ((SEG *)result)->u_sigd = $3.sigd; + ((SEG *)result)->l_ext = ( $1.ext ? $1.ext : '\0' ); + ((SEG *)result)->u_ext = ( $3.ext ? $3.ext : '\0' ); + } + + | boundary RANGE + { + ((SEG *)result)->lower = $1.val; + ((SEG *)result)->upper = HUGE_VAL; + ((SEG *)result)->l_sigd = $1.sigd; + ((SEG *)result)->u_sigd = 0; + ((SEG *)result)->l_ext = ( $1.ext ? $1.ext : '\0' ); + ((SEG *)result)->u_ext = '-'; + } + + | RANGE boundary + { + ((SEG *)result)->lower = -HUGE_VAL; + ((SEG *)result)->upper = $2.val; + ((SEG *)result)->l_sigd = 0; + ((SEG *)result)->u_sigd = $2.sigd; + ((SEG *)result)->l_ext = '-'; + ((SEG *)result)->u_ext = ( $2.ext ? $2.ext : '\0' ); + } + + | boundary + { + ((SEG *)result)->lower = ((SEG *)result)->upper = $1.val; + ((SEG *)result)->l_sigd = ((SEG *)result)->u_sigd = $1.sigd; + ((SEG *)result)->l_ext = ((SEG *)result)->u_ext = ( $1.ext ? $1.ext : '\0' ); + } + ; + +boundary: SEGFLOAT + { + /* temp variable avoids a gcc 3.3.x bug on Sparc64 */ + float val = seg_atof($1); + + $$.ext = '\0'; + $$.sigd = significant_digits($1); + $$.val = val; + } + | EXTENSION SEGFLOAT + { + /* temp variable avoids a gcc 3.3.x bug on Sparc64 */ + float val = seg_atof($2); + + $$.ext = $1[0]; + $$.sigd = significant_digits($2); + $$.val = val; + } + ; + +deviation: SEGFLOAT + { + /* temp variable avoids a gcc 3.3.x bug on Sparc64 */ + float val = seg_atof($1); + + $$.ext = '\0'; + $$.sigd = significant_digits($1); + $$.val = val; + } + ; %% |
