所以我试着写一个 OOP 语言的编译器,其语法与 Java 非常相似,而且我一直在想弄清楚继承是怎么回事实施。
我已经尝试过的是编写一个相当基本的 C ++ 继承示例,并使用clang -S ${FILES} -emit-llvm
进行编译。
C ++代码如下:
a.hpp:
class A {
protected:
int a;
};
b.hpp:
#include "a.hpp"
class B : public A {
private:
int b;
public:
explicit B();
};
b.cpp:
#include "b.hpp"
B::B() : A() {}
main.cpp中:
#include "b.hpp"
int main() {
B b;
}
但老实说,我确实发现输出确实令人困惑......
我发现谷歌搜索是为了处理虚拟方法和覆盖,我将不得不使用 vtables (并且知道我已经找到了this教程LLVM
文档,但我觉得它没有用,是否有一种在LLVM中创建 vtables 的标准方法?
我对编译顺序也有一些疑问......
假设我有这个源代码:
package test;
class Test extends SuperTest {}
我很清楚,为了在分析Test
时合并SuperTest
和Test
的逻辑和数据结构,SuperTest
必须已经编译,但是如何我是否安排编辑,以免出现这样的问题?
感谢您的关注。