Construir un gráfico de flujo de control desde un AST con un patrón de visitante utilizando Java

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 abstracta ya generado con JavaCC. Sé que ya existen herramientas, pero estoy tratando de hacerlo en preparación para mi final de compiladores.

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 análisis de flujo de control más adelante.

Mi principal problema es que no he descubierto cómo conectar los diferentes bloques entre sí, como para tener el borde derecho entre cada bloque dependiendo de su naturaleza: rama, bucles, etc. En otras palabras, no he encontrado un explícito algoritmo que podría ayudarme a construir mi visitante.

Aquí está mi visitante vacío. Puede ver que funciona en expresiones básicas de lenguaje, como if, while y 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!

Respuestas a la pregunta(1)

Su respuesta a la pregunta