Skript-Sprachen

Werbung
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
Herunterladen