Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern.

Ähnliche Präsentationen


Präsentation zum Thema: "Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern."—  Präsentation transkript:

1 Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern xxx 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

2 Inhalt Ausgangssituation  Ausgangssituation Überblick Problemstellung Lösungsansatz Praktische Umsetzung  Praktische Umsetzung Definieren von Symbolen Auflösen von Symbolen Semantische Prüfung Ergebnisse & Ziele  Ergebnisse & Ziele

3 Ausgangssituation

4 Überblick  Entwicklung eines Übersetzers für die Echtzeitprogrammiersprache PEARL 90  PEARL 90 Quelltexte sollen in einem ersten Schritt in semantisch äquivalente C++ Quelltexte übersetzt werden  C++ Quelltexte sollen in einem zweiten Schritt in ausführbare Programme übersetzt werden

5 Problemstellung 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

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

7 Praktische Umsetzung

8 Definieren 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 NameGenauigkeitPositionGültigkeitsbereichGlobal a31Zeile / Zeichen- position z.B. Modul- oder Taskname false  Beispiel: DCL a FIXED (31); Objekt der Klasse FixedVariableDef.java

9 Auflö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 PROBLEM 03 DCL a FIXED(31); TASK (t1); 06 DCL a FIXED(24); 07 END; 08 MODEND; Modul mod1 Symbole: [a, t1] t1 Symbole: [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

10 Semantische 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 (arithmetischen) Ausdruck auflösen Fehlermeldung Prüfen, ob Opertorenliste leer ist Symbol an Indexposition 1 in Symboltabelle suchen oder temporäres Symbol Fehlermeldung Beispiel: a = b Symbolliste: Index01 Symbolab

11 Semantische Analyse Index012 Symbolabc Symbolliste: Beispiel: a = b + c Index0 Operator+ Operatorenliste: SyntaxTyp von aTyp von bTyp des Ergebnisses a + bFIXED(g1)FIXED(g2)FIXED(g3) FIXED(g1)FLOAT(g2)FLOAT(g3) FLOAT(g1)FIXED(g2)FLOAT(g3) FLOAT(g1)FLOAT(g2)FLOAT(g3) DURATIONDURATIONDURATION DURATIONCLOCKCLOCK CLOCKDURATIONCLOCK g3 = max (g1, g2) = 1 → b = 2 → c

12 Semantische 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: Rangdyadische OperatorenAuswertungsreihenfolge 1**, FITvon rechts nach links 2*, /, ><, REMvon links nach rechts 3+, -, <>, SHIFTvon links nach rechts 4, =von links nach rechts 5==, /=von links nach rechts 6ANDvon links nach rechts 7OR, EXORvon links nach rechts

13 Semantische Analyse SyntaxTyp von aTyp von bTyp des Ergebnisses a + bDURATIONCLOCKCLOCK SyntaxTyp von aTyp von bTyp des Ergebnisses a * bDURATIONFIXEDDURATION CLOCK = DURATION * FIXED + CLOCK ungültig! Auflösen entsprechend der arithmetischen Regeln: CLOCK = DURATION * FIXED + CLOCK =DURATION =CLOCK gültig! → CLOCK = CLOCKgültig! gültig!

14 Semantische Analyse Beispiel: a = (b + c) * d Symbolliste: Index0123 Symbolabcd Operatorenliste: Index0123 Operator(+)* 1. 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

15 Semantische Analyse Beispiel: a = temporäres Symbol * d Symbolliste: Index012 Symbolatemporäres Symbold Operatorenliste: Index0 Operator* 2. 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

16 Semantische 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 (arithmetischen) Ausdruck auflösen Fehlermeldung Beispiel: a = temporäres Symbol Symbolliste: Index01 Symbolatemporäres Symbol Prüfen, ob Opertorenliste leer ist Symbol an Indexposition 1 in Symboltabelle suchen oder temporäres Symbol Fehlermeldung Symbole in Symbolliste eintragen ggf. Operatoren in Operatorenliste eintragen

17 Ergebnisse

18  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 & Ziele.

19 Anhang

20 SemanticCheckVisitor SemanticCheckValidator SemanticMonadic- ExpressionCheck SemanticDyadic- ExpressionCheck SemanticConversion- Check SemanticCheckFixedSemanticCheckFloat … SemanticPrecisionCheck SemanticErrorMessages Anhang: Ausschnitt des modularen Konzeptes

21 Anhang: Semantische Analyse Funktions-Prozedur 01 Prozedurname: PROCEDURE RETURNS (FIXED); 02 !Prozedurkörper 03 RETURN (Rückgabewert); 04 END; a = Prozedurname; Unterprogramm-Prozedur 01 Prozedurname: PROCEDURE(Parameter_1, Parameter_2); 02 !Prozedurkörper 03 END; CALL Prozedurname (Übergabe_Param_1, Übergabe_Param_2);

22 Anhang: Semantische Analyse 01 MODULE (name_1); 02 PROBLEM 03 DCL a FIXED GLOBAL; 04 MODEND; 01 MODULE (name_2); 02 PROBLEM 03 SPC a FIXED GLOBAL (name_1); 04 MODEND; Modul 1 Modul 2 SPECIFY: Bezug innerhalb eines Moduls 01 DCL Bezeichner_1 FIXED; 02 SPC Bezeichner_2 FIXED IDENT (Bezeichner_1); SPECIFY: Bezug zwischen zwei Modulen Initialisierung 01 DCL Bezeichner FIXED INIT(Wert);

23 Vielen Dank für Ihre Aufmerksamkeit


Herunterladen ppt "Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern Semantische Analyse einer Echtzeitprogrammiersprache mittels Verhaltensmustern."

Ähnliche Präsentationen


Google-Anzeigen