我以
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; }
有各种方法,例如您可以执行以下操作: