summaryrefslogtreecommitdiff
path: root/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'contrib')
-rw-r--r--contrib/cube/cubeparse.y299
-rw-r--r--contrib/seg/segparse.y208
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;
+ }
+ ;
%%