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

Slides:



Advertisements
Ähnliche Präsentationen
Referat von Frederik Barth
Advertisements

Ausführen.
Betriebssysteme - Überblick
XML Ursprünglich zur besseren logischen Strukturierung von Dokumenten vorgesehen. Wird aber zunehmend in anderen Anwendungsfeldern genutzt, z.B. zur Beschreibung.
Einfügen einer Scanchain in ein Chipdesign mittels DFT- Compiler.
Objektorientierte Programmierung
PowerPoint-Makros für DScript
Qualitätssicherung von Software
Automatische Etikettierung in Sprachdatenbanken Tina John.
FH-Hof Einbindung von JavaScript Anweisungen
Java: Grundlagen der Sprache
Gliederung Anforderungen Entwurf Beispiel Implementierung
Die Skriptsprache Lua Softwaretechnologie II.
Installation des Add-In SOLVERSTAT
1A: POSIX POSIX (Portable Operating System) ist ein Standard für UNIX-Systeme. Er dient dazu, Programme portabel unter UNIX und Derivaten zu tauschen und.
Parsing regulärer Ausdrücke
Oracle PL/SQL Server Pages (PSP). © Prof. T. Kudraß, HTWK Leipzig Grundidee: PSP – Internet-Seiten mit dynamischer Präsentation von Inhalten durch Einsatz.
Brandenburgische Technische Universität Cottbus Program Profiling Andrzej Filipiak Übung Testen von Software SoSe 2006.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Die Skriptsprache Perl (2) Wolfgang Friebel DESY Zeuthen.
UNIX SHELL Christian Benz SS #!/bin/bash.
Das erste Programm (Folie 16)
RDF-Schema Seminar: „Semantic Web“ André Rosin,
Vortrag: Martin Hiersche
EDV1 - 02ManualPages Das UNIX-Hilfesystem. EDV1 - 02ManualPages 2 UNIX - Hilfesystem Die Manualpages sind in Sektionen unterteilt: 1.User Commands – alle.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
EDV1 - 02ManualPages 1 Das UNIX- Hilfesystem. 2EDV1 - 02ManualPages UNIX - Hilfesystem Die Manualpages sind in Sektionen unterteilt: Die Manualpages sind.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Der VFP Debugger - Coverage und Profiling. © 1999 TMN-Systemberatung GmbH Der VFP Debugger n Neues Aussehen, eigene Task n Erweiterte Möglichkeiten n.
Seite Common Gateway Interface. Konzepte. Übersicht 1Einleitung 2Was ist CGI? 3Wozu wird CGI verwendet? 4Geschichtlicher Überblick 5Grundvoraussetzungen.
Die Skriptsprache Python im Kontext des Softwareentwicklungsprozesses
Frank Fischer Manager Evangelism and Marketing Microsoft Deutschland GmbH.
SQL PHP und MySQL Referat von Katharina Stracke und Carina Berning
Java programmieren mit JavaKara
Betriebssysteme: Macintosh OS
Shellprogrammieren mit Bash
Entwicklung der Programmiersprachen
Proseminar Programmiersprachen Python
Seminar Internet Technologien
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
CGI (Common Gateway Interface)
Computerorientierte Physik VORLESUNG und Übungen Vorlesung Zeit: Mo., – Uhr Ort: Hörsaal 5.01, Institut für Physik, Universitätsplatz 5, A-8010.
PHP Basic.
Was mich ursprünglich von Perl überzeugt hat. Gegeben ist eine Textdatei, deren Größe unbekannt ist. Sie ist jedoch so klein, daß sie komplett in den Speicher.
Programmieren in C Grundlagen C 2
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Vortrag: Frames & Javascript.
Codebaumanalyse Was geschieht in der Methode Codebaum.decodiere, wenn als Parameter der Code 001 übergeben wird? Gib die Zeilennummern der durchlaufenen.
1 Tagesüberblick 3 Lösung Hausaufgabe/Fragen Zeilenweises Lesen von Dateien Schleifenausbrüche Die Variable $_ Textfunktionen.
SFZ FN Sj. 13/14 Python 1 Grundlagen Inf K1/2 Sj 13/14
Shell-Programmierung
1 Tagesüberblick 4 Lösung Hausaufgabe/Fragen Mustervergleiche.
Viren, Würmer+ co.
Gib die Zahl 4 ein!. VB-Skript ColTrue = RGB(0, 255, 0) ColFalse = RGB(255, 0, 0) ColSelected = RGB(255, 255, 0) TextBox1.BackColor = ColSelected If Not.
Berechenbarkeit Klaus Becker Berechenbarkeit.
PHP:: Hypertext Preprocessor Einführung Praxis. PHP:: Hypertext Preprocessor Jetzt mal von der anderen Seite © All rights reversed2 PHP:: Hypertext Preprocessor.
Geschichte - Entstehung - Was ist PHP? Einordnung - Allgemeines
Programmierungssprache PERL
(Syntax, Strings/Zahlen, Variablen, Arrays)
Übung Betriebssystem, Uni Innsbruck 1 Projekt1: Prozesse unter Unix Teil I Grundlagen von Unix.
Linux Universität zu Köln HKI Seminar: IT-Basics
Die Programmiersprache Ruby Seminarvortrag von Lia Schulze Dephoff 1.
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Webseiten – HTML Gliederung 1.Einführung in HTML 2.Aufbau einer einfachen Webseite.
DTrace Mathias Velten Sun Campus Ambassador
Geschicklichkeit und Reaktion:
Linux.
Gib die Zahl 4 ein!.
Die programmierte Lösung
 Präsentation transkript:

Skriptprogrammierung Tcl/Tk von Manuel Caroli Betreuer: Thorsten Brunklaus

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

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

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

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

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 }

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... }

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

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

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

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

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

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

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

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

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

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

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

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...} ]"

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...} ]"

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}] ]" ]"

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}] ]" ]"

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

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...} ]" ]"

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...} ]" ]"

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

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

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

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

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

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

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

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

"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

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

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

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

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

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

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

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

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

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

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

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)