⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lexer.cpp

📁 编译原理作业
💻 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 + -