加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 00:47:52 所属栏目:百科 来源:网络整理
导读:我以 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
我以 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;
}

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读