Der Grid-Occam-Compiler. Übersicht über die OCCAM-Sprachdefinition

Ähnliche Dokumente
3.1 Reservierte Wörter

Einführung in die Programmiertechnik

3 Syntax von Programmiersprachen

3 Syntax von Programmiersprachen

7. Syntax: Grammatiken, EBNF

3.4 Struktur von Programmen

Pascal Schärli

Kapitel 5: Syntaxdiagramme und Grammatikregeln

17. Rekursion 2. Bau eines Taschenrechners, Ströme, Formale Grammatiken, Extended Backus Naur Form (EBNF), Parsen von Ausdrücken

Die Klasse MiniJava ist in der Datei MiniJava.java definiert:

Lexikalische Programmanalyse der Scanner

Kapitel 2. Methoden zur Beschreibung von Syntax

Sprachen sind durch folgenden Aufbau gekennzeichnet:

Inhalt Kapitel 11: Formale Syntax und Semantik

Syntax von Programmiersprachen

Einführung in die Programmierung für NF. Übung

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

Einführung in die Informatik. Programming Languages

Kapitel 2: Methoden zur Beschreibung von Syntax

Zuerst wird die Bedingung ausgewertet. Ist sie erfüllt, wird der Rumpf des while-statements ausgeführt. Nach Ausführung des Rumpfs wird das gesamte

Syntax von Programmiersprachen

Programmierkurs Java

Tagesprogramm

Übersicht: Inhalt und Ziele. Kapitel 2: Methoden zur Beschreibung von Syntax. Aufbau von Programmen. Syntax von Programmiersprachen

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

Compilerbau für die Common Language Run-Time

Formale Sprachen. Inhaltsverzeichnis. M. Jakob. 10. Dezember Allgemeine Einführung. Aufbau formaler Sprachen

2.2 Syntax, Semantik und Simulation

Alphabet, formale Sprache

Syntax von Programmiersprachen

Syntax von Programmiersprachen

Aufgabe 1.1. Wählen Sie jene Variablendeklarationen mit Initialisierungen aus, die in Java hinsichtlich der Typen korrekt sind:

Einführung in die Informatik. Programming Languages

Fragenkatalog 2. Abgabegespräch Formale Modellierung 3 Reguläre Sprachen

Elementare Konzepte von

15. Rekursion. Rekursive Funktionen, Korrektheit, Terminierung, Aufrufstapel, Bau eines Taschenrechners, BNF, Parsen

Kapitel IV Formale Sprachen und Grammatiken

Ein Fragment von Pascal

Java Anweisungen und Ablaufsteuerung

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Werkzeuge zur Programmentwicklung

Python Intro. Vorsemesterkurs Informatik Praktischer Teil WS2012/13. 2.Oktober Vorkurs Informatik - WS 2012/13

Syntax von Programmiersprachen

Syntax der Sprache PASCAL

Intensivübung zu Algorithmen und Datenstrukturen

Python Intro I. Vorsemesterkurs Informatik Praktischer Teil WS 2013/14. 1.Oktober Vorkurs Informatik - WS 2013/14

Quick-Start Informatik Programmieren in Python Teil 1

Einstieg in die Informatik mit Java

Übersetzerbau Cluj-Napoca, Rumänien 2007

Kapitel 2. Methoden zur Beschreibung von Syntax

Theoretische Informatik I

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Modellierung und Programmierung 1

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1. Der Begriff Informatik 2. Syntax und Semantik von Programmiersprachen - 1 -

1 Syntax von Programmiersprachen

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Tag 2 Repetitorium Informatik (Java)

Einstieg in die Informatik mit Java

15. Rekursion 2. Motivation: Taschenrechner. Naiver Versuch (ohne Klammern) Analyse des Problems (15 7 3) = Eingabe * 3 = Ergebnis 15

Java Übung. Übung 2. Werner Gaulke. 19. April Universität Duisburg-Essen Kommedia, Übung EinPro SS06, Einführung in Java - Übung.

Einstieg in die Informatik mit Java

Programmierung WS12/13 Lösung - Übung 1 M. Brockschmidt, F. Emmes, C. Otto, T. Ströder

Funktionale Programmierung ALP I. λ Kalkül WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Software Entwicklung 1

Einstieg in die Informatik mit Java

4.4 Imperative Algorithmen Prozeduren

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

2.2 Einfache Datenstrukturen

Vorkurs Informatik WiSe 17/18

Kapitel 4: Syntaxdiagramme und Grammatikregeln

Das erste C++ Programm

Objektorientierte Programmierung. Kapitel 3: Syntaxdiagramme

Interpreter - Gliederung

Abstrakte Syntax von Prolog (1)

Sprachanalyse. Fachseminar WS 08/09 Dozent: Prof. Dr. Helmut Weber Referentin: Nadia Douiri

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Semantik von Programmiersprachen SS 2017

Funktionale Programmierung ALP I. µ-rekursive Funktionen WS 2012/2013. Prof. Dr. Margarita Esponda. Prof. Dr. Margarita Esponda

Kapitel 5: Syntax-Analyse

Einfache Rechenstrukturen und Kontrollfluss

Begriffe (Wiederholung)

Grundlagen der Programmierung - Datenstrukturen

Unterlagen. CPP-Uebungen-08/

Sprachkonstrukte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Kontextfreie Grammatiken. Kontextfreie Grammatiken 1 / 48

Grundlagen der Informatik 2. Typen

Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen. Operatoren für elementare Datentypen Bedingte Anweisungen Schleifen

Grammatiken. Eine Grammatik G mit Alphabet Σ besteht aus: Variablen V. Startsymbol S V. Kurzschreibweise G = (V, Σ, P, S)

Einstieg in die Informatik mit Java

Syntaxanalyse Ausgangspunkt und Ziel

Transkript:

Der Grid-Occam-Compiler Übersicht über die OCCAM-Sprachdefinition

OCCAM Entwicklung der Fa. Inmos (1988) übernommen von SGS Thomson heute STMicroelectronics aktuelle Sprachversion ist 2.1 die Sprache für Transputer-Programmierung Sprachentwicklung parallel zur Chipentwicklung OCCAM geht nicht von zentralem Hauptspeicher aus Unterstützung der Entwicklung paralleler Programme, auf Basis paralleler Prozesse strenges Typsystem 2

Lexik Definitionsmittel für Lexik englische Sprache reguläre Ausdrücke kontextfreie Grammatiken Occam: englische Sprache Zuordnung zwischen Bytes und Zeichen: Occam: Eingabe ist ASCII 3

Lexikalische Kategorien Bezeichner: Buchstabe, gefolgt von Buchstaben, Zahlen (alphanumeric characters), und Punkten (.), ohne Längenbeschränkung Schlüsselwörter: Stets in Großbuchstaben, reserviert (etwa: SEQ, REAL64) Sonderzeichen: explizite Terminalsymbole in Grammatik :=, (, ) informale syntaktische Kategorien : digits: Folge von Ziffern (0-9) hex.digits: Folge von Hexadezimalziffern (0-9A-F) besondere syntaktische Kategorien : Zahlenliterale: definiert in EBNF, zusätzliche Beschränkung, dass sie keine Leerzeichen enthalten dürfen 4

Freiraum und Kommentare Üblicherweise ignoriert 3*4 ist das gleiche wie 3 * 4 Occam: Einrückung ist lexikalisch relevant Zeilenenden sind ebenfalls lexikalisch relevant Continuation Lines: Zeile setzt sich nach Operatoren, Kommas, Semikolons, Zuweisungsoperatoren und ausgewählten Schlüsselwörtern fort nächste Zeile muss wenigstens genauso viel eingerückt sein Zeilenende-Kommentare, eingeleitet durch -- Kommentar muss wenigstens genauso eingerückt sein wie aktueller Block 5

Syntax: Sprachen und Grammatiken Alphabet A: Menge von Symbolen (Buchstaben, Terminale, terminals) A*: Menge aller Folgen von A Leeres Wort: ε Sprache L: Menge von Sätzen L A* Grammatik: Tupel (A, H, R, s) H: Hilfssymbole (nonterminals) Startsymbol s H Regeln R H (A H)* 6

Chomsky-Hierarchie Sprache vs. Grammatik (vs. Parser-Technologie) Typ 0: rekursiv aufzählbare Sprachen Akzeptiert durch Turing-Maschine Typ 1: kontext-sensitive Sprachen Linke Seite kann Folge von Hilfssymbolen sein Typ 2: kontext-freie Sprachen Linke Seite ist ein Hilfssymbol Typ 3: reguläre Sprachen Linke Seite ist Hilfssymbol Rechte Seite ist Terminalsymbol, optional gefolgt von Hilfssymbol 7

Notationen für Grammatiken BNF: Backus-Naur-Form Erstmalig verwendet für Algol 58 (Backus Normal Form) Regeln der Grammatik: Produktionen Linke-seite rechte-seite Rechte-seite: Verknüpfung von Alternativen mittels Alternative: Folge von Hilfs- und Terminal-Symbolen 8

BNF-Beispiel Expr Term Expr + Term Expr - Term Term Factor Term * Factor Term / Factor Factor number ( Expr ) Ableitung: Wiederholte Anwendung von Produktionen 9

BNF-Erweiterungen EBNF (N. Wirth) Optionale Symbolfolgen: [ sym1 sym2 ] Kleene-Stern: H* Optionale Gruppierung von Symbolen mit runden Klammern Ausschluss von ε: H+ Occam: Nicht-EBNF-Erweiterung von BNF Wiederholung auf mehreren Zeilen: { H } Wiederholung auf der gleichen Zeile, kommagetrennt, optional: { 0, H } Wiederholung auf der gleichen Zeile, wenigstens einmal: { 1, H } Einrückung in der Grammatikregel ist signifikant 10

Definition von Semantik Statische Semantik: Welche Sätze der Sprache sind korrekte Programme? Dynamische Semantik: Was ist das beobachtete Verhalten? Occam: ILLEGAL vs. INVALID ILLEGAL: Implementierung lehnt Programm ab INVALID: Prozess ist äquivalent zu STOP Annex E: invalid oder illegal? Stop-Modi: Annex F stop process mode halt system mode undefined mode 11

Primitive Prozesse: Zuweisung assignment == variable.list := expression.list expression.list == { 1 expression } name ( { 0, expression } ) ( value.process ) legal: Variablen müssen definiert sein, Datentyp von Variable muss mit dem des Ausdrucks übereinstimmen dynamische Semantik: Der Ausdruck wird berechnet; die Variable erhält den ermittelten Wert 12

Zuweisung: Beispiele x := y + 2 a, b, c := x, y + 1, z + 2 x, y := y, x 13

Primitive Prozesse: Input input == channel? { 1 ; input.item } channel? CASE tagged.list input.item == timer.input delayed.input port? variable variable variable :: variable legal: Kanäle, Variablen müssen definiert sein; Variablentyp muss mit Kanalprotokoll übereinstimmen dynamische Semantik: Prozess verharrt in Input, bis korrespondierendes Output erreicht ist, dann erfolgt Datenübergabe an Variable 14

Primitive Prozesse: Output output == channel! { 1 ; output.item } channel! tag channel! tag ; { 1 ; output.item } port! expression output.item == output output :: variable 15

Primitive Prozesse: SKIP und STOP process == assignment input output SKIP STOP legal: keine weiteren Bedingungen dynamische Semantik SKIP: kein Effekt STOP: Prozess terminiert nicht genauer: geht in den Stop-Modus über 16

SKIP, STOP: Beispiele SEQ keyboard? char SKIP screen! char SEQ keyboard? char STOP screen! char 17

Konstruierte Prozesse: Sequence sequence == SEQ { process } SEQ replicator process replicator == name = base FOR count base == expression count == expression legal: base und count haben Typ INT, name darf nicht geändert werden name hat Typ INT dynamische Semantik valid: count muss nichtnegativ sein Enthaltene Prozesse werden sequentiell ausgeführt Wiederholtes SEQ: name fängt bei base an, process wird count-mal wiederholt Verschachtelte Konstrukte werden expandiert 18

SEQ: Beispiele SEQ SEQ screen!? keyboard? char SEQ screen! char screen! cr screen! lf 19

SEQ: Beispiele (2) SEQ i = 0 FOR array.size stream! data.array[i] SEQ stream! data.array[14] stream! data.array[15] 20

Konstruierte Prozesse: Conditional conditional == IF { choice } IF replicator choice choice == guarded.choice conditional specification choice guarded.choice == boolean boolean == expression process legal: boolean muss vom Typ BOOL sein 21

Conditional: Dynamische Semantik boolean-ausdrücke werden von oben nach unten ausgewertet falls ein Ausdruck wahr ist, wird der zugehörige process abgearbeitet falls kein Ausdruck wahr ist, ist der conditional-prozess äquivalent zu STOP verschachtelte conditionals werden expandiert 22

Conditional: Beispiele IF IF x < y x := x + 1 x >= y SKIP IF i = 1 FOR length string[i] <> object[i] found := FALSE TRUE found := TRUE 23

Konstruierte Prozesse: Selection selection == CASE selector { option } selector == expression option == { 1 ; case.expression } process ELSE process specification option case.expression == expression legal: Datentyp von selector und case.expression müssen gleich sein, müssen integer, byte, oder boolean sein, case.expression müssen verschiedene Konstanten sein, es darf höchstens ein ELSE geben 24

Selection: Dynamische Semantik selector wird berechnet und mit case.expression verglichen passender process ausgewählt Falls es keinen passenden Prozess gibt, wird ELSE-process ausgeführt Falls es keinen ELSE-process gibt, wird wird STOP ausgeführt. 25

Selection: Beispiele CASE direction up x := x + 1 down x := x - 1 CASE letter a, e, i, o, u vowel := TRUE ELSE vowel := FALSE 26

Konstruierte Prozesse: WHILE loop loop == WHILE boolean process Dynamische Semantik: process wird ausgeführt bis boolean FALSE ist WHILE buffer <> eof SEQ in? buffer out! buffer 27

Konstruierte Prozesse: Parallel parallel == PAR { process } PAR replicator process PRI PAR { process } PRI PAR replicator process 28

Parallel: valid vs. legal Eine Variable darf nicht in mehreren Prozessen geschrieben werden 2.5.1: Verletzung führt zu INVALID program Annex E (usage rules check list): Verwendung gleicher Variablen ist illegal usage checking can usually be performed at compile time. Ein Kanal darf nur in einem Prozess für output und in einem Prozess für input verwendet werden CSP: Viele Schreiber, viele Leser Dynamische Semantik: Die Prozesse werden nebenläufig ausgeführt 29

Parallel: Beispiele PAR farmer () PAR i = 0 FOR 4 worker (i) 30

Konstruierte Prozesse: Alternation alternation == ALT { alternative } ALT replicator alternative PRI ALT { alternative } PRI ALT replicator alternative alternative == guarded.alternative alternation { alternative } channel? CASE { variant } specification alternative 31

Konstruierte Prozesse: Alternation (2) guarded.alternative == guard == guard input process boolean & input boolean & SKIP dynamische Semantik: Falls boolean TRUE ist und input bereit, wird input ausgeführt, und danach der zugehörige process sind mehrere Alternativen bereit, wird eine beliebige ausgewählt bei PRI ALT wird die textuell erste ausgewählt 32

Alternative: Beispiele ALT left? packet stream! packet right? packet stream! packet 33

Alternative: Beispiele (2) ALT ALT i = 0 FOR number.of.workers free.worker[i] & gen.to.reg? packet SEQ to.workers[i]! packet free.worker[i] := FALSE ALT i = 0 FOR number.of.workers from.workers[i]? result SEQ reg.to.gen! result free.worker[i] := TRUE 34