Recursive-descent-parser-Implementierung

Ich bin auf der Suche zu schreiben einige Pseudocode für eine rekursive Abstieg parser. Nun, ich habe keine Erfahrung mit dieser Art der Codierung. Ich habe einige Beispiele online, aber Sie arbeiten nur auf eine Grammatik, die verwendet mathematische Ausdrücke. Hier ist die Grammatik ich bin auf Basis der parser auf.

S -> if E then S | if E then S else S | begin S L | print E

L -> end | ; S L

E -> i

Muss ich schreiben Methoden S()L() und E() und wieder einige Fehlermeldungen, aber die tutorials die ich gefunden habe online noch nicht viel geholfen. Kann jemand mich in die richtige Richtung und geben Sie mir einige Beispiele nennen?.

Möchte ich schreiben, es in C# oder Java-syntax, da ist es für mich einfacher zu beziehen.


Update

public void S() {
    if (currentToken == "if") {
        getNextToken();
        E();

        if (currentToken == "then") {
            getNextToken();
            S();

            if (currentToken == "else") {
                getNextToken();
                S();
                Return;
            }
        } else {
            throw new IllegalTokenException("Procedure S() expected a 'then' token " + "but received: " + currentToken);
        } else if (currentToken == "begin") {
            getNextToken();
            S();
            L();
            return;
        } else if (currentToken == "print") {
            getNextToken();
            E();
            return;
        } else {
            throw new IllegalTokenException("Procedure S() expected an 'if' or 'then' or else or begin or print  token " + "but received: " + currentToken);
        }
    }
}


public void L() {
    if (currentToken == "end") {
        getNextToken();
        return;
    } else if (currentToken == ";") {
        getNextToken();
        S();
        L();
        return;
    } else {
        throw new IllegalTokenException("Procedure L() expected an 'end' or ';' token " + "but received: " + currentToken);
    }
}


public void E() {
    if (currentToken == "i") {
        getNextToken();
        return;
    } else {
        throw new IllegalTokenException("Procedure E() expected an 'i' token " + "but received: " + currentToken);
    }
}

InformationsquelleAutor der Frage user1072706 | 2012-03-21

Schreibe einen Kommentar