Compiler / Bootstrapping - медленнее, перекомпилируя старые загрузочные компиляторы? - PullRequest
1 голос
/ 06 июля 2011

Я перечитал http://cm.bell -labs.com / who / ken / trust.html , и я не могу понять концепцию на этапе II с помощью вертикальной вкладки. У меня вопрос к вам, ребята: Проверяются ли символы дважды теперь с включением escape-символа \ v? Потому что, как я вижу, это с установленным новым компилятором, когда используется \ v, он будет проходить через код на рисунке 3, а затем в операторе return ('\ v') будет вызван код на рисунке 4, который возвращает истинное представление ASCII вертикальной табуляции. Разве это не замедлит время компиляции, хотя это улучшит представление текущего компилятора? Пожалуйста, дайте мне знать, если вы хотите, чтобы я перефразировал мой вопрос. Ура! * * 1006

1 Ответ

0 голосов
/ 06 июля 2011

Код не пройден дважды.В исходном состоянии рис. 3 не может быть скомпилирован, поскольку \v не имеет определенного значения. (Просто представьте, что это необычная переменная, которая определяется внутри компилятора.)

После того, как вы скомпилировали код на рис. 4, вы заявили, что \v обозначает 11.Результирующий компилятор может отобразить \v на значение, поэтому вы можете определить \v для обозначения \v.

Пример некомпилятора с реальными переменными будет выглядеть примерно так:

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

Как только вы определили, что означает x, вы можете использовать его и даже присвоить его значение себе.Основное отличие синтаксического анализатора состоит в том, что вместо двух объявлений в разных позициях в одном файле определения \v распространяются на две разные версии компилятора, а вторая компилируется новым компилятором (посколькустарый компилятор не включает это определение).

...