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

📄 parser.c

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

#include "global.h"

int lookahead;

void parse()
{
    lookahead = lexan();
    while (lookahead != DONE) {
		if(lookahead=='\n')	return;
        expr(); //match('\n'); 
    }
}

void expr()
{
    int t;
    term();
    while(1)
        switch (lookahead) {
            case '+': 
	    case '-':
                t = lookahead;
                match(lookahead); term(); emit(t, NONE);
                continue;
            default:
                return;
        }
}

void term()
{
    int t;
    factor();
    while(1)
        switch (lookahead) {
            case '*': case '/': case DIV: case MOD:
                t = lookahead;
                match(lookahead); factor(); emit(t, NONE);
                continue;
            default:
                return;
        }
}

void factor()
{
    switch(lookahead) {
        case '(':
            match('('); expr(); match(')'); break;
        case NUM:
            emit(NUM, tokenval); match(NUM); break;
        case ID:
            emit(ID, tokenval); match(ID); break;
        default:
            error("syntax error");
    }
}

void match(int t)
{
    if (lookahead == t)
        lookahead = lexan();
    else error("syntax error");
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -