Teil 7 Skript-Sprachen Perl Python Tcl/Tk Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 1 Inhaltsübersicht HPS WS 2003/04 - Grundlagen (1,2) - Konzepte imperativer Programmiersprachen (2,3) - Deklarative Programmiersprachen (4) - Objektorientierte Programmiersprachen (5,6) - Programmierung von Smart Cards: Java Card (7) - Wissenschaftliches Rechnen: Fortran (8) - Wirtschaftsanwendungen: Cobol (8, 9) - Skriptsprachen (9) - Formale Semantik - Operationale Semantik mit ASMs (10) - Operationale Semantik mit natürlicher Semantik und SOS (11) - Denotationelle Semantik (12, 13) - Axiomatische Semantik (14) Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 2 Aufgaben ● Historisch: (1) Textdateiverarbeitung (2) Steuerung und Kopplung von Programmen ● Zusätzlich heute: (a) Benutzerschnittstellenentwicklung (b) Prototypentwicklung (c) Softwarekonfiguration Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 3 Geschichte ● Zuerst: Steuerbefehle von Hand eingegeben (Operateur) oder am Beginn eines Programms (Kartenstapel) ● Job Description Language (JCL auf OS 360/MVS) ab 1963 Verkettung von Programmläufen (Chain-Jobs) gesteuert durch Ergebniswert ● Vorrangsteuerung ,,System``-Variable (z.B. Cobol Dateinamen) zur Steuerung des EA-Verhaltens ● ● Flexibilisierung ● Wartbarkeit ● interaktive Benutzeroberfläche von Teilnehmersystemen (Multics, MTSS, TSOS, BS 2000) seit 1966/7 ● Bourne-Shell auf UNIX (1971ff.): interaktiv, Programme abspeicherbar als „Skripten“ ● Skripten für Texteditoren wie ed, sed, awk, ... ● Skripten für graphische Werkzeuge wie Tk Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 4 Prinzipien von Skript-Sprachen ● ● ● ● ● ● ● ● ● Einfache Programmiersprache Ziel: Dateibearbeitung Operation = Programm ● aus Effizienzgründen auch eingebaute Operationen Operand = Datei, Zahl, Text Variable: Behälter für beliebige Texte ● häufig nur flache Gültigkeitsbereiche, keine Schachtelung Ablaufsteuerung: ● sequentielle Ausführung ● asynchrone Ausführung (fork) mit/ohne Endemeldung ● Koroutinen (UNIX-pipe) Unterprogramm = Programm in eigener Datei ● parametrisiert mit Texten $1, $2, ... von der Kommandozeile Prinzip der Standard-Eingabe/Ausgabe/Fehlerausgabe ● umlenkbar auf beliebige Dateien (Multics, UNIX) Ausführung interpretativ (neuerdings auch übersetzt, vorübersetzt) Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 5 (1) Eine MULTICS/UNIX-Errungenschaft: Universeller Dateityp Text Alle Dateien sind Bytefolgen, als Text interpretierbar ● ● also keine Systemunterstützung für index-sequentielle Organisation ● jedoch Zugriff auf Puffer (rohe EA) und byteweise Adressierung unterstützt bearbeitbar mit Texteditor ● ● + kein spezielles Werkzeug abhängig vom Dateityp nötig ● - semantische Konsistenz der Bearbeitung nicht überprüft Ein/Ausgaben mit wenigen Ausnahmen als Text, nicht binär ● ● ● plattformunabhängig, da ASCII/ISO-8859-*/Unicode-verschlüsselt die Microsoft-Errungenschaft: proprietäre Codierung des Zeilenwechsels Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 6 (1) Dateibearbeitung (ed) Kommandosyntax: [address[,address]]command [parameter] Semantik: Wende das Kommando auf die adressierten Zeilen (inklusive) an 1,$s/r/R/ 1,$s/r/R/g /abc/p ?abc?p 5d .,+3d .j # # # # # # # substitutiere R für erstes r auf jeder Zeile substituiere R für alle r suche vorwärts nach Zeile mit ''abc'' und drucke das gleiche rückwärts lösche Zeile 5 (mit Umnumerieren) lösche aktuelle Zeile bis dritte nachfolgende Zeile hänge nachfolgende Zeile hinten an aktuelle Zeile an ● Gebrauch des ed heute: einfachster, kleinster interaktiverTexteditor unter UNIX ● Für Skripten sed oder awk benutzen Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 7 (1) Reguläre Ausdrücke In Suchmustern bedeuten ● . beliebiges Zeichen ● ^ Zeilenanfang ● $ Zeilenende ● \c Sonderzeichen, z.B. \$: das Dollarzeichen ● [... ] Menge alternativer Zeichen z.B. [124], [1-9],[A-Z0-9], [^0-9]: alle Zeichen außer 0-9 ● * ● \{m,n\} vorangehendes Zeichen mindestens m, maximal n-mal ● \(...\)Klammerung beliebig häufiges Vorkommen des vorangehenden Zeichens einer Teilfolge - 2-te Teilfolge ist anschließend \2 Posix: weitere Zusätze Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 8 (1) awk ● Bislang: Bearbeitung von Text als Folge von Zeichen – Zeilenorientierte Sicht: reguläre Ausdrücke auf Zeile einzeln angewendet – Tabellarisch abgespeicherte Daten erfordern Spaltenbegriff ● awk ermöglicht diese Sicht Zeilen-Zerteiler mit C-ähnliche Ausgabemöglichkeiten Beispiel: datei: Neumann Rainer Löwe Welf Uni-Karlsruhe Uni-Karlsruhe awk -F\t´{print $2}´ datei Rainer Welf Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 9 (2) Filter und Ströme ● Spezielle Dateien: Standardeingabe, Standard- und Fehlerausgabe ● Kopplung von Programmen über Ströme von Puffern ● Abarbeitung der Programme mit Koroutinen ● Pufferung ● Dateibearbeitungswerkzeuge zur Bearbeitung der Ströme ● (eingeschränkt) einsetzbar Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 10 (1) und (2) Beispiel: Umlautersetzung ● Aufgabe: Umwandlung ae → ä, AE → Ä, Ae → Ä, sz → ß, usw. ● Aufruf (Skript): sed -n -f umpr $1 >/tmp/$$uml mv /tmp/$$uml $1 ● sed-Skript umpr s/ae/Ä/g s/oe/ö/g s/ue/ü/g s/Ae/Ä/g s/Oe/Ö/g s/Ue/Ü/g s/AE/Ä/g s/OE/Ö/g s/UE/Ü/g s/sz/ß/g s/\([ae]\)ü/\1ue/g s/Öttinger/Oettinger/g s/aßin/aszin/g s/\([AE]\)Ü/\1UE/g s/trü$/true/g s/\([aA]\)uß/\1uszu/g s/tüll/tuell/g s/trü /true /g s/uß\(auo\)/usz\1/g s/TÜLL/TUELL/g s/\([aAeEqQ]\)ü/\1ue/g s/\([b-df-hj-np-tv-z]\)ß/\1sz/g s/\([zZ]\)ürst/\1uerst/g s/ikröle/ikroele/g s/gß/gsz/g s/\([nN]\)öther/\1oether/g s/ongrün/ongruen/g s/außu/aus\{\}zu/g s/Thü/Thue/g s/ogün/oguen/g s/\([Kk]\)öffiz/\1oeffiz/g s/Göthe/Goethe/g s/logü/logue/g s/lß/ls"-z/g s/GÖTHE/GOETHE/g s/glü /glue /g s/ußei/us"-zei/g s/\([Ss]\)öben/\1oeben/g s/sgü/sgue/g p s/onflün/onfluen/g Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 11 (2) Shell-Programmierung ● Automatischer Ablauf von Programmfolgen ● Kopplung von Programmen (Bedingte Aufrufe, Ströme) ● Nebenläufigkeit ● Umgebungsvariablen ● Dynamische Befehlserzeugung (eval) ● Wiederverwendung? Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 12 (1) und (2) Perl - Practical Extraction and Report Language ● Ziele und Einsatzgebiete: – Textfilter (wie sed, awk, ...) – Berichterstellung – Common Gateway Interface (CGI) Programme (www Server) – Komplexe Automatisierungsaufgaben (Konfiguration von Programmen) Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 13 Entwurfsgedanken zu Perl ● Grundlegende Programmierereigenschaften: – Faulheit und Ungeduld ● Demnach müssen Programme: – kurz und schnell zu erstellen sein – keine überflüssigen Anweisungen enthalten – schnell zu testen sein – einfache Aufgaben leicht machen, ohne komplexe Aufgaben unmöglich zu machen ● Problem: – Lesbarkeit und damit Wartbarkeit von Programmen Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 14 RSA Verschlüsselung #!/bin/perl -sp0777i<X+d*lMLa^*lM%0]dsXx++lMlN/dsM0<j] dsj$/=unpack(‘H*‘,$_);S_=`echo 16dio\U$k“SK $/SM$n\EsN0p[1N*11K[d2%Sa2/d0$^Ixp“|dc`; s/\W//g;$_=pack(‘H*‘,/((..)*)$/) Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 15 Typen (Skalare) Werte - beginnend mit $ Reihungszugriffe - beginnend mit @ Assoziative Reihungen - beginnend mit % Beispiele: ● $a ist „{x->1, y->2}“ ● @a[2] ist „a->1“ ● %a = {x->1, y->2} Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 16 Operationen ● Operationen werden in einem Kontext ausgeführt ● Kontext: – Skalarer Kontext (z.B. boolescher Kontext, Void-Kontext) – Listenkontext – Interpolativer Kontext – Objektkontext Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 17 Standardmodule und -bibliotheken Modul File Term Text Math Tie Funktionen Basename, ChckTree, Copy, Find, Path Cap, Complete Abbrev, ParseWords, Tabs BigFloat, BigInt, Complex Hash, StdHash, SubstrHash, Socket, Net, Time, I18N, POSIX Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 18 Beliebte Fehler ● Operatoren können sich im Listenkontext anders verhalten als in skalarem Kontext – Zuweisungen – Vergleiche ● Namen können für Funktionen oder Literale stehen (kontextabhängig) ● Seiteneffekte von Operatoren, Funktionen Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 19 Erfahrungen ● Jedes Skript fängt einmal klein an ● (Kleine) Skripten sind selbsterklärend ● Jedes Skript wird größer ... und noch größer ● Ein großes Skript führt zur Unkündbarkeit des Autors Skripten dürfen nur disziplinierte Profis schreiben Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 20 (1) und (2) Python ● Python angelehnt an Modula-3 ● wesentlich besser lesbar, daher wesentlich besser wartbare Programme ● sonst vergleichbare Leistung wie Perl: Module, Objektorientierung, umfangreiche Bibliotheken ● für Einführungen vgl. z.B. die Unterlagen in der Linux-Dokumentation Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 21 (a) und (b) Benutzerschnittstellen und Prototypen ● Problem: Erstellung von grafischen Benutzerschnittstellen mit X11 kompliziert Prototypen bestehen zu großen Teilen aus Benutzerschnittstellen (ohne echte Funktionalität) ● Ziel: Einfache Erstellung von X11 Anwendungen Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 22 (a) X11-Hauptprogramm Widget MyXApplicationShell; Widget *MyXApplicationShellWidgets = (Widget *) NULL; main(unsigned int argc, char * argv[]) MyXApplicationShell = XtInitialize(argv[0],argv[0],NULL,0,&argc,argv); MyXApplicationShellWidgets = MyXApplicationShellLayout(MyXApplicationShell); XtRealizeWidget(MyXApplicationShell); XtMainLoop(); Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 23 (a) X11-Argumentvektoren n = 0; XtSetArg(args[n],XmNleftAttachment,XmATTACH_FORM); n++; XtSetArg(args[n],XmNrightAttachment,XmATTACH_FORM); n++; XtSetArg(args[n],XmNtopWidget,fdEditField); n++; XtSetArg(args[n],XmNtopAttachment,XmATTACH_WIDGET); n++; XtSetArg(args[n],XmNtopOffset,5); n++; separator = XmCreateSeparator(fdEntryEditor,sepName,args,n); XtManageChild(separator); Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 24 (a) X11 Erzeugen von Dialogfenstern n = 0; XtSetArg(args[n],XmNdialogStyle,XmDIALOG_FULL_APPLICATION_MODAL);n++; XtSetArg(args[n],XmNdialogTitle,XmStringLtoRCreate ('Edit entry ...', XmSTRING_DEFAULT_CHARSET));n++; XtSetArg(args[n],XmNnoResize,TRUE);n++; XtSetArg(args[n],XmNresizePolicy,XmRESIZE_NONE);n++; XtSetArg(args[n],XmNautoUnmanage,FALSE);n++; fdEntryEditor = XmCreateFormDialog(MyXApplicationShell,fdEntryEditorRes,args,n); Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 25 (a) Tk - Tool Kit für X-Windows ● Tk was [also] born out of frustration (J. K. Ousterhout) ● Grundidee: – Vereinfachung wiederkehrender X11-spezifischer Aufgaben label .l -text Label button .b -text Button checkbutton .c -text Checkbutton radiobutton .r -text Radiobutton pack .l .b .c .r update Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 26 (a) GUI-Programmierung ● Rückrufe(Callbacks) ● Ziel: Reaktion auf Benutzeraktionen ● Mögliche Implementierungen: – Ereignisse (mit Warteschlangen, etc.) – Prozedurvariable Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 27 (a) Rückrufe (Callbacks) in Tk ● Skripte anstelle von Prozedurvariablen ● Spezielle Text-Muster für Ereignis-Daten Beispiel: button .b -text Test; pack .b bind .b <Destroy> { puts stdout {Window %W destroyed} } bind .b <1> { puts stdout {Mouse pressed at %x,%y} } ● Berechnung von Variablen, Ausdrücken? Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 28 (b) Prototyp-Entwicklung ● Starte mit einem reinen Interpretierer ● Implementiere Funktionalität auf Basis der Skript-Sprache ● Stabile bzw. (in Tk) ineffiziente Funktionen in C, argc-argv-Schnittstelle für Interpretierer ● Wiederhole letzteres bis zur Konvergenz ● Entferne Interpretiererkern und argc-argv-Schnittstellen Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 29 (b) Tcl / Tk Tcl (Tool Command Language) Skriptsprache mit ● Operationen für Zeichenketten und Listen ● Prozedurkonzept ● Zugriff auf Ausführungsstapel und Interpretierer (Meta-Informationen) Idee: Relevante C-Fkt interaktiv verwendbar machen (argc-argv-Schnittstelle) ● Vorteile: – Interaktive Verwendbarkeit – Einfaches Testen – Möglichkeit zum Ausprobieren ● Nachteile: – Verlust von Typinformationen – Variableninterpretation (Typanpassung) Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 30 (b) und (c) Tcl-Interpretierermodell ● Kern besteht aus Funktionen – zur Variablenverwaltung – zur Zeichenketteninterpretation – für die Aufrufkontextverwaltung – zur Erzeugung von argc-argv-Aufrufen an unbekannte Funktionen – zum An-/Abmelden zusätzlicher Funktionen ● Möglichkeit zur Integration von Interpretierer in Anwendungen ... zur Beschreibung der Benutzerschnittstelle ... zur dynamischen Konfiguration der Anwendung Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 31 (a) und (b) Beispiel Sather-Tcl ● Sather bietet – statische Typsicherheit – effiziente Programme – kaum Bibliotheken, insbesondere keine GUI-Bibliotheken Implementierung der Programmlogik in Sather Implementierung der GUI-Teile in Tcl/Tk Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 32 (c) Tcl und Systemkonfiguration ● Problem: – Starres, übersetztes System – Leicht variierende Kundenwünsche – Entwickler: Konfiguration nicht zu verwalten ● Lösung: – Exportiere Objekte/Funktionen in eine Interpretierer-Schnittstelle. – Verwende den Interpretierer bzw. die Skript-Sprache als Konfigurationssprache Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 33 (a), (b) und (c) Beispiele ● Erweiterung einer Anwendung um interaktive (oder skriptbasierte) Steuerung Beispiel: TclOBST – Integration eines Tcl-Interpreters in einen OBST-Datenbankbrowser Anwendungen: – OBST-DB-Shell – USE, die OBST Schema-Evolutionsumgebung Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 34 Perl, Tcl/Tk und Python am gleichen Beispiel: Perl ● Perl %map = ('1','Maier','2','Müller','3','Schmidt'); print "Eingabe einer Zahl (1, 2 oder 3):"; chop($x = <STDIN>); if (1 <= $x && $x <=3){ print "Name für $x ist $map{$x}\n" } else { print "Falsche Eingabe\n" } Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 35 Perl, Tcl/Tk und Python am gleichen Beispiel: Tcl/Tk ● Tcl/Tk wm title . "Auswahl" wm minsize . 100 100 frame .buttons -borderwidth 15 pack .buttons -side top -fill x button .buttons.quit -text Schließen -command exit button .buttons.input -text Eingabe -command Print pack .buttons.quit .buttons.input -side right frame .f; pack .f -side top label .f.l -text "Eingabe einer Zahl (1,2 oder 3)" entry .f.digit -width 5 -relief sunken pack .f.l .f.digit -side left text .output -width 50 -height 20 -bd 5 -relief raised pack .output -side top proc Print {} { set list {Maier Müller Schmidt} set c [.f.digit get] if {$c >= 1 && $c <= 3} { .output insert end [lindex $list [expr $c-1]] .output insert end "\n" } else { .output insert end "falsche Eingabe\n" } } Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 36 Perl, Tcl/Tk und Python am gleichen Beispiel: Python ● Python map = { 1:"Maier", 2:"Müller", 3:"Schmidt"} print("Eingabe einer Zahl (1, 2 oder 3):"), x = input() if map.has_key(x) : print(map[x]) else: print("Falsche Eingabe") Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 37 (c) Anwendungen und Konfigurationssprachen ● R/3 -- ABAP/4 ● Microsoft Office - Visual Basic for Applications (VBA) ● StarOffice - StarBasic oder Java(Script) ● Rational Rose - Rose Basic ● Grundidee: Programmierbare Standardanwendungen Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 38 (c) VBA ● Objektorientierter Basic-Dialekt ● Entstanden aus Access-, Excel-, Word-Basic ● Anwendung ist Bibliothek lauffähiger Objekte (z.B. Document, Application, Database, Worksheet, etc.) ● Ereignisorientiert Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 39 (c) Power Point Macro Sub Beispiel() ActiveWindow.Selection.TextRange. ParagraphFormat.Bullet.Visible=msoFalse With ActiveWindow.Selection.ShapeRange .Fill.Visible = msoTrue .Fill.Solid .Fill.ForeColor.RGB = RGB(255, 255, 153) .Line.Visible = msoTrue .Line.ForeColor.SchemeColor = ppForeground .Line.BackColor.RGB = RGB(255, 255, 255) .TextFrame.TextRange.Font.Name = "Courier New" .TextFrame.TextRange.Font.Size = 24 End With End Sub Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 40 Zusammenfassung zu Skript-Sprachen ● Zielsetzung: – Steuerung und Kopplung – Prototypenentwicklung – Konfiguration ● Konzepte: – Schwache Typisierung – Typisierung durch kontextabhängige Interpretation – Bibliotheken im Mittelpunkt Prof. Dr. Gerhard Goos, Dr. Sabine Glesner Höhere Programmiersprachen WS 2003/04 41