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

📄 lexer.c

📁 一个简单的编译器,接收表达式,并输出后缀表达式或者编译过程,可以计算的输出计算结果
💻 C
字号:
/****   lexer.c   ****************************************/

#include "global.h"

char lexbuf[BSIZE];
int  lineno = 1;
int  tokenval = NONE;

int lexan()		/*词法分析器*/
{
    int t;
    while(1) {
        t = fgetc(fp1);
        if (t == ' ' || t == '\t')	/*去除空白符*/
            ;
        else if (t == '\n'){//t为回车,则返回
            lineno = lineno + 1;
			return t;
		}
        else if (isdigit(t)) {      /*t是数字*/
            ungetc(t, fp1);
            fscanf(fp1,"%d", &tokenval);
            return NUM;
        }
        else if (isalpha(t)) {		/*t是字母*/
            int p, b = 0;
            while (isalnum(t)) {    /*t是数字或字母*/
                lexbuf[b] = t;
                t = fgetc(fp1);
                b = b+1;
                if (b >= BSIZE)
                    error("compiler error");
            }
            lexbuf[b] = EOS;
            if (t != EOF)
                ungetc(t, fp1);
            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 + -