This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
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)