Как выглядит метод Accept () в парсере? - PullRequest
0 голосов
/ 25 января 2019

Как выглядит метод 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 голосов
/ 25 января 2019

Я думаю, что он должен принять токен и затем увеличить его до следующего токена

Да, псевдокод для accept может выглядеть примерно так:

accept(tokenKind) {
    if (next.kind == tokenKind) {
        next = tokenizer.getNextToken();
    } else {
        error("Unexpected token $next; expected $tokenKind");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...