version 1.18, 2020/06/10 21:05:02 |
version 1.19, 2020/06/10 21:05:50 |
|
|
#include "ytab.h" |
#include "ytab.h" |
|
|
extern YYSTYPE yylval; |
extern YYSTYPE yylval; |
extern int infunc; |
extern bool infunc; |
|
|
int lineno = 1; |
int lineno = 1; |
int bracecnt = 0; |
int bracecnt = 0; |
|
|
|
|
#define RET(x) { if(dbg)printf("lex %s\n", tokname(x)); return(x); } |
#define RET(x) { if(dbg)printf("lex %s\n", tokname(x)); return(x); } |
|
|
int peek(void); |
|
int gettok(char **, int *); |
|
int binsearch(char *, Keyword *, int); |
|
|
|
static int peek(void) |
static int peek(void) |
{ |
{ |
int c = input(); |
int c = input(); |
|
|
while ((c = input()) != '\n' && c != 0) |
while ((c = input()) != '\n' && c != 0) |
; |
; |
unput(c); |
unput(c); |
|
/* |
|
* Next line is a hack, itcompensates for |
|
* unput's treatment of \n. |
|
*/ |
|
lineno++; |
break; |
break; |
case ';': |
case ';': |
RET(';'); |
RET(';'); |
|
|
case '\\': |
case '\\': |
c = input(); |
c = input(); |
switch (c) { |
switch (c) { |
|
case '\n': break; |
case '"': *bp++ = '"'; break; |
case '"': *bp++ = '"'; break; |
case 'n': *bp++ = '\n'; break; |
case 'n': *bp++ = '\n'; break; |
case 't': *bp++ = '\t'; break; |
case 't': *bp++ = '\t'; break; |