[BACK]Return to lex.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / awk

Diff for /src/usr.bin/awk/lex.c between version 1.5 and 1.6

version 1.5, 2001/09/08 00:12:40 version 1.6, 2002/12/19 21:24:28
Line 39 
Line 39 
 int     parencnt = 0;  int     parencnt = 0;
   
 typedef struct Keyword {  typedef struct Keyword {
         char    *word;          const char *word;
         int     sub;          int     sub;
         int     type;          int     type;
 } Keyword;  } Keyword;
Line 106 
Line 106 
   
 int gettok(char **pbuf, int *psz)       /* get next input token */  int gettok(char **pbuf, int *psz)       /* get next input token */
 {  {
         int c;          int c, retc;
         char *buf = *pbuf;          char *buf = *pbuf;
         int sz = *psz;          int sz = *psz;
         char *bp = buf;          char *bp = buf;
Line 134 
Line 134 
                         }                          }
                 }                  }
                 *bp = 0;                  *bp = 0;
                   retc = 'a';     /* alphanumeric */
         } else {        /* it's a number */          } else {        /* it's a number */
                 char *rem;                  char *rem;
                 /* read input until can't be a number */                  /* read input until can't be a number */
Line 152 
Line 153 
                 *bp = 0;                  *bp = 0;
                 strtod(buf, &rem);      /* parse the number */                  strtod(buf, &rem);      /* parse the number */
                 unputstr(rem);          /* put rest back for later */                  unputstr(rem);          /* put rest back for later */
                 rem[0] = 0;                  if (rem == buf) {       /* it wasn't a valid number at all */
                           buf[1] = 0;     /* so return one character as token */
                           retc = buf[0];  /* character is its own type */
                   } else {        /* some prefix was a number */
                           rem[0] = 0;     /* so truncate where failure started */
                           retc = '0';     /* number */
                   }
         }          }
         *pbuf = buf;          *pbuf = buf;
         *psz = sz;          *psz = sz;
         return buf[0];          return retc;
 }  }
   
 int     word(char *);  int     word(char *);
Line 187 
Line 194 
                         return 0;                          return 0;
                 if (isalpha(c) || c == '_')                  if (isalpha(c) || c == '_')
                         return word(buf);                          return word(buf);
                 if (isdigit(c) || c == '.') {                  if (isdigit(c)) {
                         yylval.cp = setsymtab(buf, tostring(buf), atof(buf), CON|NUM, symtab);                          yylval.cp = setsymtab(buf, tostring(buf), atof(buf), CON|NUM, symtab);
                         /* should this also have STR set? */                          /* should this also have STR set? */
                         RET(NUMBER);                          RET(NUMBER);
Line 312 
Line 319 
                                 }                                  }
                                 yylval.cp = setsymtab(buf, "", 0.0, STR|NUM, symtab);                                  yylval.cp = setsymtab(buf, "", 0.0, STR|NUM, symtab);
                                 RET(IVAR);                                  RET(IVAR);
                           } else if (c == 0) {    /*  */
                                   SYNTAX( "unexpected end of input after $" );
                                   RET(';');
                         } else {                          } else {
                                 unputstr(buf);                                  unputstr(buf);
                                 RET(INDIRECT);                                  RET(INDIRECT);
Line 367 
Line 377 
                 case 0:                  case 0:
                         SYNTAX( "non-terminated string %.10s...", buf );                          SYNTAX( "non-terminated string %.10s...", buf );
                         lineno++;                          lineno++;
                           if (c == 0)     /* hopeless */
                                   FATAL( "giving up" );
                         break;                          break;
                 case '\\':                  case '\\':
                         c = input();                          c = input();
Line 488 
Line 500 
         }          }
 }  }
   
 void startreg(void)     /* next call to yyles will return a regular expression */  void startreg(void)     /* next call to yylex will return a regular expression */
 {  {
         reg = 1;          reg = 1;
 }  }
Line 563 
Line 575 
                 ep = ebuf + sizeof(ebuf) - 1;                  ep = ebuf + sizeof(ebuf) - 1;
 }  }
   
 void unputstr(char *s)  /* put a string back on input */  void unputstr(const char *s)    /* put a string back on input */
 {  {
         int i;          int i;
   

Legend:
Removed from v.1.5  
changed lines
  Added in v.1.6