@@ -146,10 +146,11 @@ operator {op_and_self}+
146
146
xmstop -
147
147
148
148
integer [\-]?{digit}+
149
+ decimal [\-]?(({digit}*\.{digit}+)|({digit}+\.{digit}*))
150
+ real [\-]?((({digit}*\.{digit}+)|({digit}+\.{digit}*)|({digit}+))([Ee][-+]?{digit}+))
149
151
/*
150
- real [\-]?{digit}+\.{digit}+([Ee][-+]?{digit}+)?
151
- */
152
152
real [\-]?(((({digit}*\.{digit}+)|({digit}+\.{digit}*))([Ee][-+]?{digit}+)?)|({digit}+[Ee][-+]?{digit}+))
153
+ */
153
154
154
155
param \${integer}
155
156
@@ -391,14 +392,34 @@ cppline {space}*#.*(\\{space}*\n)*\n*
391
392
if (*endptr != ' \0 ' || errno == ERANGE)
392
393
{
393
394
errno = 0 ;
395
+ #if 0
394
396
yylval.dval = strtod(((char *)yytext),&endptr);
395
397
if (*endptr != '\0' || errno == ERANGE)
396
398
yyerror("ERROR: Bad integer input");
397
399
yyerror("WARNING: Integer input is out of range; promoted to float");
398
400
return FCONST;
401
+ #endif
402
+ yylval.str = mm_strdup ((char *)yytext);
403
+ return SCONST;
399
404
}
400
405
return ICONST;
401
406
}
407
+ {decimal }/ {space }* -{number } {
408
+ char * endptr;
409
+
410
+ BEGIN (xm);
411
+ if (strlen ((char *)yytext) <= 17 )
412
+ {
413
+ errno = 0 ;
414
+ yylval.dval = strtod (((char *)yytext),&endptr);
415
+ if (*endptr != ' \0 ' || errno == ERANGE)
416
+ yyerror (" ERROR: Bad float8 input" );
417
+ return FCONST;
418
+ }
419
+ yylval.str = mm_strdup ((char *)yytext);
420
+ return SCONST;
421
+ }
422
+
402
423
<C ,SQL >{real }/ {space }* -{number } {
403
424
char * endptr;
404
425
@@ -417,14 +438,32 @@ cppline {space}*#.*(\\{space}*\n)*\n*
417
438
if (*endptr != ' \0 ' || errno == ERANGE)
418
439
{
419
440
errno = 0 ;
441
+ #if 0
420
442
yylval.dval = strtod(((char *)yytext),&endptr);
421
443
if (*endptr != '\0' || errno == ERANGE)
422
444
yyerror("ERROR: Bad integer input");
423
445
yyerror("WARNING: Integer input is out of range; promoted to float");
424
446
return FCONST;
447
+ #endif
448
+ yylval.str = mm_strdup ((char *)yytext);
449
+ return SCONST;
425
450
}
426
451
return ICONST;
427
452
}
453
+ {decimal } {
454
+ char * endptr;
455
+
456
+ if (strlen ((char *)yytext) <= 17 )
457
+ {
458
+ errno = 0 ;
459
+ yylval.dval = strtod ((char *)yytext,&endptr);
460
+ if (*endptr != ' \0 ' || errno == ERANGE)
461
+ yyerror (" ERROR: Bad float8 input" );
462
+ return FCONST;
463
+ }
464
+ yylval.str = mm_strdup ((char *)yytext);
465
+ return SCONST;
466
+ }
428
467
<C ,SQL >{real } {
429
468
char * endptr;
430
469
0 commit comments