Нужна помощь в написании метода Java для выполнения анализа рекурсивного спуска - PullRequest
0 голосов
/ 30 января 2012

Официальная проблема:

Напишите метод Java для выполнения анализа рекурсивного спуска следующего производства:

<repeat_statement> -> REPEAT <statement> UNTIL <expression> ;

Вот что я придумал:

void repeatStatement() {
    if(token == REPEAT) {
        token = getNextToken();
        if(parseStatement()) {
            if(token == UNTIL) {
                token = getNextToken();
                if(parseExpression()) {
                    if(token == ;) {
                        return true
                    }
                }
            }
        } return false
    }

Я довольно уверен, что у меня есть общая идея, но я надеялся, что кто-то может помочь мне отшлифовать это / подтвердить, что я на правильном пути ... Спасибо заранее!

1 Ответ

2 голосов
/ 30 января 2012

Похоже (смутно), что вы пытаетесь оценить повторное утверждение.Это не то, что делает анализ рекурсивного спуска.Я бы ожидал что-то вроде этого (в псевдокоде):

RepeatStatement repeat_statement() throws ParseException {
    if (!consume("REPEAT")) {
        throw new ParseException("no REPEAT token");
    }
    Statement statement = statement();
    if (!consume("UNTIL")) {
        throw new ParseException("no UNTILtoken");
    }
    Expression expression = expression();
    if (!consume(";")) {
        throw new ParseException("no closing semicolon");
    }
    return new RepeatStatement(statement, expression);
}
...