gpt4 book ai didi

compiler-construction - 编译循环依赖是如何工作的?

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:20 25 4
gpt4 key购买 nike

我用 Java 制作了这个示例,但我认为(未经测试)它也适用于其他(所有?)语言。

您有 2 个文件。首先,M.java:

public class MType {
XType x;
MType() {x = null;}
}

第二个文件(在同一目录中),XType.java:

public class XType {
MType m;
public XType(MType m) {this.m = m;}
}

好吧,这是糟糕的编程,但是如果您运行 javac XType 它会编译:甚至编译 MType 因为 XType 需要它。但是... MType 需要XType ...这是如何工作的?编译器如何知道发生了什么?

我想知道编译器(javac 或您知道的任何其他编译器)如何管理这种情况,而不是如何避免它。

我问这个问题是因为我正在编写一个预编译器,并且我想处理这种情况。

最佳答案

您需要通过2次,或者multi-pass方法:

Languages like Java require a multi-pass compiler since the definition of x would not be required to come before the use:

public class Example {  
public static void main(String [] args) {
assert(x==0);
x++;
assert(x==1);
}
static int x=0;
}

有多种方法,例如您可以执行以下操作:

第一遍可以查找所有变量声明,第二遍可以查找方法声明,等等,直到最后一遍使用所有这些信息来编译最终代码。

关于compiler-construction - 编译循环依赖是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40670005/

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