=================================================================== RCS file: /home/cvs/OpenXM_contrib2/asir2000/parse/lex.c,v retrieving revision 1.18 retrieving revision 1.23 diff -u -p -r1.18 -r1.23 --- OpenXM_contrib2/asir2000/parse/lex.c 2001/10/09 01:36:24 1.18 +++ OpenXM_contrib2/asir2000/parse/lex.c 2003/03/07 03:12:31 1.23 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/asir2000/parse/lex.c,v 1.17 2001/09/03 07:01:10 noro Exp $ + * $OpenXM: OpenXM_contrib2/asir2000/parse/lex.c,v 1.22 2003/02/14 22:29:18 ohara Exp $ */ #include #include "ca.h" @@ -126,6 +126,12 @@ int yylex() N n,n1; Q q; Obj r; + int floatingpoint = 0; + double dbl; + Real real; + double atof(); + extern int bigfloat; + /* initialize buffer pointers */ nbuf = nbuf0; tbuf = tbuf0; @@ -138,7 +144,7 @@ int yylex() while ( ( c = Getc() ) == '0' ); if ( c == '.' ) { Ungetc(c); c = '0'; - } else if ( c == 'x' ) { + } else if ( c == 'x' || c == 'X' ) { for ( i = 0; i < 8; i++ ) nbuf[i] = '0'; READ_ALNUM_NBUF @@ -147,7 +153,7 @@ int yylex() NTOQ(n1,1,q); r = (Obj)q; yylvalp->p = (pointer)r; return ( FORMULA ); - } else if ( c == 'b' ) { + } else if ( c == 'b' || c == 'B' ) { for ( i = 0; i < 32; i++ ) nbuf[i] = '0'; READ_ALNUM_NBUF @@ -246,14 +252,11 @@ int yylex() REALLOC_NBUF nbuf[i++] = c; READ_DIGIT_NBUF if ( c == '.' ) { - double dbl; - Real real; - double atof(); - extern int bigfloat; + floatingpoint = 1; REALLOC_NBUF nbuf[i++] = c; READ_DIGIT_NBUF - if ( c == 'e' ) { + if ( c == 'e' || c == 'E' ) { REALLOC_NBUF nbuf[i++] = c; c = Getc(); if ( (c == '+') || (c == '-') ) { @@ -262,8 +265,19 @@ int yylex() Ungetc(c); READ_DIGIT_NBUF } + } else if ( c == 'e' || c == 'E' ) { + floatingpoint = 1; + REALLOC_NBUF nbuf[i++] = c; + c = Getc(); + if ( (c == '+') || (c == '-') ) { + REALLOC_NBUF nbuf[i++] = c; + } else + Ungetc(c); + READ_DIGIT_NBUF + } + if ( floatingpoint ) { Ungetc(c); REALLOC_NBUF nbuf[i] = 0; -#if PARI +#if defined(PARI) if ( !bigfloat ) { dbl = (double)atof(nbuf+DLENGTH); MKReal(dbl,real); r = (Obj)real; @@ -413,7 +427,7 @@ void purge_stdin() w_purge_stdin(); #elif defined(sparc) || defined(__alpha) || defined(__SVR4) || defined(mips) || defined(VISUAL) || defined(_IBMR2) stdin->_ptr = stdin->_base; stdin->_cnt = 0; -#elif defined(__MACH__) && defined(__ppc__) +#elif (defined(__MACH__) && defined(__ppc__)) || defined(__CYGWIN__) stdin->_r = 0; stdin->_p = stdin->_bf._base; #else --->FIXIT