Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse...

23
Semantische Analyse einer Semantische Analyse einer Echtzeitprogrammiersprache mittels Echtzeitprogrammiersprache mittels Verhaltensmustern Verhaltensmustern xxx 19.05.2015 FernUniversität in Hagen Fakultät für Mathematik und Informatik Lehrgebiet Kommunikationsnetze Bachelor-Studiengang Informatik Erstgutachter: Prof. Dr.-Ing. habil. Herwig Unger Betreuer: Dipl.-Inf. Marcel Schaible

Transcript of Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse...

Page 1: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Semantische Analyse einer Semantische Analyse einer Echtzeitprogrammiersprache mittels Echtzeitprogrammiersprache mittels

VerhaltensmusternVerhaltensmusternxxx

19.05.2015

FernUniversität in HagenFakultät für Mathematik und InformatikLehrgebiet KommunikationsnetzeBachelor-Studiengang Informatik

Erstgutachter: Prof. Dr.-Ing. habil. Herwig UngerBetreuer: Dipl.-Inf. Marcel Schaible

Page 2: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

InhaltInhalt AusgangssituationAusgangssituation

• Überblick

• Problemstellung

• Lösungsansatz

Praktische UmsetzungPraktische Umsetzung

• Definieren von Symbolen

• Auflösen von Symbolen

• Semantische Prüfung

Ergebnisse & ZieleErgebnisse & Ziele

Page 3: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

AusgangssituationAusgangssituation

Page 4: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

ÜberblickÜberblick Entwicklung eines Übersetzers für die Echtzeitprogrammiersprache PEARL 90Entwicklung eines Übersetzers für die Echtzeitprogrammiersprache PEARL 90

PEARL 90 Quelltexte sollen in einem ersten Schritt in semantisch äquivalente C+PEARL 90 Quelltexte sollen in einem ersten Schritt in semantisch äquivalente C++ Quelltexte übersetzt werden+ Quelltexte übersetzt werden

C++ Quelltexte sollen in einem zweiten Schritt in ausführbare Programme C++ Quelltexte sollen in einem zweiten Schritt in ausführbare Programme übersetzt werdenübersetzt werden

Page 5: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

ProblemstellungProblemstellung

Fehler, die bei der Übersetzung der C++ Quelltexte entstehen, sind nur mit erheblichem Aufwand auf die ursprünglichen Stellen in den PEARL 90 Quelltexten zurückzuführen

Page 6: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

LösungsansatzLösungsansatz

Erweiterung der semantischen Analyse, um durch Angabe entsprechender Fehlermeldungen die Übersetzung in semantisch äquivalente C++ Quelltexte zu verbessern

Page 7: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Praktische UmsetzungPraktische Umsetzung

Page 8: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Definieren von SymbolenDefinieren von Symbolen Vorbereitender Schritt für die semantischen Prüfungen → Definieren von Symbolen

Parserbaum wird durchlaufen und nach charakteristischen Sprachmerkmalen durchsucht (Bsp. Deklarationen)

Schlüsseleigenschaften für ein Symbol:

• Name bzw. Bezeichner

• Kategorie bzw. Art des Symbols (Variable, Prozedur, etc.)

• Typ bzw. Datentyp (CHAR, FIXED, etc.)

• Gültigkeitsbereich

Symbol wird als Objekt einer Klasse in Symboltabelle gespeichert

Name Genauigkeit Position Gültigkeitsbereich Globala 31 Zeile /

Zeichen-position

z.B. Modul- oder Taskname

false

Beispiel: DCL a FIXED (31); Objekt der Klasse FixedVariableDef.java

Page 9: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Auflösen von SymbolenAuflösen von Symbolen Für jeden Gültigkeitsbereich (Modul, Task,…) wird eine eigene Symboltabelle

angelegt

Die Symboltabellen werden in einem Stapelspeicher (engl. Stack) abgelegt

01 MODULE (mod1);02 PROBLEM03 DCL a FIXED(31);0405 TASK (t1);06 DCL a FIXED(24); 07 END;08 MODEND;

ModulModul

mod1Symbole: [a, t1]

t1Symbole: [a]

Für die semantischen Prüfungen wird der Stapelspeicher zunächst bis auf das erste Modul des Quelltextes geleert

Tabellen werden wieder auf den Stapelspeicher gelegt, wenn der entsprechende Knoten bzw. Gültigkeitsbereich im Parserbaum erreicht wird

Prinzip der engsten Verschachtelung

Page 10: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Semantische AnalyseSemantische Analyse• Symbole in Symbolliste eintragen• ggf. Operatoren in Operatorenliste eintragen

Symbol an Indexposition 0 in Symboltabelle suchen

Prüfen, ob Symbol eine Konstante ist

Datentypen der Symbole ermitteln,prüfen ob zuweisungskompatibel

Genauigkeit / Länge prüfen

weiter

Fehlermeldung

Fehlermeldung

(arithmetischen) Ausdruck auflösen

Fehlermeldung

Fehlermeldung

Prüfen, ob Opertorenliste leer ist

Symbol an Indexposition 1 in Symboltabelle suchenoder

temporäres Symbol

Fehlermeldung

Beispiel: a = bBeispiel: a = b

Symbolliste:

Index 0 1

Symbol a b

Page 11: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Semantische AnalyseSemantische Analyse

Index 0 1 2

Symbol a b c

Symbolliste:Symbolliste:

Beispiel: a = b + cBeispiel: a = b + c

Index 0

Operator +

Operatorenliste:Operatorenliste:

Syntax Typ von a Typ von b Typ des Ergebnissesa + b FIXED(g1) FIXED(g2) FIXED(g3)

FIXED(g1) FLOAT(g2) FLOAT(g3)FLOAT(g1) FIXED(g2) FLOAT(g3)FLOAT(g1) FLOAT(g2) FLOAT(g3)DURATION DURATION DURATIONDURATION CLOCK CLOCKCLOCK DURATION CLOCK

g3 = max (g1, g2)

0 + 1 = 1 → b0 + 2 = 2 → c

Page 12: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Semantische AnalyseSemantische Analyse Prüfung eines Ausdrucks erfolgt nach den allgemeinen arithmetischen Regeln

Den Operatoren ist ein Rang und eine Auswertungsreihenfolge zugewiesen

Alle monadischen Standard Operatoren haben den Rang 1, Auswertungsreihenfolge: von rechts nach links

Rangordnung:Rangordnung:

Rang dyadische Operatoren Auswertungsreihenfolge

1 **, FIT von rechts nach links

2 *, /, ><, REM von links nach rechts

3 +, - , <>, SHIFT von links nach rechts

4 <, >, <=, >= von links nach rechts

5 ==, /= von links nach rechts

6 AND von links nach rechts

7 OR, EXOR von links nach rechts

Page 13: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Semantische AnalyseSemantische Analyse

Syntax Typ von a Typ von b Typ des Ergebnisses

a + b DURATION CLOCK CLOCK

Syntax Typ von a Typ von b Typ des Ergebnisses

a * b DURATION FIXED DURATION

CLOCK = DURATION * FIXED + CLOCK

ungültig! ungültig!

Auflösen entsprechend der arithmetischen Regeln:

CLOCK = DURATION * FIXED + CLOCK

=DURATION

=CLOCK

→ CLOCK = CLOCK gültig!gültig!

gültig!gültig!

Page 14: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Semantische AnalyseSemantische AnalyseBeispiel: a = (b + c) * dBeispiel: a = (b + c) * d

Symbolliste:Symbolliste: Index 0 1 2 3

Symbol a b c d

Operatorenliste:Operatorenliste: Index 0 1 2 3

Operator ( + ) *

1. Berechnung: b + c1. Berechnung: b + c

Anzahl der öffnenden Klammern, die vor dem Operator der Addition stehen, von dessen Index subtrahieren

Symbole ermitteln, auf denen die Addition angewendet werden soll

Symbole durch Zwischenergebnis (= temporäres Symbol) ersetzen

temporäres Symbol besitzt als Attribut den resultierenden Datentyp und ggf. Genauigkeit oder Länge

Operator und Klammernpaar aus Operatorenliste entfernen

Page 15: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Semantische AnalyseSemantische AnalyseBeispiel: a = temporäres Symbol * dBeispiel: a = temporäres Symbol * d

Symbolliste: Index 0 1 2

Symbol a temporäres Symbol d

Operatorenliste: Index 0

Operator *

2. Berechnung: temporäres Symbol * d2. Berechnung: temporäres Symbol * d wenn gültige Kombination von Datentypen, dann wird Ergebnis wiederum in

Form eines temporären Symbols gespeichert und ersetzt die Operanden

Operator wird aus Operatorenliste entfernt

damit ist im letzten Schritt eine einfache Zuweisung zu prüfen: a = temporäres Symbol

Page 16: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Semantische AnalyseSemantische Analyse

Symbol an Indexposition 0 in Symboltabelle suchen

Prüfen, ob Symbol eine Konstante ist

Datentypen der Symbole ermitteln,prüfen ob zuweisungskompatibel

Genauigkeit / Länge prüfen

weiter

Fehlermeldung

Fehlermeldung

(arithmetischen) Ausdruck auflösen

Fehlermeldung

Fehlermeldung

Beispiel: a = temporäres SymbolSymbolliste:

Index 0 1

Symbol a temporäres Symbol

Prüfen, ob Opertorenliste leer ist

Symbol an Indexposition 1 in Symboltabelle suchenoder

temporäres Symbol

FehlermeldungFehlermeldung

• Symbole in Symbolliste eintragen• ggf. Operatoren in Operatorenliste eintragen

Page 17: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

ErgebnisseErgebnisse

Page 18: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Verwendung von Listen (ArrayList):• Einfache und bekannte Datenstruktur • Durchlaufen des Parserbaumes und semantische Prüfung als Teilaufgaben

behandeln

Erweiterbarkeit des Quellcodes:• Modulares Konzept• Zwei Schlüssel-Klassen, als Schnittstellen für semantische Analyse

Wartbarkeit des Quellcodes:• Modulares Konzept• Listen sind grundlegende Datenstrukturen• Nachteil:

Algorithmus zur Auflösung komplexer arithmetischer Ausdrücke wird durch Verwendung von Listen kompliziert

Redundanz, um Lesbarkeit zu erreichen

Ergebnisse & ZieleErgebnisse & Ziele

.

Page 19: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

AnhangAnhang

Page 20: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

SemanticCheckVisitor

SemanticCheckValidator

SemanticMonadic-ExpressionCheck

SemanticDyadic-ExpressionCheck

SemanticConversion-Check

SemanticCheckFixed SemanticCheckFloat … SemanticPrecisionCheck

SemanticErrorMessages

Anhang: Ausschnitt des modularen KonzeptesAnhang: Ausschnitt des modularen Konzeptes

Page 21: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Anhang: Semantische AnalyseAnhang: Semantische Analyse

Funktions-ProzedurFunktions-Prozedur01 Prozedurname: PROCEDURE RETURNS (FIXED);02 !Prozedurkörper03 RETURN (Rückgabewert);04 END;05 06 a = Prozedurname;

Unterprogramm-ProzedurUnterprogramm-Prozedur01 Prozedurname: PROCEDURE(Parameter_1, Parameter_2);02 !Prozedurkörper03 END;04 05 CALL Prozedurname (Übergabe_Param_1, Übergabe_Param_2);

Page 22: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Anhang: Semantische AnalyseAnhang: Semantische Analyse

01 MODULE (name_1);02 PROBLEM03 DCL a FIXED GLOBAL;04 MODEND;

01 MODULE (name_2);02 PROBLEM03 SPC a FIXED GLOBAL (name_1);04 MODEND;

Modul 1Modul 1 Modul 2Modul 2

SPECIFY: Bezug innerhalb eines ModulsSPECIFY: Bezug innerhalb eines Moduls01 DCL Bezeichner_1 FIXED;02 SPC Bezeichner_2 FIXED IDENT (Bezeichner_1);

SPECIFY: Bezug zwischen zwei ModulenSPECIFY: Bezug zwischen zwei Modulen

InitialisierungInitialisierung01 DCL Bezeichner FIXED INIT(Wert);

Page 23: Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Vielen Dank Vielen Dank für Ihre für Ihre

AufmerksamkeitAufmerksamkeit