diff options
author | ru <ru@FreeBSD.org> | 2005-05-16 19:11:36 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2005-05-16 19:11:36 +0000 |
commit | 78d66df18b9755543261f33b621153a97634a136 (patch) | |
tree | 33f1015b814b02b503e72df8a6aea18084ad3991 /contrib/one-true-awk/lex.c | |
parent | 90fe2c86f7f5001762e4c3af00a323f801d8b737 (diff) | |
download | FreeBSD-src-78d66df18b9755543261f33b621153a97634a136.zip FreeBSD-src-78d66df18b9755543261f33b621153a97634a136.tar.gz |
Vendor import of bwk's 24-Apr-2005 release.
Diffstat (limited to 'contrib/one-true-awk/lex.c')
-rw-r--r-- | contrib/one-true-awk/lex.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/contrib/one-true-awk/lex.c b/contrib/one-true-awk/lex.c index 1766d71..374bc85 100644 --- a/contrib/one-true-awk/lex.c +++ b/contrib/one-true-awk/lex.c @@ -134,7 +134,7 @@ int gettok(char **pbuf, int *psz) /* get next input token */ } *bp = 0; retc = 'a'; /* alphanumeric */ - } else { /* it's a number */ + } else { /* maybe it's a number, but could be . */ char *rem; /* read input until can't be a number */ for ( ; (c = input()) != 0; ) { @@ -151,13 +151,14 @@ int gettok(char **pbuf, int *psz) /* get next input token */ } *bp = 0; strtod(buf, &rem); /* parse the number */ - unputstr(rem); /* put rest back for later */ if (rem == buf) { /* it wasn't a valid number at all */ - buf[1] = 0; /* so return one character as token */ + buf[1] = 0; /* return one character as token */ retc = buf[0]; /* character is its own type */ + unputstr(rem+1); /* put rest back for later */ } else { /* some prefix was a number */ - rem[0] = 0; /* so truncate where failure started */ - retc = '0'; /* number */ + unputstr(rem); /* put rest back for later */ + rem[0] = 0; /* truncate buf after number part */ + retc = '0'; /* type is number */ } } *pbuf = buf; @@ -187,8 +188,10 @@ int yylex(void) reg = 0; return regexpr(); } +/* printf("top\n"); */ for (;;) { c = gettok(&buf, &bufsize); +/* printf("gettok [%s]\n", buf); */ if (c == 0) return 0; if (isalpha(c) || c == '_') |