我试图弄清楚如何实现我的LEParserCfgVisitor类,以从已经用JavaCC生成的Abstract-Syntax-Tree构建控制流图。我知道有些工具已经存在,但我正在为编译器决赛做准备。从一个使用Java访问者模式的AST构建控制流图来源:
我知道我需要一个数据结构来保持图形在内存中,我希望能够在每个节点中保留像IN,OUT,GEN,KILL这样的属性,以便能够执行控制流稍后分析。
我的主要问题是,我还没有想出如何将不同的块连接在一起,以便在每个块之间有正确的边缘,这取决于它们的性质:分支,循环等。换句话说, t找到了一个明确的算法,可以帮助我建立我的访问者。
这是我空的访客。你可以看到它的工作原理基本langage表达,就像如果同时和基本操作(+, - ,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) {
}
}
谁能给我个忙吗?
谢谢!