Я работаю над переводчиком с ++ на бесклассовый с.
На основе примера Калейдоскопа в LLVM каждый узел дерева AST имеет функцию codeGen (), которая генерирует соответствующий код и возвращает его родительскому узлу.
Я пытаюсь реализовать подобное поведение, используя шаблон посетителя, но мне нужен посетитель, чтобы вернуть объекты.
Есть идеи о том, как это можно сделать с помощью RecursiveASTVisitor
?
В качестве примера ввода для программы:
void DrawToLayout(std::string, double, double, double, double) {}
class PCellRect {
private:
double bottomX, bottomY, topX, topY;
public:
PCellRect(double bX, double bY, double tX, double ty)
: bottomX(bX), bottomY(bX), topX(bX), topY(bX) {}
void Draw() { DrawToLayout("Rect", bottomX, bottomY, topX, topY); }
};
void Test() {
PCellRect rectangle(1.0, 1.0, 2.0, 2.0);
rectangle.Draw();
}
выдаст такой вывод:
void DrawToLayout(std::string, double, double, double, double) {}
void PCellRect_Constructor(double &bottomX, double &bottomY, double &topX,
double &topY, double bX, double bY, double tX,
double tY) {
bottomX = bX;
bottomY = bY;
topX = bY;
topY = bY;
}
void PCellRect_Draw(double &bottomX, double &bottomY, double &topX,
double &topY) {
DrawToLayout("Rect", bottomX, bottomY, topX, topY);
}
void Test() {
double rectangle_PCellRect_bottomX;
double rectangle_PCellRect_bottomY;
double rectangle_PCellRect_topX;
double rectangle_PCellRect_topY;
PCellRect_Constructor(rectangle_PCellRect_bottomX,
rectangle_PCellRect_bottomY, rectangle_PCellRect_topX,
rectangle_PCellRect_topY, 1.0, 1.0, 2.0, 2.0);
PCellRect_Draw(rectangle_PCellRect_bottomX, rectangle_PCellRect_bottomY,
rectangle_PCellRect_topX, rectangle_PCellRect_topY);
}