Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse...
-
Upload
linus-schmitt -
Category
Documents
-
view
221 -
download
0
Transcript of Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse...
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
InhaltInhalt AusgangssituationAusgangssituation
• Überblick
• Problemstellung
• Lösungsansatz
Praktische UmsetzungPraktische Umsetzung
• Definieren von Symbolen
• Auflösen von Symbolen
• Semantische Prüfung
Ergebnisse & ZieleErgebnisse & Ziele
AusgangssituationAusgangssituation
Ü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
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
LösungsansatzLösungsansatz
Erweiterung der semantischen Analyse, um durch Angabe entsprechender Fehlermeldungen die Übersetzung in semantisch äquivalente C++ Quelltexte zu verbessern
Praktische UmsetzungPraktische Umsetzung
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
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
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
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
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
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!
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
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
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
ErgebnisseErgebnisse
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
.
AnhangAnhang
SemanticCheckVisitor
SemanticCheckValidator
SemanticMonadic-ExpressionCheck
SemanticDyadic-ExpressionCheck
SemanticConversion-Check
SemanticCheckFixed SemanticCheckFloat … SemanticPrecisionCheck
SemanticErrorMessages
Anhang: Ausschnitt des modularen KonzeptesAnhang: Ausschnitt des modularen Konzeptes
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);
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);
Vielen Dank Vielen Dank für Ihre für Ihre
AufmerksamkeitAufmerksamkeit