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 に答える