260 likes | 547 Views
Turtle – Grafik – Interpreter. Programmiersprache für eine Turtle Ingo Höpping. Beispiel. Ergebnis des GK 2009. Quellen / Ideen. Kapitel 6.3 - Eine Anwendung: ein Turtlegrafik-Interpreter. Fahrplan. Was kann die Turtle? Was soll die Programmiersprache können?
E N D
Turtle – Grafik – Interpreter Programmiersprache für eine Turtle Ingo Höpping Informatik: Theoretische Informatik; Weilburg XII/11
Beispiel Ergebnis des GK 2009 Informatik: Theoretische Informatik; Weilburg XII/11
Quellen / Ideen Kapitel 6.3 - Eine Anwendung: ein Turtlegrafik-Interpreter Informatik: Theoretische Informatik; Weilburg XII/11
Fahrplan • Was kann die Turtle? • Was soll die Programmiersprache können? • Beschreibung der Sprache (Syntaxdiagramme) • Scanner – Parser – Interpreter / Compiler • Rahmenprogramm (GUI) • Hilfe / Dokumentation / Auswertung Informatik: Theoretische Informatik; Weilburg XII/11
Was kann die Turtle? Delphi-Turtle eigene Turtle aus Halbjahr OOM (analoger Befehlsumfang) Java-Turtle • draw / drawTo • move / moveTo • turn / turnTo • clear • setBackground • setForeground Informatik: Theoretische Informatik; Weilburg XII/11
Was soll die Programmiersprache können? • Konzeption / Wünsche der Schüler • SST / HA / GA / LSG / … • Befehlsumfang, Syntaxvereinbarungen, Ideen zur Umsetzung, … • Diskussion und Beratung (Einschränkung) • alles ist möglich … Informatik: Theoretische Informatik; Weilburg XII/11
Beispiel I (GK 2009) Informatik: Theoretische Informatik; Weilburg XII/11
Beispiel II (GK 2011) Informatik: Theoretische Informatik; Weilburg XII/11
Beispiel II (GK 2011 – Vereinbarungen / Wünsche umsetzbar?) Informatik: Theoretische Informatik; Weilburg XII/11
Beispiel II (GK 2011 – Vereinbarungen / Wünsche umsetzbar?) Informatik: Theoretische Informatik; Weilburg XII/11
Beispiel II (GK 2011 – Vereinbarungen / Wünsche umsetzbar?) Informatik: Theoretische Informatik; Weilburg XII/11
Vom Quelltext zur Zeichnung Abbruch Quelltext false • SCANNER • lexikal. Analyse • entfernt über-flüssige Zeichen • setzt Tokens • erzeugt redText • Transduktor • PARSER • syntaktische und semantische Analyse • Akzeptor redText true • INTERPRETER / COMPILER • interpretiert redText • führt Programm aus redText Informatik: Theoretische Informatik; Weilburg XII/11
Beschreibung der Syntax / Sprache? Informatik: Theoretische Informatik; Weilburg XII/11
Was leistet der Scanner? • Lexikalische Analyse • Entfernen überflüssiger Zeichen • Setzen von Tokens • (evtl. Setzen eines Fehlercodes #) Informatik: Theoretische Informatik; Weilburg XII/11
Beispiel I (GK 2009 – Entwurf Tokens für Scanner) Informatik: Theoretische Informatik; Weilburg XII/11
Beispiel I (GK 2009 – Beispiel für Scannerergebniss) Quelltext redText { loop(36) { loop(4) { move(100); turn(90); } turn(10); } } {l36{l4{m100;t90;}t10;}} { loob(4) { move100); turn(90); } } {#4{#00;t90;}} Informatik: Theoretische Informatik; Weilburg XII/11
Umsetzung - Delphi • Scanner ScannerUnit.pas • Parser ParserUnit.pas • Interpreter InterpreterUnit.pas • Aufruf aus MainUnit.pas Informatik: Theoretische Informatik; Weilburg XII/11
Umsetzung - Java • Scanner Scanner.java • Parser Parser.java • Interpreter Interpreter.java • Aufruf aus TurtleGUI.java • Beispielvorlagen (case, array, liste) Informatik: Theoretische Informatik; Weilburg XII/11
Mögliche Erweiterungen • Laden / Speichern von Programmen • Hilfe im Programm • Dokumentation der Programmiersprache • syntax highlighting • Angabe der Fehlerstelle • Variable? Zuweisungen? • Codegeneratoren Informatik: Theoretische Informatik; Weilburg XII/11
Wie kompliziert müssen Scanner und Parser sein? • Für die Turtle: einfache DEA (Transduktor, Akzeptor) • Komplexere Sprachen • Top-Down-Parser: LL(k)-, LF(k)-Parser • Bottom-Up-Parser: LR(k)- LALR-Parser Informatik: Theoretische Informatik; Weilburg XII/11
Java hat doch gar keinen Scanner / Parser!? • Java-Quellcode wird vom Java-Compiler (javac.exe) übersetzt • Compiler enthält Scanner und Parser (besser: Aufgaben des Scanners und Parsers werden vom Compiler mit ausgeführt) Informatik: Theoretische Informatik; Weilburg XII/11
Compiler • Compiler führt lexikalische Analyse des Quelltextes durch • Erzeugt Symboltabelle und Syntaxbaum • Syntaxbaum wird in Programm in Maschinensprache übersetzt • Ausführbare Datei Quelle: Klett; Informatik 5 Informatik: Theoretische Informatik; Weilburg XII/11
Compiler (Analysephase) • Quelltext quadrat = zahl * zahl • Generierte Lexeme • <Token, Position in Symboltabelle> <token,1><=><token,2><*><token,2> <=> • Berechnungsbaum <token,1> <*> <token,2> <token,2> • Symboltabelle • semantische Analyse • Typüberprüfung Informatik: Theoretische Informatik; Weilburg XII/11
Compiler (Übersetzungsphase) Informationen der Syntaxbäume / Symboltabelle werden in Maschinencode übersetzt: • Zwischencode wird generiert • prozessorunabhängig; für abstrakte Rechenmaschine geeignet • meist in Drei-Adress-Form • wert1 = token2 * token2 • token1 = wert1 • maschinenunabhängige Optimierung • Strukturierung des Codes in der höheren Programmiersprache (z. B. durch Kopieren von Funktionen an die entsprechenden Stellen innerhalb des Programms oder Weglassen nicht relevanten Codes) • maschinenabhängige Optimierung • Anpassen an innere Strukturen und Eigenschaften des Prozessors • Nutzung des Cache • Berücksichtigung der Arbeitsweise innerhalb des Caches: Bsp. Fakultät • Berücksichtigung spezieller Befehlssätze • Übersetzen der einzelnen Befehle in passenden Maschinencode Informatik: Theoretische Informatik; Weilburg XII/11
Codegeneratoren • CUP und JFlex • JFlex erstellt (aus einer Input-Datei *.jflex) einen lexikalischen Scanner (in Form einer Java-Klasse) • CUP erstellt (aus einer Input-Datei *.cup) einen Parser (in Form einer Java-Klasse) Hilfsprogramme zum Erstellen von Scannern und Parsern: • AtoCC • „… mit Hilfe von AtoCC kann leicht ein LALR(1)-Parser/Interpreter entwickelt werden.“ Informatik: Theoretische Informatik; Weilburg XII/11
… genug geschwätzt!!! Informatik: Theoretische Informatik; Weilburg XII/11