2011-07-05 2 views
1

J'ai relu http://cm.bell-labs.com/who/ken/trust.html et je n'arrive pas à saisir le concept de la phase II avec la languette verticale. Ma question à vous les gars est: Les caractères sont-ils vérifiés deux fois maintenant avec l'inclusion du caractère d'échappement \ v? Parce que la façon dont je le vois est qu'avec ce nouveau compilateur installé, lorsque \ v est utilisé, il passera par le code de la figure 3, puis à l'instruction de retour ('\ v'), le code de la figure 4 puis s'appelle qui renvoie la vraie représentation ASCII d'un onglet vertical. Cela ne ralentira-t-il pas le temps de compilation, bien que cela donne une meilleure représentation du compilateur actuel? S'il vous plaît laissez-moi savoir si vous avez besoin de moi pour reformuler ma question. À votre santé!Compilateur/Bootstrapping - Plus lent en recompilant les anciens compilateurs bootstrap?

Répondre

0

Le code n'est pas traversé deux fois. Dans l'état initial, la figure 3 ne peut pas être compilée car \v n'a pas de signification définie. (Il suffit de penser comme une variable de fantaisie qui est définie à l'intérieur le compilateur.)

Une fois que vous avez compilé la figure. Code de 4 vous avez dit que \v peuplements pour 11. Le compilateur résultant peut mapper \v à une valeur, ainsi vous pouvez définir \v pour représenter \v.

Un exemple non compilateur avec des variables réelles serait quelque chose comme ceci:

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

Une fois que vous avez défini ce que x représente, vous pouvez l'utiliser et même affecter sa valeur elle-même. La différence principale avec l'analyseur est qu'au lieu d'avoir les deux déclarations à des positions différentes dans le même fichier, les définitions de \v sont réparties sur deux versions différentes du compilateur, la deuxième étant compilée par le nouveau compilateur (parce que l'ancien compilateur n'inclut pas cette définition).

+0

Ah, je l'ai maintenant. Je pensais qu'il fallait juste continuer à référencer ce code dans le nouveau compilateur, mais il suffit simplement de remplacer le \ v dans le code octet par 11. Par conséquent, lorsque vous continuez à recompiler cette source avec le nouveau compilateur, vous obtiendrez le même octet code. L'abstraction m'a embrouillé. Je vous remercie! – edaniels

Questions connexes