0

官方问题:

编写 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
    }

我非常有信心我在这里有大致的想法,但我希望有人可以帮助我完善这个/确认我在正确的轨道上..提前致谢!

4

1 回答 1

2

看起来(模糊地)您正在尝试评估重复语句。这不是递归下降解析所做的。我期待这样的事情(在伪代码中):

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);
}
于 2012-01-29T20:52:45.160 回答