Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Skriptprogrammierung Tcl/Tk von Manuel Caroli Betreuer: Thorsten Brunklaus.

Ähnliche Präsentationen


Präsentation zum Thema: "Skriptprogrammierung Tcl/Tk von Manuel Caroli Betreuer: Thorsten Brunklaus."—  Präsentation transkript:

1 Skriptprogrammierung Tcl/Tk von Manuel Caroli Betreuer: Thorsten Brunklaus

2 Historisches Scriptingsprachen gibt es seit den 60er- Jahren JCL, Unix Shells, Perl, Visual Basic, Python, JavaScript Tcl: Ende 80er John K. Ousterhout, Berkeley aus der Not geboren -Es gab damals nur zu spezielle Kommandosprachen -Zeitverschwendung für Anpassung auf Tools

3 Einleitung: Tcl/Tk Tcl: Skriptsprache Tool command language tclsh (Shell für Tcl) Tk: erweitert Tcl um Kommandos für GUI Toolkit wish (Windowing Shell) Interpreter bzw. Skriptdateien offizielle Aussprache: Tickle

4 Das Kommando-Konzept Ein Tcl-Skript besteht aus Kommandos Kommandos werden Argumente übergeben Argumente sind Strings Anzahl der Argumente hängt vom Kommando ab KommandoArgument 1Argument nArgument 2

5 Das Kommando-Konzept (2) Argumente: Trennung durch Leer / Tab Kommandos: Trennung durch neue Zeile / ; Argumente sind nicht weiter strukturiert KommandoArgument 1Argument nArgument 2

6 Beispiel: fac proc {fac} {x} { if {$x <= 1} {return {1}} {expr {$x * [fac [expr {$x-1}]]}} } Erzeugt ein neues Kommando, hier fac proc erwartet drei Argumente: proc {Kommandoname} {Argumentliste} {Block} proc{ fac }{ if... }{ x }

7 Beispiel: fac (2) if {$x <= 1} {return {1}} {expr {$x * [fac [expr {$x-1}]]}} if erwartet auch drei Argumente: -if {Bedingung} {Block1} {Block2} -Bedingung true : Block1 -Bedingung false: Block2 if{ $x <= 1 }{... }{ ret... }

8 Quoting Quoting geschieht durch {...} String bleibt unverändert Hier: das Kommando if erhält die Bedingung $x <= 1 zunächst als String Beispiel: set a 10 set b $a => 10 set b {$a} => $a

9 Beispiel: fac (3) expr {$x * [fac [expr {$x - 1}]]} expr Erwartet einen Ausdruck bestehend aus -Operanden -Operatoren -Klammern Erwartet mindestens ein Argument Argumente werden konkateniert Klammern/Quoten ist also nicht notwendig

10 Substitution 3 Varianten: $, \, [... ] set x 5 => $x wird durch 5 ersetzt Sonderzeichen: \$ wird durch $ ersetzt [... ] wird ausgewertet und dann ersetzt Beispiel: set a {expr 1+2} => expr 1+2 set a [expr 1+2] => 3

11 Beispiel: fac (4) [fac [expr {$x - 1}]] fac erwartet wie oben definiert eine Zahl [expr {$x – 1}] wird zunächst ausgewertet Dann kann fac ausgewertet werden

12 Quoting (2) Weitere Art von Quoting: Quoting durch "..." Trennzeichen (Leerzeichen, neue Zeile) werden ignoriert Substitution wie gewöhnlich Beispiel: set a wort1 wort2 => Fehler set a "wort1 wort2" => wort1 wort2

13 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } fac 3

14 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } if "$x <= 1" {return 1} {expr...}

15 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } if "3 <= 1" {return 1} {expr...}

16 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "$x * [fac [expr {$x-1}]]"

17 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * [fac [expr {$x-1}]]"

18 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * [fac 2]"

19 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * [if "$x<=1" {return 1} {expr...} ]"

20 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * [if "2<=1" {return 1} {expr...} ]"

21 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * [expr "$x * [fac [expr {$x -1}] ]" ]"

22 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * [expr "2 * [fac [expr {$x -1}] ]" ]"

23 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * [expr "2 * [fac 1]" ]"

24 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * [expr "2 * [ if "$x<=1" {return 1} {expr...} ]" ]"

25 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * [expr "2 * [ if "1<=1" {return 1} {expr...} ]" ]"

26 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * [expr "2 * [return 1]" ]"

27 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * [expr "2 * 1" ]"

28 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } expr "3 * 2"

29 Beispielauswertung fac 3 proc fac x { if "$x <= 1" {return 1} { expr "$x * [fac [expr {$x – 1}]]" } 6

30 Scoping Es gibt lokale und globale Variablen. global x y macht die Variablen x und y innerhalb einer Prozedur verfügbar. Das Kommando proc makeA {} { global A set A 1 } kann " A " erzeugen und global verfügbar machen

31 upvar upvar macht Variablen außerhalb des Scopes verfügbar makeA mit upvar : proc makeA {} { upvar #0 A a set a 1 } #0 bedeutet global n bedeutet um n "Ebenen" höher default ist 1 upvar ist also flexibler als global

32 Beispiel makeVar proc makeVar {trunk init start end scope} { for {set i $start} {$i <= $end} {incr i} { upvar [expr $scope+1] $trunk$i a set a $init } Automatisierte Variablenerzeugung Pass-by-name makeVar a erzeugt a0,..., a10

33 Weitere Kommandos Eingebaute Kommandos: mathematische Operationen Stringmanipulation Listen Kontrollstrukturen (while, for, foreach) Fehlerbehandlung Kommentare: # Externe Kommandos: z. B. dir c:\\

34 "quoting hell" if [1 <= 2] {1} {2} invalid command name "1" if {1 <= 2} {1} {2} invalid command name "1" 1. Zeile: Auswertung von [1 <= 2] erwartet dass 1 ein Kommando ist 2. Zeile: Test erfolgreich zu true ausgewertet erwartet dass {1} ein Kommando ist

35 Tk – Toolkit Erweitert Tcl um GUI Windowing Shell: wish Widgets vorgefertigte grafische Elemente Geometriemanager Steuert die Anzeige von Widgets Event-Management

36 Widgets UI-Komponenten Buttons Menüs Listboxes etc. Namen: hierarchisch. main widget.a.b : widget b ist Kind von.a, ist Kind von. Widgetname ist zugleich Kommando

37 Geometriemanager Packer Standard-Geometriemanager in Tk Ordnet Widgets an Passt die Größe von Widgets an Kommando pack Filling & Padding pack.ok.cancel.help -side left \ -padx 2m -pady 1m -fill y

38 Widgets - Beispiel button.top -text "Top button" pack.top button.bottom -text "Bottom button" pack.bottom button erzeugt Buttons pack macht Widgets (hier: Buttons) sichtbar Neues Kommando.top :.top configure -relief sunken

39 Geometriemanager (2) Placer alternativer Geometriemanager in Tk Anordnung der Widgets manuell Maße der Widgets manuell Kommando place button.b -text "OK" place.b -x 10 -y 10 -width 100

40 Event Management: bind bind.b {...} bind. {puts "Taste %K"} bind all {puts "Mausposition (%x,%y)"} Binden von events wie an entsprechende Reaktionen Mehrere zeitgleich auftretende Events werden automatisch abgearbeitet

41 Canvas Container-Widget für Grafische Primitive Rechtecke, Kreise, Linien, etc. Erzeugte Objekte ansteuerbar wie Widgets Beispiel: pack [canvas.c].c create oval 1c 1c 4c 4c -fill red

42 Gruppierung von Objekten Jedes Obekt kann Marken (Tags) haben Mehr als eine Marke erlaubt Hierarchische Gruppierung Option -tag Steuerung über diese Marken Kommandos werden für alle Objekte mit dieser Marke ausgeführt Beispiel: pack [canvas.c].c create oval 1c 1c 2c 2c -tag Kreis.c create oval 2c 2c 3c 3c -tag Kreis.c itemconfigure Kreis -fill red

43 Fazit – Tcl Vorteile sehr flexibel einfach Nachteile wird leicht unübersichtlich "quoting hell" schwierige Fehlersuche langsam

44 Fazit – Tk Vorteile sehr einfache GUI-Erzeugung ebenfalls flexibel packer Nachteile langsam Erst das Gespann "Tcl/Tk" war erfolgreich

45 Quellenangaben John K. Ousterhout, Tcl and the Tk Toolkit, Addison-Wesley Professional Computing Series (1994) John K. Ousterhout, Tcl: An Embeddable Command Language (USENIX Winter 1990) John K. Ousterhout, An X11 Toolkit Based on the Tcl Language (USENIX Winter 1991)


Herunterladen ppt "Skriptprogrammierung Tcl/Tk von Manuel Caroli Betreuer: Thorsten Brunklaus."

Ähnliche Präsentationen


Google-Anzeigen