Que signifie backpatching
? Veuillez illustrer avec un exemple simple.
Les correctifs antérieurs font généralement référence au processus de résolution des branches en aval implantées dans le code, par exemple. Les instructions at 'if', lorsque la valeur de la cible devient connue, par ex. lorsque l'accolade fermante ou la correspondance "else" est rencontrée.
Dans la phase de génération de code intermédiaire d'un compilateur, nous avons souvent besoin d'exécuter des instructions "jump" à des endroits du code qui n'existent pas encore. Pour traiter ce type de cas, une étiquette cible est insérée pour cette instruction. Un marqueur non terminal dans la règle de production provoque la reprise de l'action sémantique.
Certaines instructions, telles que les instructions conditionnelles, while, etc., seront représentées par un ensemble de syntaxes "if" et "goto" lors de la génération du code intermédiaire . Le problème est que, ces instructions "goto" n'ont pas de référence valide au début (lorsque le compilateur commence à lire le code source ligne par ligne - AKA 1st pass). Mais, après avoir lu le code source complet pour la première fois, les étiquettes et références que ces "goto" pointent, sont déterminées.
Le problème est que nous pouvons faire en sorte que le compilateur puisse remplir le X dans les instructions "goto X" en un seul passage ou non? La réponse est oui.
Si nous n'utilisons pas le backpatching, cela peut être réalisé par une analyse en 2 passes sur le code source. Mais backpatching nous permet de créer et de conserver une liste séparée qui est exclusivement conçue pour les instructions "goto". Comme cela se fait en un seul passage, le premier passage ne remplira pas le X dans les déclarations "goto X" car le comipleur ne sait pas où se trouve le X à première vue. Mais, il stocke leXdans cette liste exclusive et après avoir parcouru tout le code et constaté queX, leXest remplacé par cette adresse ou cette référence. .
Backpatching: La définition syntaxique peut être implémentée en deux passes ou plus (nous avons à la fois des attributs synthétisés et des attributs hérités).
Construisez l'arbre en premier.
Marchez l'arbre dans l'ordre des profondeurs.
La principale difficulté de la génération de code en une seule passe est que nous ne connaissons peut-être pas la cible d'une branche lorsque nous générons du code pour le flux d'instructions de contrôle.
Backpatching est la technique permettant de contourner ce problème . Générer des instructions de branche avec des cibles vides Lorsque la cible est connue, remplissez le libellé des instructions de branche (backpatching).
Le backpaching est le processus consistant à laisser des entrées vides pour l'instruction goto où l'adresse cible est inconnue dans le transfert en aval lors du premier passage et à les renseigner dans le second passage.
le backpatching est un processus dans lequel le champ d'opérande d'une instruction contenant une référence aval est laissé vide initialement. l'adresse du symbole de référence aval est placée dans ce champ lorsque sa définition est rencontrée dans le programme.
La correction arrière est l’activité consistant à remplir les informations non spécifiées des étiquettes En utilisant l’expression sémantique appropriée au cours du processus de génération de code.
C'est fait par: