编译器构造 – 编译循环依赖关系如何工作?

前端之家收集整理的这篇文章主要介绍了编译器构造 – 编译循环依赖关系如何工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我以 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;
}

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

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

猜你在找的设计模式相关文章