âGeneric Interpreterâ
âGeneric Interpreterâ
âGeneric Interpreterâ
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