Estoy tratando de descubrir cómo implementar mi clase LEParserCfgVisitor para construir un gráfico de flujo de control a partir de un árbol de sintaxis abstracto ya generado con JavaCC . Sé que hay herramientas que ya existen, pero estoy tratando de hacerlo en preparación para la final de mi compilador.Construyendo un gráfico de control de flujo desde un AST con un patrón de visitante usando Java
Sé que necesito tener una estructura de datos que mantenga el gráfico en la memoria, y quiero poder mantener atributos como IN, OUT, GEN, KILL en cada nodo para poder hacer un flujo de control análisis más adelante.
Mi problema principal es que no he descubierto cómo conectar los diferentes bloques entre sí, ya que tengo el borde derecho entre cada bloque dependiendo de su naturaleza: rama, bucles, etc. En otras palabras, no lo he hecho Encontré un algoritmo explícito que podría ayudarme a construir mi visitante.
Aquí está mi visitante vacío. Se puede ver que funciona en expresiones básicas langage, como si, al tiempo y las operaciones básicas (+, -, 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) {
}
}
¿alguien puede darme una mano?
Gracias!