parser.c

来自「c的编译器」· C语言 代码 · 共 81 行

C
81
字号
#include "global.h"

int lookhead;

parse()
{
    lookhead = lexan();
    while (lookhead != DONE) {
        expr();
        match(';');
    }
}

expr()
{
    int t;
    term();

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

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

factor()
{
    switch (lookhead) {
        case '(':
            match('(');
            expr();
            match(')');
            break;
        case NUM:
            emit(NUM, tokenval);
            match(NUM);
            break;
        case ID:
            emit(ID, tokenval);
            match(ID);
            break;
        default:
            error("systax error 1");
    }
}

match(t)
    int t;
{
    if (lookhead == t)
        lookhead = lexan();
    else error("systax error 2");
}

⌨️ 快捷键说明

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