解析器中的Accept()方法是什么样的?

时间:2019-01-25 00:27:39

标签: compiler-construction

accept()方法在解析器的代码中是什么样的? 这是语法:

    E --> T + E | T
    T --> F * T | F
    F --> (E) | a

我大部分时间都了解伪代码,但实际上需要编写自己的解析器才能更好地理解它。 这是我的教授给我的伪代码:

main(){
    E
}
E(){
    T
    if (next == +){
        accept +
        E
    }
}
T(){
    F
    if (next == *){
        accept *
        T
    }
}
F(){
    if (next == "("){
        accept "("
        E
        accept ")"
        else
            accept a
}

因此,除了“接受”应该做什么以外,我了解所有内容。我认为它应该接受令牌,然后递增到下一个令牌,但是我可能错了?有人可以给我看看伪代码吗?

1 个答案:

答案 0 :(得分:0)

  

我认为它应该接受令牌,然后增加到下一个令牌

是的,accept的伪代码可能看起来像这样:

accept(tokenKind) {
    if (next.kind == tokenKind) {
        next = tokenizer.getNextToken();
    } else {
        error("Unexpected token $next; expected $tokenKind");
    }
}