Fab*_* F. 16 compiler-construction circular-dependency
我用Java编写了这个例子,但我认为(未经测试)它可以在其他(所有?)语言中使用.
你有2个文件.首先,M.java
:
public class MType {
XType x;
MType() {x = null;}
}
Run Code Online (Sandbox Code Playgroud)
第二,另一个文件(在同一目录中)XType.java
,:
public class XType {
MType m;
public XType(MType m) {this.m = m;}
}
Run Code Online (Sandbox Code Playgroud)
好吧,这是糟糕的编程,但如果你运行javac XType
它编译:编译甚至MType
因为XType
需要它.但...... MType
需要XType
......这是如何运作的?编译器如何知道发生了什么?
我想知道编译器(javac或你知道的任何其他编译器)如何管理这种情况,而不是如何避免它.
我问,因为我正在写一个预编译器,我想管理那种情况.
你需要采取2通或多通的方法:
像Java这样的语言需要多遍编译器,因为在使用之前不需要定义x:
public class Example {
public static void main(String [] args) {
assert(x==0);
x++;
assert(x==1);
}
static int x=0;
}
Run Code Online (Sandbox Code Playgroud)
有各种方法,例如您可以执行以下操作:
第一遍可以查找所有变量声明,第二遍查找方法声明等,直到最后一遍使用所有这些信息来编译最终代码.
归档时间: |
|
查看次数: |
2368 次 |
最近记录: |