Syntaktische Analyse

Benutzer187

Aktives Mitglied
Hey,
ich habe vor Kurzem die Aufgabe bekommen, einen Interpreter zu schreiben.
Doch jetzt hänge ich an der syntaktischen Analyse...
Kann mir vielleicht jemand dabei helfen, die Tokenfolge aus der lexikalischen Analyse zu prüfen?

EDIT: Bin Anfänger ;)

Danke :)
 

Benutzer187

Aktives Mitglied
Was heisst das ? Was hast du und was soll gemacht werden ?
Es soll ein Interpreter für eine formale Sprache geschrieben werden.
Mir wurde gesagt, dass die Verarbeitung in mehreren Schritten passiert.
In der:
  • lexikalischen Analyse
  • syntaktischen Analyse
  • Listen-Erzeugung
  • und Interpretation
Bis jetzt habe ich nur die lexikalische Analyse und es soll die syntaktische gemacht werden.
Es soll Sourcecode durch eine Datei eingelesen werden und daraus dann Token gebildet werden.
Dann soll geprüft werden ob die Tokenfolge der Syntax entspricht. Dann soll daraufhin ein Syntaxbaum gebildet werden.

Das war noch nicht die ganze Aufgabe aber das oben erläuterte ist gerade mein Problem.
 

Benutzer187

Aktives Mitglied
Und den Teil hast du schon ? Üblicherweise erzeugt die lexikalische Analyse ja einen Tokenstrom den dann die syntaktische Prüfung als Input erhält. In welcher Form ist die Grammatik der zugrundeliegenden formalen Sprache definiert ?
Ja den Teil habe ich schon.
Die Sprache heißt VgaA:
Es kann einfach nur eine einfache Zahl sein oder:
( VgaA Operator VgaA )

EDIT: VgaA ist eine Zahl.
 

JStein52

Top Contributor
Ok, die Sprache verstehe ich aber noch nicht ganz.
Ist eine "einfache Zahl" etwas anderes als VgaA ?
Können gültige Ausdrücke in dieser Sprache auch geschachtelt sein ?
Also wäre ((VgaA Operator VgaA) Operator VgaA) auch ein gültiger Ausdruck ?
 

JStein52

Top Contributor
Ok, kann also auch geschachtelt sein. Wie ist der Scanner (lexikalische Analyse) aufgebaut ? Ist das sowas wie getNextToken der dann "Zahl", "Operator", "Klammer auf", Klammer zu" liefert ? (nur so nebenbei: Zahl ist ein double-Literal ? 3.5 oder sowas ?)
 

InfectedBytes

Top Contributor
Im Grunde sollte deine lexikalische analyse dir einen Stream aus Tokens geben. In der Syntaktischen analyse bekommst du dann diesen Stream und kannst in auf Syntax prüfen. Mal etwas pseudo code:
Java:
void ParseVgaA(TokenStream stream) {
    if(stream.peek() is Zahl) { // oberer Weg in deinem Diagramm
        stream.consume(); // zum nächsten Token wandern
    } else if (stream.peek() is KlammerAuf) { // unterer Weg in deinem Diagramm
        stream.consume();
        ParseVgaA(stream);
        ParseOperator(stream);
        ParseVgaA(stream);
        if(stream.peek() is KlammerZu) stream.consume();
        else throw new SyntaxError();
    } else {
        throw new SyntaxError();
    }
}
 

Ähnliche Java Themen

Neue Themen


Oben