编译器/引导 - 通过重新编译旧的引导编译器来降低速度?

时间:2011-07-05 23:51:31

标签: security compiler-construction bootstrapping iteration

我一直在重读http://cm.bell-labs.com/who/ken/trust.html,我似乎无法用第二阶段的垂直标签来理解第二阶段的概念。我向你们提出的问题是:现在通过包含\ v转义字符来检查字符两次吗?因为我看到它的方式是安装了这个新编译器,当使用\时,它将通过图3中的代码,然后在return('\ _v')语句中,然后将调用图4中的代码,该代码返回垂直选项卡的真实ASCII表示。这不会减慢编译时间,虽然它可以更好地表示当前编译器吗?如果您需要我重新解释我的问题,请告诉我。干杯!

1 个答案:

答案 0 :(得分:0)

代码不会遍历两次。在初始状态下,无法编译图3,因为\v没有定义的含义。 (只需将其视为编译器内部定义的奇特变量。)

编译完图4的代码后,您已声明\v代表11。生成的编译器可以将\v映射到值,因此您可以将\v定义为\v

具有实变量的非编译器示例将是这样的:

x = 11;
/* ... */
x = x;

一旦定义了x代表的内容,您就可以使用它,甚至将其值分配给自己。与解析器的主要区别在于,\v的定义不是在同一文件中的不同位置,而是分布在两个不同版本的编译器中,第二个由新编译器编译(因为旧编译器不包含此定义。)