Вот
аюсь выяснить, как реализовать мой класс LEParserCfgVisitor для построения графа потока управления из абстрактного синтаксического дерева, уже сгенерированного с помощью JavaCC. Я знаю, что инструменты уже существуют, но я пытаюсь сделать это в рамках подготовки к финалу моего компилятора.
Я знаю, что мне нужна структура данных, которая хранит график в памяти, и я хочу иметь возможность хранить такие атрибуты, как IN, OUT, GEN, KILL, в каждом узле, чтобы иметь возможность впоследствии выполнять анализ потока управления.
Моя главная проблема заключается в том, что я не понял, как соединить различные блоки вместе, чтобы иметь правильный край между каждым блоками в зависимости от их природы: ветвь, петли и т. Д. Другими словами, я не нашел явного алгоритм, который может помочь мне построить моего посетителя.
Вот мой пустой посетитель. Вы можете видеть, что он работает с базовыми выражениями языка, например if, while и базовыми операциями (+, -, 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) {
}
}
Кто-нибудь может мне помочь?
Спасибо!