Ich versuche herauszufinden, wie ich meine LEParserCfgVisitor-Klasse implementieren kann, um ein Kontrollflussdiagramm aus einem Abstract-Syntax-Tree zu erstellen, das bereits mit JavaCC generiert wurde . Ich weiß, dass es bereits existierende Tools gibt, aber ich versuche es in Vorbereitung auf mein Compiler-Finale.Erstellen eines Kontrollflussdiagramms von einem AST mit einem Besuchermuster mit Hilfe von Java
Ich weiß, dass ich eine Datenstruktur haben muss, die den Graphen im Speicher hält, und ich möchte Attribute wie IN, OUT, GEN, KILL in jedem Knoten behalten, um einen Kontrollfluss zu machen Analyse später.
Mein Hauptproblem ist, dass ich nicht herausgefunden habe, wie man die verschiedenen Blöcke miteinander verbindet, um die richtige Kante zwischen den Blöcken zu haben, je nach ihrer Art: Zweig, Schleifen usw. Mit anderen Worten: Ich habe einen expliziten Algorithmus gefunden, mit dem ich meinen Besucher aufbauen kann.
Hier ist mein leerer Besucher. Sie können sehen, es zu den grundlegenden langage Ausdrücke arbeitet, wie wenn, während und Grundoperationen (+, -, x, ^, ...)
public class LEParserCfgVisitor implements LEParserVisitor
{
public Object visit(SimpleNode node, Object data) { return data; }
public Object visit(ASTProgram node, Object data) {
data = node.childrenAccept(this, data);
return data;
}
public Object visit(ASTBlock node, Object data) {
}
public Object visit(ASTStmt node, Object data) {
}
public Object visit(ASTAssignStmt node, Object data) {
}
public Object visit(ASTIOStmt node, Object data) {
}
public Object visit(ASTIfStmt node, Object data) {
}
public Object visit(ASTWhileStmt node, Object data) {
}
public Object visit(ASTExpr node, Object data) {
}
public Object visit(ASTAddExpr node, Object data) {
}
public Object visit(ASTFactExpr node, Object data) {
}
public Object visit(ASTMultExpr node, Object data) {
}
public Object visit(ASTPowerExpr node, Object data) {
}
public Object visit(ASTUnaryExpr node, Object data) {
}
public Object visit(ASTBasicExpr node, Object data) {
}
public Object visit(ASTFctExpr node, Object data) {
}
public Object visit(ASTRealValue node, Object data) {
}
public Object visit(ASTIntValue node, Object data) {
}
public Object visit(ASTIdentifier node, Object data) {
}
}
jemand mir eine Hand geben?
Danke!