40
Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 1 Teil 7 Skript-Sprachen Perl Python Tcl/Tk

Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 1

Teil 7

Skript-SprachenPerl

Python

Tcl/Tk

Page 2: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 2

Aufgaben

Historisch:

(1) Textdateiverarbeitung

(2) Steuerung und Kopplung von Programmen

Zusätzlich heute:

(a) Benutzerschnittstellenentwicklung

(b) Prototypentwicklung

(c) Softwarekonfiguration

Page 3: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 3

Geschichte

Zuerst: Steuerbefehle von Hand eingegeben (Operateur) oderam 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

Page 4: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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)

Page 5: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 6: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 6

(1) Dateibearbeitung (ed)

Kommandosyntax: [address[,address]]command [parameter] Semantik: Wende das Kommando auf die adressierten Zeilen (inklusive) an

1,$s/r/R/ # substitutiere R für erstes r auf jeder Zeile1,$s/r/R/g # substituiere R für alle r/abc/p # suche vorwärts nach Zeile mit ''abc'' und drucke?abc?p # das gleiche rückwärts5d # lösche Zeile 5 (mit Umnumerieren).,+3d # lösche aktuelle Zeile bis dritte nachfolgende Zeile .j # 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

Page 7: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 7

(1) Reguläre Ausdrücke

In Suchmustern bedeuten

. beliebiges Zeichen

^ Zeilenanfang

$ Zeilenende

\c Sonderzeichen, z.B. \$: das Dollarzeichen

[... ] Menge alternativer Zeichenz.B. [124], [1-9],[A-Z0-9], [^0-9]: alle Zeichen außer 0-9

* beliebig häufiges Vorkommen des vorangehenden Zeichens

\{m,n\} vorangehendes Zeichen mindestens m, maximal n-mal

\(...\)Klammerung einer Teilfolge - 2-te Teilfolge ist anschließend \2

Posix: weitere Zusätze

Page 8: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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 SichtZeilen-Zerteiler mit C-ähnliche Ausgabemöglichkeiten Beispiel:

datei:Neumann Rainer Uni-KarlsruheLöwe Welf Uni-Karlsruhe

awk -F\t´{print $2}´ datei

RainerWelf

Page 9: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 10: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 10

(1) und (2) Beispiel: Umlautersetzung

Aufgabe: Umwandlung ae → ä, AE → Ä, Ae → Ä, sz → ß, usw.

Aufruf (Skript):

sed -n -f umpr $1 >/tmp/$$umlmv /tmp/$$uml $1

sed-Skript umpr

s/ae/Ä/g s/\([ae]\)ü/\1ue/g s/Öttinger/Oettinger/g s/aßin/aszin/gs/oe/ö/g s/\([AE]\)Ü/\1UE/g s/trü$/true/g s/\([aA]\)uß/\1uszu/gs/ue/ü/g s/tüll/tuell/g s/trü /true /g s/uß\(auo\)/usz\1/gs/Ae/Ä/g s/TÜLL/TUELL/g s/\([aAeEqQ]\)ü/\1ue/g s/\([b-df-hj-np-tv-z]\)ß/\1sz/gs/Oe/Ö/g s/\([zZ]\)ürst/\1uerst/g s/ikröle/ikroele/g s/gß/gsz/gs/Ue/Ü/g s/\([nN]\)öther/\1oether/g s/ongrün/ongruen/g s/außu/aus\{\}zu/gs/AE/Ä/g s/Thü/Thue/g s/ogün/oguen/g s/\([Kk]\)öffiz/\1oeffiz/gs/OE/Ö/g s/Göthe/Goethe/g s/logü/logue/g s/lß/ls"-z/gs/UE/Ü/g s/GÖTHE/GOETHE/g s/glü /glue /g s/ußei/us"-zei/gs/sz/ß/g s/\([Ss]\)öben/\1oeben/g s/sgü/sgue/g p

s/onflün/onfluen/g

Page 11: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 11

(2) Shell-Programmierung

Automatischer Ablauf von Programmfolgen

Kopplung von Programmen (Bedingte Aufrufe, Ströme)

Nebenläufigkeit

Umgebungsvariablen

Dynamische Befehlserzeugung (eval)

Wiederverwendung?

Page 12: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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)

Page 13: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 14: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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*‘,/((..)*)$/)

Page 15: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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}

Page 16: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 16

Operationen

Operationen werden in einem Kontext ausgeführt

Kontext:

Skalarer Kontext (z.B. boolescher Kontext, Void-Kontext)

Listenkontext

Interpolativer Kontext

Objektkontext

Page 17: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 17

Standardmodule und -bibliotheken

Modul FunktionenFile Basename, ChckTree, Copy, Find, PathTerm Cap, CompleteText Abbrev, ParseWords, TabsMath BigFloat, BigInt, ComplexTie Hash, StdHash, SubstrHash, Socket, Net, Time, I18N, POSIX

Page 18: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 19: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 20: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 21: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 22: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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();

Page 23: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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);

Page 24: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 24

(a) X11Erzeugen 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);

Page 25: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 26: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 26

(a) GUI-Programmierung

Rückrufe(Callbacks)

Ziel: Reaktion auf Benutzeraktionen

Mögliche Implementierungen:

Ereignisse (mit Warteschlangen, etc.)

Prozedurvariable

Page 27: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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?

Page 28: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 29: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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)

Page 30: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 31: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 32: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 33: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 34: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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"}

Page 35: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 35

Perl, Tcl/Tk und Python am gleichen Beispiel: Tcl/Tk

Tcl/Tkwm title . "Auswahl"wm minsize . 100 100frame .buttons -borderwidth 15pack .buttons -side top -fill xbutton .buttons.quit -text Schließen -command exitbutton .buttons.input -text Eingabe -command Printpack .buttons.quit .buttons.input -side rightframe .f; pack .f -side toplabel .f.l -text "Eingabe einer Zahl (1,2 oder 3)"entry .f.digit -width 5 -relief sunkenpack .f.l .f.digit -side lefttext .output -width 50 -height 20 -bd 5 -relief raisedpack .output -side topproc 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" } }

Page 36: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 36

Perl, Tcl/Tk und Python am gleichen Beispiel: Python

Pythonmap = { 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")

Page 37: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 38: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 39: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 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

Page 40: Skript-Sprachen€¦ · awk -F\t´{print $2}´ datei Rainer Welf. Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 9 (2) Filter und Ströme Spezielle Dateien: Standardeingabe,

Prof. Dr. Gerhard Goos Höhere Programmiersprachen WS 2001/2 40

Zusammenfassung zu Skript-Sprachen

Zielsetzung:

Steuerung und Kopplung

Prototypenentwicklung

Konfiguration

Konzepte:

Schwache Typisierung

Typisierung durch kontextabhängige Interpretation

Bibliotheken im Mittelpunkt