[BACK]Return to lex.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / parse

Diff for /OpenXM_contrib2/asir2000/parse/lex.c between version 1.1 and 1.2

version 1.1, 1999/12/03 07:39:12 version 1.2, 2000/02/07 03:14:40
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/asir99/parse/lex.c,v 1.1.1.1 1999/11/10 08:12:34 noro Exp $ */  /* $OpenXM: OpenXM_contrib2/asir2000/parse/lex.c,v 1.1.1.1 1999/12/03 07:39:12 noro Exp $ */
 #include <ctype.h>  #include <ctype.h>
 #include "ca.h"  #include "ca.h"
 #include "al.h"  #include "al.h"
Line 25  static int Getc();
Line 25  static int Getc();
 static void Ungetc();  static void Ungetc();
 static void Gets();  static void Gets();
   
   #define NBUFSIZ (BUFSIZ*10)
   #define TBUFSIZ (BUFSIZ)
   
   #define REALLOC_NBUF \
   if ( i >= nbufsize ) {\
           nbufsize += NBUFSIZ;\
           if ( nbuf == nbuf0 ) {\
                   nbuf = (char *)MALLOC_ATOMIC(nbufsize);\
                   bcopy(nbuf0,nbuf,nbufsize-NBUFSIZ);\
           } else\
                   nbuf = REALLOC(nbuf,nbufsize);\
   }
   
   #define REALLOC_TBUF \
   if ( i >= tbufsize ) {\
           tbufsize += TBUFSIZ;\
           if ( tbuf == tbuf0 ) {\
                   tbuf = (char *)MALLOC_ATOMIC(tbufsize);\
                   bcopy(tbuf0,tbuf,tbufsize-TBUFSIZ);\
           } else\
                   tbuf = REALLOC(tbuf,tbufsize);\
   }
   
   #define READ_ALNUM_NBUF \
   while ( 1 ) {\
           c = Getc();\
           if ( isalnum(c) ) {\
                   REALLOC_NBUF nbuf[i++] = c;\
           } else\
                   break;\
   }
   
   #define READ_DIGIT_NBUF \
   while ( 1 ) {\
           c = Getc();\
           if ( isdigit(c) ) {\
                   REALLOC_NBUF nbuf[i++] = c;\
           } else\
                   break;\
   }
   
 yylex()  yylex()
 {  {
 #define yylvalp (&yylval)  #define yylvalp (&yylval)
Line 32  yylex()
Line 73  yylex()
         register int *ptr;          register int *ptr;
         char *cptr;          char *cptr;
         int d,i,j;          int d,i,j;
 #if defined(__MWERKS__)          char nbuf0[NBUFSIZ],tbuf0[TBUFSIZ];
         char nbuf[BUFSIZ],tbuf[BUFSIZ];          char *nbuf, *tbuf;
 #else          int nbufsize, tbufsize;
         char nbuf[BUFSIZ*10],tbuf[BUFSIZ];  
 #endif  
         N n,n1;          N n,n1;
         Q q;          Q q;
         Obj r;          Obj r;
   
           /* initialize buffer pointers */
           nbuf = nbuf0; tbuf = tbuf0;
           nbufsize = NBUFSIZ; tbufsize = TBUFSIZ;
   
         switch ( c = skipspace() ) {          switch ( c = skipspace() ) {
                 case EOF :                  case EOF :
                         asir_terminate(2); break;                          asir_terminate(2); break;
Line 51  yylex()
Line 94  yylex()
                         } else if ( c == 'x' ) {                          } else if ( c == 'x' ) {
                                 for ( i = 0; i < 8; i++ )                                  for ( i = 0; i < 8; i++ )
                                         nbuf[i] = '0';                                          nbuf[i] = '0';
                                 for ( ; isalnum(c = Getc()); nbuf[i++] = c );                                  READ_ALNUM_NBUF
                                 Ungetc(c); nbuf[i] = 0;                                  Ungetc(c); REALLOC_NBUF nbuf[i] = 0;
                                 hexton(nbuf,&n1);                                  hexton(nbuf,&n1);
                                 NTOQ(n1,1,q); r = (Obj)q;                                  NTOQ(n1,1,q); r = (Obj)q;
                                 yylvalp->p = (pointer)r;                                  yylvalp->p = (pointer)r;
Line 60  yylex()
Line 103  yylex()
                         } else if ( c == 'b' ) {                          } else if ( c == 'b' ) {
                                 for ( i = 0; i < 32; i++ )                                  for ( i = 0; i < 32; i++ )
                                         nbuf[i] = '0';                                          nbuf[i] = '0';
                                 for ( ; isalnum(c = Getc()); nbuf[i++] = c );                                  READ_ALNUM_NBUF
                                 Ungetc(c); nbuf[i] = 0;                                  Ungetc(c); REALLOC_NBUF nbuf[i] = 0;
                                 binaryton(nbuf,&n1);                                  binaryton(nbuf,&n1);
                                 NTOQ(n1,1,q); r = (Obj)q;                                  NTOQ(n1,1,q); r = (Obj)q;
                                 yylvalp->p = (pointer)r;                                  yylvalp->p = (pointer)r;
Line 78  yylex()
Line 121  yylex()
                                         break;                                          break;
                                 if ( c == '\\' )                                  if ( c == '\\' )
                                         c = Getc();                                          c = Getc();
                                 tbuf[i] = c;                                  REALLOC_TBUF tbuf[i] = c;
                         }                          }
                         tbuf[i] = 0;                          REALLOC_TBUF tbuf[i] = 0;
                         cptr = (char *)MALLOC(strlen(tbuf)+1); strcpy(cptr,tbuf);                          cptr = (char *)MALLOC(strlen(tbuf)+1); strcpy(cptr,tbuf);
                         yylvalp->p = (pointer)cptr;                          yylvalp->p = (pointer)cptr;
                         return LCASE; break;                          return LCASE; break;
                 case '"' :                  case '"' :
 #if 0  
                         for ( i = 0; (nbuf[i] = Getc()) != '"'; i++ );  
 #endif  
                         i = 0;                          i = 0;
                         do {                          do {
                                 c = Getc();                                  c = Getc();
Line 95  yylex()
Line 135  yylex()
                                         c1 = Getc();                                          c1 = Getc();
                                         if ( c1 == 'n' )                                          if ( c1 == 'n' )
                                                 c1 = '\n';                                                  c1 = '\n';
                                         nbuf[i++] = c1;                                          REALLOC_NBUF nbuf[i++] = c1;
                                 } else                                  } else {
                                         nbuf[i++] = c;                                          REALLOC_NBUF nbuf[i++] = c;
                                   }
                         } while ( c != '"' );                          } while ( c != '"' );
                         nbuf[i-1] = 0;                          nbuf[i-1] = 0; /* REALLOC_NBUF is not necessary */
                         cptr = (char *)MALLOC(strlen(nbuf)+1);                          cptr = (char *)MALLOC(strlen(nbuf)+1);
                         strcpy(cptr,nbuf); yylvalp->p = (pointer) cptr;                          strcpy(cptr,nbuf); yylvalp->p = (pointer) cptr;
                         return ( STR ); break;                          return ( STR ); break;
Line 155  yylex()
Line 196  yylex()
         if ( isdigit(c) ) {          if ( isdigit(c) ) {
                 for ( i = 0; i < DLENGTH; i++ )                  for ( i = 0; i < DLENGTH; i++ )
                         nbuf[i] = '0';                          nbuf[i] = '0';
                 for ( nbuf[i++] = c; isdigit(c = Getc()); nbuf[i++] = c);                  REALLOC_NBUF nbuf[i++] = c;
                   READ_DIGIT_NBUF
                 if ( c == '.' ) {                  if ( c == '.' ) {
                         double dbl;                          double dbl;
                         Real real;                          Real real;
                         double atof();                          double atof();
                         extern int bigfloat;                          extern int bigfloat;
   
                         for ( nbuf[i++] = c; isdigit(c = Getc()); nbuf[i++] = c);                          REALLOC_NBUF nbuf[i++] = c;
                           READ_DIGIT_NBUF
                         if ( c == 'e' ) {                          if ( c == 'e' ) {
                                 nbuf[i++] = c;                                  REALLOC_NBUF nbuf[i++] = c;
                                 if ( ((c = Getc()) == '+') || (c == '-') ) {                                  c = Getc();
                                         nbuf[i++] = c; c = Getc();                                  if ( (c == '+') || (c == '-') ) {
                                 }                                          REALLOC_NBUF nbuf[i++] = c;
                                 for ( ; isdigit(c); nbuf[i++] = c, c = Getc());                                  } else
                                           Ungetc(c);
                                   READ_DIGIT_NBUF
                         }                          }
                         Ungetc(c); nbuf[i] = 0;                          Ungetc(c); REALLOC_NBUF nbuf[i] = 0;
 #if PARI  #if PARI
                         if ( !bigfloat ) {                          if ( !bigfloat ) {
                                 dbl = (double)atof(nbuf+DLENGTH);                                  dbl = (double)atof(nbuf+DLENGTH);
Line 194  yylex()
Line 239  yylex()
                 yylvalp->p = (pointer)r;                  yylvalp->p = (pointer)r;
                 return ( FORMULA );                  return ( FORMULA );
         } else if ( isalpha(c) ) {          } else if ( isalpha(c) ) {
                 for ( i = 1, tbuf[0] = c; isalpha(c = Getc())||isdigit(c)||(c=='_'); i++ )                  i = 0;
                         tbuf[i] = c;                  tbuf[i++] = c;
                 tbuf[i] = 0; Ungetc(c);                  while ( 1 ) {
                           c = Getc();
                           if ( isalpha(c)||isdigit(c)||(c=='_') ) {
                                   REALLOC_TBUF tbuf[i++] = c;
                           } else
                                   break;
                   }
                   REALLOC_TBUF tbuf[i] = 0; Ungetc(c);
                 if ( isupper(tbuf[0]) ) {                  if ( isupper(tbuf[0]) ) {
                         cptr = (char *)MALLOC(strlen(tbuf)+1); strcpy(cptr,tbuf);                          cptr = (char *)MALLOC(strlen(tbuf)+1); strcpy(cptr,tbuf);
                         yylvalp->p = (pointer)cptr;                          yylvalp->p = (pointer)cptr;
Line 214  yylex()
Line 266  yylex()
                 }                  }
         } else if ( c == '@' ) {          } else if ( c == '@' ) {
                 if ( isdigit(c = Getc()) ) {                  if ( isdigit(c = Getc()) ) {
                         for ( i = 1, nbuf[0] = c; isdigit(c = Getc()); nbuf[i++] = c);                          i = 0;
                         Ungetc(c); nbuf[i] = 0; yylvalp->i = atoi(nbuf);                          nbuf[i++] = c;
                           READ_DIGIT_NBUF
                           Ungetc(c); REALLOC_NBUF nbuf[i] = 0;
                           yylvalp->i = atoi(nbuf);
                         return ANS;                          return ANS;
                 } else if ( c == '@' ) {                  } else if ( c == '@' ) {
                         yylvalp->i = MAX(0,APVS->n-1);                          yylvalp->i = MAX(0,APVS->n-1);
Line 250  yylex()
Line 305  yylex()
                                         return FOP_AND; break;                                          return FOP_AND; break;
                         }                          }
                 } else if ( isalpha(c) ) {                  } else if ( isalpha(c) ) {
                         for ( i = 2, tbuf[0] = '@', tbuf[1] = c;                          i = 0;
                                 isalpha(c = Getc()); tbuf[i++] = c);                          tbuf[i++] = '@';
                         Ungetc(c); tbuf[i] = 0;                          tbuf[i++] = c;
                           while ( 1 ) {
                                   c = Getc();
                                   if ( isalpha(c) ) {
                                           REALLOC_TBUF tbuf[i++] = c;
                                   } else
                                           break;
                           }
                           Ungetc(c); REALLOC_TBUF tbuf[i] = 0;
                         if ( !strcmp(tbuf,"@p") )                          if ( !strcmp(tbuf,"@p") )
                                 return GFPNGEN;                                  return GFPNGEN;
                         else if ( !strcmp(tbuf,"@i") ) {                          else if ( !strcmp(tbuf,"@i") ) {

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.2

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>