gpt4 book ai didi

optimization - 为一种向前看的语言和多个文件编写编译器?

转载 作者:行者123 更新时间:2023-12-03 17:20:00 24 4
gpt4 key购买 nike

在我的语言中,当定义出现在方法下方时,我可以在方法中使用类变量。它还可以调用我的方法等下面的方法。没有“标题”。以这个 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:通过代码检查是否有任何错误,例如 undefined variable ,错误使用等并创建我的输出

  • 但似乎要让这个工作,我必须在做 pass3 之前为所有文件做 pass 1 和 2。在我发现语法错误之前感觉还有很多工作要做(除了可以在解析时完成的明显操作,例如忘记关闭大括号或写入 0xLETTERS 而不是十六进制值)。我的直觉说还有其他方法。

    注意:我正在使用 bison/flex 来生成我的编译器。

    最佳答案

    我对处理前向引用的语言的理解是,它们通常只使用第一遍来构建有效名称列表。类似于将条目放入表中(不填写定义)这样的东西,以便稍后在您进行真正的传递以生成定义时指向一些东西。

    如果您尝试实际构建完整的定义,您最终将不得不重新扫描,每次都保存对未定义事物的任何引用,直到下一次通过。如果有循环引用,即使这样也会失败。

    关于optimization - 为一种向前看的语言和多个文件编写编译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1578835/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com