die programmiersprache chill. gliederung entstehung und anwendungsgebiete elementare...

Post on 05-Apr-2015

105 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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