在我的语言中,当定义出现在方法下方时,我可以在方法中使用类变量。它还可以调用我的方法等下面的方法。没有“标题”。以这个 C# 示例为例。
class A
{
public void callMethods() { print(); B b; b.notYetSeen();
public void print() { Console.Write("v = {0}", v); }
int v=9;
}
class B
{
public void notYetSeen() { Console.Write("notYetSeen()\n"); }
}
我应该如何编译它?我在想的是:
- pass1:将所有内容转换为 AST
- pass2:遍历所有类并构建定义类/变量/等的列表
- pass3:检查代码并检查是否存在未定义变量、错误使用等错误并创建我的输出
但似乎要让它工作,我必须在做 pass3 之前为所有文件做 pass 1 和 2。在我发现语法错误之前感觉还有很多工作要做(除了可以在解析时完成的明显操作,例如忘记关闭大括号或写入 0xLETTERS 而不是十六进制值)。我的直觉说还有其他方法。
注意:我正在使用 bison/flex 来生成我的编译器。