19.12.2013 Aufrufe

„Generic Interpreter“

„Generic Interpreter“

„Generic Interpreter“

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

„Generic Interpreter“<br />

Christian Gierds<br />

Seminar Compilerbau<br />

12.06.03


Übersicht<br />

• Allgemeines zum GI<br />

• Fähigkeiten des GI<br />

• Grammatik einbinden (allgemein)<br />

• Lexikalische Ausdrücke definieren<br />

• Syntax definieren<br />

• Semantik<br />

• Komplexes Beispiel (Minako)<br />

12.06.03 Seminar Compilerbau - "Generic Interpreter" 2


Allgemeines<br />

• Home: http://www.csupomona.edu/~carich/gi/<br />

• Autor: Craig A. Rich <br />

• Version 1.0<br />

• Status: wird fortgesetzt (Konfliktbehandlung?)<br />

12.06.03 Seminar Compilerbau - "Generic Interpreter" 3


Fähigkeiten<br />

• Grammatiken: LL(1), LR(0), SLR(1), LR(1)<br />

• keine Warnung bei Konflikten<br />

• schlechte Unterscheidung von Terminals und Non-<br />

Terminals (für „faule“ Programmierer)<br />

12.06.03 Seminar Compilerbau - "Generic Interpreter" 4


Beispiel<br />

• CopCow.java<br />

12.06.03 Seminar Compilerbau - "Generic Interpreter" 5


Grammatik einbinden (allgemein)<br />

• neue Grammatikklasse erbt von Grammatiktypklasse<br />

• Konstruktor leer oder „statische“ Grammatikregeln<br />

• Regeln können dynamisch hinzugefügt werden<br />

• danach wird DataStream/String „interpretiert“<br />

12.06.03 Seminar Compilerbau - "Generic Interpreter" 6


Lexik einbinden<br />

• Lexicon.put(“token“ , Lexicon.Expression expr)<br />

wobei expr =<br />

– new Lexicon.Singleton(String literal)<br />

– new Lexicon.Match( ... )<br />

– new Lexicon.Union(Lexicon.Expression expr1, expr2)<br />

– new Lexicon.Repetition( ... )<br />

– ...<br />

– Lexicon.expression(String ere)<br />

12.06.03 Seminar Compilerbau - "Generic Interpreter" 7


Syntax<br />

• „GI“ kennt kein EBNF<br />

• rule ::= token1 token2 ... | token3 token 4 ... | ...<br />

Grammar.put(“rule“, new Object [][] {<br />

{ “token1“, “token2“, ... },<br />

{ “token3“, “token4“, ... },<br />

...<br />

});<br />

12.06.03 Seminar Compilerbau - "Generic Interpreter" 8


Semantik<br />

• Definition als Variable vom Typ Semantics<br />

Semantics sem_rule = new Semantics() {<br />

public void evaluate(ParseTree tree) { ... }<br />

};<br />

– Wurzel eines Teilbaumes ist Object tree.attribute<br />

– Kindknoten ist Object tree.phrase[i].attribute<br />

• Grammar.put(“rule“, new Object [][] {<br />

{ “token1“, “token2“, ... , sem_rule },<br />

...<br />

});<br />

12.06.03 Seminar Compilerbau - "Generic Interpreter" 9


Beispiel<br />

• Rechner2.java<br />

• Minako.java<br />

12.06.03 Seminar Compilerbau - "Generic Interpreter" 10


Fragen<br />

12.06.03 Seminar Compilerbau - "Generic Interpreter" 11

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!