version 1.3, 1999/04/20 17:31:29 |
version 1.4, 1999/12/08 23:09:45 |
|
|
for ( ; (c = input()) != 0; ) { |
for ( ; (c = input()) != 0; ) { |
if (bp-buf >= sz) |
if (bp-buf >= sz) |
if (!adjbuf(&buf, &sz, bp-buf+2, 100, &bp, 0)) |
if (!adjbuf(&buf, &sz, bp-buf+2, 100, &bp, 0)) |
ERROR "out of space for name %.10s...", buf FATAL; |
FATAL( "out of space for name %.10s...", buf ); |
if (isalnum(c) || c == '_') |
if (isalnum(c) || c == '_') |
*bp++ = c; |
*bp++ = c; |
else { |
else { |
|
|
break; |
break; |
} |
} |
} |
} |
|
*bp = 0; |
} 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 */ |
for ( ; (c = input()) != 0; ) { |
for ( ; (c = input()) != 0; ) { |
if (bp-buf >= sz) |
if (bp-buf >= sz) |
if (!adjbuf(&buf, &sz, bp-buf+2, 100, &bp, 0)) |
if (!adjbuf(&buf, &sz, bp-buf+2, 100, &bp, 0)) |
ERROR "out of space for number %.10s...", buf FATAL; |
FATAL( "out of space for number %.10s...", buf ); |
if (isdigit(c) || c == 'e' || c == 'E' |
if (isdigit(c) || c == 'e' || c == 'E' |
|| c == '.' || c == '+' || c == '-') |
|| c == '.' || c == '+' || c == '-') |
*bp++ = c; |
*bp++ = c; |
|
|
static int bufsize = 500; |
static int bufsize = 500; |
|
|
if (buf == 0 && (buf = (char *) malloc(bufsize)) == NULL) |
if (buf == 0 && (buf = (char *) malloc(bufsize)) == NULL) |
ERROR "out of space in yylex" FATAL; |
FATAL( "out of space in yylex" ); |
if (sc) { |
if (sc) { |
sc = 0; |
sc = 0; |
RET('}'); |
RET('}'); |
|
|
|
|
case '}': |
case '}': |
if (--bracecnt < 0) |
if (--bracecnt < 0) |
ERROR "extra }" SYNTAX; |
SYNTAX( "extra }" ); |
sc = 1; |
sc = 1; |
RET(';'); |
RET(';'); |
case ']': |
case ']': |
if (--brackcnt < 0) |
if (--brackcnt < 0) |
ERROR "extra ]" SYNTAX; |
SYNTAX( "extra ]" ); |
RET(']'); |
RET(']'); |
case ')': |
case ')': |
if (--parencnt < 0) |
if (--parencnt < 0) |
ERROR "extra )" SYNTAX; |
SYNTAX( "extra )" ); |
RET(')'); |
RET(')'); |
case '{': |
case '{': |
bracecnt++; |
bracecnt++; |
|
|
static int bufsz = 500; |
static int bufsz = 500; |
|
|
if (buf == 0 && (buf = (char *) malloc(bufsz)) == NULL) |
if (buf == 0 && (buf = (char *) malloc(bufsz)) == NULL) |
ERROR "out of space for strings" FATAL; |
FATAL("out of space for strings"); |
for (bp = buf; (c = input()) != '"'; ) { |
for (bp = buf; (c = input()) != '"'; ) { |
if (!adjbuf(&buf, &bufsz, bp-buf+2, 500, &bp, 0)) |
if (!adjbuf(&buf, &bufsz, bp-buf+2, 500, &bp, 0)) |
ERROR "out of space for string %.10s...", buf FATAL; |
FATAL("out of space for string %.10s...", buf); |
switch (c) { |
switch (c) { |
case '\n': |
case '\n': |
case '\r': |
case '\r': |
case 0: |
case 0: |
ERROR "non-terminated string %.10s...", buf SYNTAX; |
SYNTAX( "non-terminated string %.10s...", buf ); |
lineno++; |
lineno++; |
break; |
break; |
case '\\': |
case '\\': |
|
|
switch (kp->type) { /* special handling */ |
switch (kp->type) { /* special handling */ |
case FSYSTEM: |
case FSYSTEM: |
if (safe) |
if (safe) |
ERROR "system is unsafe" SYNTAX; |
SYNTAX( "system is unsafe" ); |
RET(kp->type); |
RET(kp->type); |
case FUNC: |
case FUNC: |
if (infunc) |
if (infunc) |
ERROR "illegal nested function" SYNTAX; |
SYNTAX( "illegal nested function" ); |
RET(kp->type); |
RET(kp->type); |
case RETURN: |
case RETURN: |
if (!infunc) |
if (!infunc) |
ERROR "return not in function" SYNTAX; |
SYNTAX( "return not in function" ); |
RET(kp->type); |
RET(kp->type); |
case VARNF: |
case VARNF: |
yylval.cp = setsymtab("NF", "", 0.0, NUM, symtab); |
yylval.cp = setsymtab("NF", "", 0.0, NUM, symtab); |
|
|
char *bp; |
char *bp; |
|
|
if (buf == 0 && (buf = (char *) malloc(bufsz)) == NULL) |
if (buf == 0 && (buf = (char *) malloc(bufsz)) == NULL) |
ERROR "out of space for rex expr" FATAL; |
FATAL("out of space for rex expr"); |
bp = buf; |
bp = buf; |
for ( ; (c = input()) != '/' && c != 0; ) { |
for ( ; (c = input()) != '/' && c != 0; ) { |
if (!adjbuf(&buf, &bufsz, bp-buf+3, 500, &bp, 0)) |
if (!adjbuf(&buf, &bufsz, bp-buf+3, 500, &bp, 0)) |
ERROR "out of space for reg expr %.10s...", buf FATAL; |
FATAL("out of space for reg expr %.10s...", buf); |
if (c == '\n') { |
if (c == '\n') { |
ERROR "newline in regular expression %.10s...", buf SYNTAX; |
SYNTAX( "newline in regular expression %.10s...", buf ); |
unput('\n'); |
unput('\n'); |
break; |
break; |
} else if (c == '\\') { |
} else if (c == '\\') { |
|
|
if (c == '\n') |
if (c == '\n') |
lineno--; |
lineno--; |
if (yysptr >= yysbuf + sizeof(yysbuf)) |
if (yysptr >= yysbuf + sizeof(yysbuf)) |
ERROR "pushed back too much: %.20s...", yysbuf FATAL; |
FATAL("pushed back too much: %.20s...", yysbuf); |
*yysptr++ = c; |
*yysptr++ = c; |
if (--ep < ebuf) |
if (--ep < ebuf) |
ep = ebuf + sizeof(ebuf) - 1; |
ep = ebuf + sizeof(ebuf) - 1; |