summaryrefslogtreecommitdiff
path: root/contrib/seg/segparse.y
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/seg/segparse.y')
-rw-r--r--contrib/seg/segparse.y208
1 files changed, 106 insertions, 102 deletions
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;
+ }
+ ;
%%