Technische Dokumentation

Werbung
Technische Dokumentation
Allgemeine Vorgangsweise, um den Parser zu kompilieren:
1)
Aufruf der Batchdatei make.bat
make.bat macht folgendes:
a)
b)
c)
2)
Aufruf von PCLEX mit der Spezifikationsdatei ocl.l.
Aufruf von PCYACC mit der Spezifikationsdatei ocl.y
Umbennenung der von PCLEX erzeugten Datei
ocl.lex.cpp.
ocl.c
Einfügen folgender include-Anweisung in die Datei Ocl.h:
#include „Ast.h“
Begründung:
Die union YYSTYPE verwendet Klassen, die in Ast.h deklariert werden.
Bei jedem Aufruf von make.bat wird Ocl.h jedoch ohne dem notwendigen
include überschrieben.
3)
Compilieren unter Visual C++ 6.
1
in
Beschreibung der Implementierung des Eingabestroms:
PROBLEMSTELLUNG:
Unser OCL-Parser benötigt zum Testen der Syntax und Semantik alle OCLConstraints des Datenmodells. Diese Constraints müssen irgendwie aus dem
Datenmodell herausgelesen und dem Parser bereitgestellt werden.
Wir haben uns darauf geeinigt alle Constraints in eine Datei zu schreiben und diese
dem Parser als Eingabestrom zu übergeben.
VORGANGSWEISE:
Die Mainmethode main.cpp enthält das Datenmodell (Objekt der Klasse Model),
welches die OCL-Constraints beinhaltet. Diese werden durch Aufruf der Prozedur
extractConstraints aus dem Modell ausgelesen.
Der Prozedur extractConstraints wird als einziger Parameter das gesamte
Datenmodell mit den enthaltenen OCL-Constraints übergeben. Die Prozedur ermittelt
nun die Constraints aller Komponententypen des Datenmodells.
Jedes Constraint wird in die Datei „data.txt“ ausgelesen. Das Auslesen erfolgt mit
Hilfe der Methode writeToFile der Klasse „IOData“. Diese Klasse bildet die
Schnittstelle zur Datei „data.txt“ („data.txt“ wird im Konstruktor der Klasse
„IOData“ festgelegt).
Die Methode writeToFile bekommt als einzigen Parameter den auszulesenden
Constraint als String über.
2
Dokumentation zur Implementierung des Abstrakten Syntaxbaumes
(AST)
EINLEITUNG
Was ist ein Abstrakter Syntaxbaum (AST) ?
Der abstrakte Syntaxbaum (AST) wird während des erstmaligen Parsens
(syntaktische Prüfung) aufgebaut. Dabei werden wichtige Informationen, die zur
späteren semantischen Prüfung und zum Übersetzen benötigt werden, in den Knoten
des Baumes mit abgespeichert (man sagt der Baum wird „annotiert“). Wurde eine
OCL-Expression geparst (syntaktische Prüfung abgeschlossen), so liegt es nun
daran, diesen Baum auf semantische Fehler Inorder zu durchlaufen.
VORGANGSWEISE ZUR ERSTELLUNG EINES AST
Viele Grammatikregeln (in „Ocl.y“ ) sind sich untereinander ähnlich. Zum Beispiel
sind „additiveExpression“ und „multiplicativeExpression“ beide
Expressions allerdings mit unterschiedlicher Präzedenz und unterschiedlichen
Operatoren.
Die Aufgabe zur Erstellung des AST liegt nun darin, solche Gruppierungen von
untereinander ähnlichen Regeln herauszufinden und als Klassenhierarchien zu
implementieren.
Solche Klassenhierarchien (Klassen in C++) haben den wesentlichen Vorteil, durch
die angebotenen Möglichkeiten der Objektorientierung in C++ (Vererbung und
Polymorphismus) die Komplexität der Implementierung eines AST stark
einzuschränken. Der AST wird dadurch leichter wartbar und kann in relativ kurzer
Zeit realisiert werden.
Sind also gemeinsame Grammatikregeln entdeckt, so erhalten alle einen
gemeinsamen Supertyp. Zum Beispiel sind alle Ausdrücke mit Operatoren vom Typ
„Exp“.
In den Aktionen zu den Expressionregeln werden nun Klassen mit den notwendigen
Informationen erzeugt und dem in PCYACC vordefinierten „$$“ zugewiesen. Diese
Klasse wird in der übergeordneten Regel wieder als Information in einem Knoten des
AST abgespeichert.
Im folgenden wird die Klassenhierarchie des AST beschrieben:
3
KLASSENHIERARCHIE
Superklasse
Subklasse
Grammatikregel
LogicalExp
RelationalExp
AdditiveExp
MultiplicativeExp
UnaryExp
IfExp
PostFixExp
logicalExpression
relationalExpression
additiveExpression
multiplicativeExpress.
unaryExpression
ifExpression
postfixExpression
PrimLiteral
PrimLiteralCollect
PrimFeature
PrimIfExp
PrimExp
alle Regeln
mit dem Namen
„primary“
Exp
Primary
Type
Integer
Boolean
String
alle
Literals
4
Herunterladen