📄 lexer.cpp
字号:
#include "global.h"
char lexbuf[BSIZE];
int lookup(char s[]);
int insert(char s[], int tok);
void error(char *m);
extern int tokenval;
extern int lineno;
extern struct entry symtable[SYMMAX];
int lexan()
{
int t;
while(1){
t = getchar();
if ( t == ' ' || t == '\t' )
;
else if ( t == '\n' )
lineno++;
else if ( isdigit(t) ) {
ungetc( t, stdin );
scanf( "%d", &tokenval );
return NUM;
}
else if ( isalpha(t) ) {
int p, b = 0;
while ( isalnum(t) ) {
lexbuf[b] = t;
t = getchar();
b++;
if ( b >= BSIZE )
error("syntax error");
}
lexbuf[b] = EOS;
if ( t != EOF )
ungetc( t, stdin );
p = lookup(lexbuf);
if ( p == 0 )
p = insert( lexbuf, ID );
tokenval = p;
return symtable[p].token;
}
else if ( t == EOF )
return DONE;
else {
tokenval = NONE;
return t;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -