die programmiersprache chill. gliederung entstehung und anwendungsgebiete elementare...
Post on 05-Apr-2015
105 Views
Preview:
TRANSCRIPT
Die Programmiersprache CHILL
Gliederung
Entstehung und Anwendungsgebiete Elementare Programmstrukturen Typkonzepte Globale Programmstrukturen Prozedurkonzepte Ausnahmebehandlung Nebenläufigkeit Beispiel Mergesort Literaturverzeichnis
Entstehung
CHILL – CCITT High Level Language
CCITT Standardisierungskomitee von ITU(Internationaler Fernmeldeunion)
Anwendungsgebiete
hauptsächlich in der Kommunikationstechnik angewandt (z.B. rechnergesteuerte Vermittlungssysteme)
1987 viele der größten Softwaresysteme im Bereich der Telekommunikation mit CHILL implementiert
keine kommerzielle Verbreitung (geringer Bekanntheitsgrad)
Elementare Programmstrukturen
algol-60-ähnliche Sprache blockorientiert, streng typisiert große Sprache (bietet Konstrukte zur
Erstellung großer Softwaresysteme) Programme in Module und Blöcke
gegliedert
BeispielBeispiel_1: MODULE DCL x,y INT, z ARRAY (1:10) INT; x:= 0; DO FOR i:= 1 TO 10; x:= x + i; inner: BEGIN DCL k INT := x + 2 * i; z(i) := k + x; END inner; OD; y:= x;
END Beispiel_1;
Elementare Programmstrukturen
Sprung/Exitanweisung GOTO marke; Exit marke;
Bedingte Anweisungen IF condition THEN action1;...;FI; CASE ... OF(condition1) : action1;
(condition2) : action2;
ELSE : action3;
ESAC;
Beispiele
DCL i,j INT := -5;
CASE i+12 OF
(1:25): j:= 0;i := 12;
(26): j:= 1;
ELSE j:=2; i+:=1;
ESAC;
DCL i,j INT:= -5;
CASE i,j OF (1:25), (5:17): j:= 0;i:= 12;
(ELSE), (9): j:= 1;(26), (*): j:=
2;i+:=12;(*), (ELSE):
ESAC;
Elementare ProgrammstrukturenDCL
i,j INT,
a ARRAY (1:10) INT;
i := 1;
i,j := 2 * i + 1;
i +:= 1; entspricht i:=i + 1
i *:= j + i; entspricht i:=i * (j + i)
a := [1,2,3,4,5,6,7,8,9,0];
Elementare Programmstrukturen
DO-Anweisung mit leerem Kontrollteilsimple_do: DO
i := i + 1;OD simple_do;
DO-Anweisung mit FOR-Kontrolle WHILE-Kontrolle WITH-Kontrolle
Elementare Programmstrukturen
DO FOR i:= 100 BY 5 DOWN TO 25; ........ OD;
DO FOR EVER; ........ Kann nur durch Sprung oder Ausnahme- OD; Erzeugung verlassen werden
DCL a ARRAY (1:100) INT;
DO FOR x IN a; x:= 1; OD;
Elementare Programmstrukturen
DCL rec STRUCT (x, y INT);
DO WITH rec;x :=1;y :=1;
OD;
Typkonzepte
INT, CHAR, BOOL vordefiniert
Möglichkeit mit Konstruktor neue Modes (Datentypen) zu bilden
Arten von Modes diskrete Modes Powerset-Modes zusammengesetzte Modes Referenzmodes Prozedurmodes Synchronisations- und Instanzmodes Ein-/Ausgabe-Modes
Modedefinition
2 Arten : SYNMODE
NEWMODE
SYNMODE: - Die Namen der mit SYNMODE definierten MODES sind synonyme Benennungen des gleichen MODES. =>sind einander zuweisbar
NEWMODE:- NEWMODE definiert unterschiedliche MODES deren Werte nicht einander zuweisbar sind.
BeispielTyp_Beispiel: MODULE
NEWMODE
X = CHAR,
Y = CHAR (10),
Z = ARRAY (1:10) BOOL;
U = STRUCT (s1 INT, s2 CHAR);
DCL
x X, y Y, z Z, u U;
x :='c';
y := 'skugkhegbp';
y(2) := 'a';
z(5:7) := [FALSE, TRUE, TRUE];
u.s1 := 4;
END Typ_Beispiel;
Beispiel
NEWMODE
Dollar, Euro = INT;
DCL
a Dollar,
b Euro;
a := b; // nicht möglich
SYNMODE
Dollar, Euro = INT;
DCL
a Dollar,
b Euro;
a := b; // erlaubt
Programmstruktur
Block Lebensdauer von einem im
Block definierten Element entspricht der Ausführzeit von diesem
im Block definierten Objekte sind außerhalb nicht sichtbar
wenn Objektnamen von außerhalb nicht überschrieben sind sie im Block sichtbar
Modulion ineinander schachtelbare
Einheiten haben keinen Einfluss auf die
Lebensdauer der in ihnen definierten Objekte
dienen zur Kontrolle von Sichtbarkeit von Objekten
globales Objekt nur sichtbar durch Anweisung
lokale Objekte nur nach außen durch Anweisung sichtbar
Lebensdauer von Objekten Ein CHILL-Programm besteht aus mindestens einem Prozess, dem
IOP (imaginary outermost process).
Der IOP lebt so lange, bis das entsprechende CHILL-Programm abgearbeitet ist und alle benutzerdefinierten Prozesse beendet sind.
Die Lebensdauer der anderen Prozesse ist durch Ausführung der letzten oder der STOP-Anweisung begrenzt .
Jeder Prozess umfasst Anzahl von eine Blöcken. Betritt die Kontrolle eine Blockstruktur, so werden die darin deklarierten Speicherplätze von außen nach innen angelegt und ebenso wieder vernichtet.
Lebensdauer von Objekten
Variablen mit STATIC-Attribut besitzen die Lebensdauer des IOP. Ihre Sichtbarkeit ergibt sich aus der Definitionsstelle.
Mittels INIT ist eine Lebenszeit-Initialisierung eines Speicherplatzes möglich. Er wird zu Beginn seiner Existenz mit einem konstanten Wert belegt.
Beispiel
Zaehler: PROC (); DCL zaehler INT STATIC INIT := 0; zaehler +:= 1; IF zaehler = 10
THEN zaehler := 0; fertig := TRUE; FI;END Zaehler;
Zaehler: PROC(); DCL zaehler INT STATIC := 0; zaehler +:= 1; IF zaehler = 10 THEN
zaehler:= 0; fertig:= TRUE; FI;END Zaehler;
Import Export bei Modulions Die Grenzen von Modulions können wie im folgendem Beispiel durch
GRANT (Export) und SIZE (Import) überwunden werden.
Trade: BEGIN DCL embargo INT; export: MODULE GRANT T_hide FORBID (s1); NEWMODE T_hide = STRUCT (s1, s2 : INT); DCL l_inside T_hide; l_inside := [1,2]; ......... END export; ......... import: MODULE SEIZE export ALL; END import; END Trade;
Ausnahmebehandlung
CHILL bietet die Möglichkeit, den Eintritt einer unerwarteten Situation durch Auslösen einer benannten Ausnahme (Exception) zu signalisieren.
Das Ausnahmekonzept von CHILL sieht keine Rückkehr an die Stelle des Auftretens der Ausnahme vor.
Schlüsselwörter: p_name : PROC (...) EXCEPTIONS (ex1,..,exn); IF..THEN CAUSE ex1 ;FI; ON
(ex1,....,ex6): Aktion1; (ex7,....,exn): Aktion2; END ;
Sprachdefinierte Ausnahmen
Verschiedene Aktionen können auch implizit Ausnahmen signalisieren.
Die durch CHILL definierten Ausnahmen werden durch die Verletzung einer dynamischen Bedingung erzeugt.
Vordefinierte Ausnahmen sind z.B.: OVERFLOW RANGEFAIL RECURSEFAIL
Ausnahmebehandlung Beispiel
Sqrt: PROC (i INT) RETURNS (INT) EXCEPTIONS (bad_argument); IF i<0 THEN CAUSE bad_argument; FI; ........ END sqrt; ........ DCL y INT := -5; y := sqrt(y) ON( bad_argument) : y:=0; END;
Prozedurkonzepte
IN CHILL wird im Allgemeinen zwischen Funktionsprozeduren (mit Rückgabewert)
und Prozeduren (ohne Rückgabewert) unterschieden.
Resultat von Funktionsprozeduren
Die Resultatspezifikation wird im Prozedurkopf mittels RETURNS (MODE)vereinbart.
Der Wert der Funktionprozedur ergibt sich aus dem Ausdruck in der RETURN-Anweisung.Will man ein Ergebnis zwischenspeichern so kann dies mit RESULT geschehen.
Parameterübergabe
• Werteübergabe
– IN-Parameter– INOUT-Parameter– OUT-Parameter
• Speicherplatzübergabe
Beispiel
DCL a, b, c, d INT;
test: PROC (p1 INT IN, p2 INT OUT, p3 INT INOUT, p4 INT LOC);
p1 := p1 + 2;
p2 := 5;
p3 := p2 + 4;
p4 := p4 + p4;
END test;
a := 6; b := 77; c := 8; d := 4;
CALL test (a, b, c, d);
Speicherplatzbelegung nach Prozeduraufruf : a = 6, b = 5, c = 9, d = 8
Prozedurattribute
• Generalität– SIMPLE
• rekursiv aufrufbar• nicht Prozedurmode
tauglich– GENERAL
• rekursiv aufrufbar• Prozedurmode tauglich
– INLINE• nicht rekursiv aufrufbar• nicht Prozedurmode
tauglich
• Rekursivität– RECURSIVE
Prozeduren als Werte CHILL bietet die Möglichkeit einen Prozedurmode zu
definieren auf dessen Werten folgende Operationen zur Verfügung stehen: Test auf Gleichheit Zuweisung an Speicherplatz mit Prozedurmode Aufruf der durch den Prozedurwert bezeichneten Prozedur
Die Definition eines Prozedurmodes unterscheidet sich vom Kopf einer Prozedurdefinition nur in zwei Punkten: Die Parameterliste besteht nur aus Parameterspezifikationen Die Bennenung des Prozeduratributs entfällt (immer GENERAL)
Prozeduren als Werte
SYNMODE T_procedure = PROC (INT IN, INT IN) RETURNS (BOOL);
DCL
l_procedure T_procedure,
flag BOOL;
less: PROC (x INT IN, y INT IN) RETURNS (BOOL) GENERAL;
RETURN x<y;
END less;
greater: PROC (a, b INT) RETURNS (BOOL) GENERAL;
RETURN a> b;
END greater;
l_procedure := less;
flag := l_procedure(13, 14);
flag := less(13, 14);
Nebenläufigkeit und Prozesse
Formale Parameter eines Prozesses haben nur LOC oder IN Attribut
keine Prozesshierachien in CHILL Prozessdefinitionen in keiner Region oder
Block außer IOP
Prozessinteraktion
Ereignisse - sind Synchronisationsmittel für Prozesse
Regionen - dienen zur exklusiven Datenverwaltung
Signale - Möglichkeit zur direkten und indirekten Kommunikation von Prozessen
Puffer - indirekte Kommunikation mittels Mailboxprinzip
Prozesszustände
aktiv, unterbrochen, suspendiert, terminiert Synchronisations- und Kommunikationsaktionen
führen zu unterbrochenem Zustand suspendierte Prozess wartet darauf, besetzte
Region betreten zu können Prozess terminiert falls STOP-Anweisung
ausgeführt oder Ausnahme erzeugt Prozess kann nicht von anderem gestoppt
werden
Prozessausführung
Scheduling nicht festgelegt durch Sprachdefinition
CHILL-Prozesse haben keine Prioritäten(Puffersignale und Eventvar. Besitzen diese)
Unterbrochenen Prozessen kann Priorität zugeordnet werden
Beispiel
SIGNAL s = (CHAR) TO p;
p:PROCESS ();
....
END p;
p_instance := START p();
SEND s(`x`) TO p_instance;
Listendefinition
NEWMODE
LIST = REF NODE,
NODE = STRUCT (head INT, tail LIST);
mergesort: PROC ( list LIST) SIMPLE RECURSIVE RETURNS (LIST);
IF list = NULL THEN RETURN NULL;
ELSIF list->.tail = NULL THEN RESULT list;
ELSE
BEGIN
DCL
list1,list2 LIST := NULL,
remainder LIST:= list;
DO WHILE remainder /= NULL;
new LIST := ALLOCATE (NODE);
next LIST := remainder ->.tail;
new ->.head := remainder ->.head;
new ->.tail := list 1;
list1 := list2;
list2 := new;
TERMINATE (remainder);
remainder := next;
OD ;
RETURN merge(mergesort(list1),mergesort(list2))
END mergesort;
merge: PROC (list1 LIST,list2 LIST) SIMPLE REKURSIVE RETURNS LIST;
IF list1 = NULL THEN RETURN list2;
ELSIF list2 = NULL THEN RETURN list1;
ELSE
IF list1->.head < list2->.head THEN
BEGIN
DCL result LIST := ALLOCATE(NODE);
result ->.head := list1 ->.head;
result ->.tail := merge(list1 ->.tail, list2);
TERMINATE (list1);
RETURN result;
END
ELSE
analog zu erstem Fall
FI
FI
END Merge;
Literaturverzeichnis
Eine Einführung in die Programmiersprache CHILL
Lenzer/Th.Letschert/Lingen/Hollis
Hüthig Verlag
top related