Maison  >  Article  >  Le processus de compilation peut être divisé en plusieurs étapes

Le processus de compilation peut être divisé en plusieurs étapes

青灯夜游
青灯夜游original
2021-07-02 14:45:1427790parcourir

Le processus de compilation peut être divisé en 5 étapes : 1. Étape d'analyse lexicale Cette étape scanne et décompose les chaînes qui composent le programme source et identifie chaque mot. 2. Étape d'analyse syntaxique, qui permet d'analyser la structure grammaticale de la phrase. 3. Analyse sémantique et étape intermédiaire de génération de code. 4. Étape d'optimisation du code. 5. Étape du programme de génération de code cible.

Le processus de compilation peut être divisé en plusieurs étapes

L'environnement d'exploitation de ce tutoriel : système Windows 10, ordinateur Dell G3.

Le processus de travail d'un compilateur traduisant un programme source en un programme cible est divisé en cinq étapes : analyse lexicale ; analyse syntaxique ; génération de code intermédiaire et génération de code cible ;

Le programme de compilation est généralement divisé en cinq étapes : analyse lexicale, analyse syntaxique, analyse sémantique et génération de code intermédiaire, optimisation du code et programme de génération de code cible :

Le processus de compilation peut être divisé en plusieurs étapes

Ce qui suit est une explication détaillée des cinq étapes du processus de compilation

Pour le travail de compilation d'un programme, l'ensemble du processus depuis la saisie du programme source jusqu'à la sortie du programme cible est très compliqué. Mais en termes de processus, elle présente de nombreuses similitudes avec la traduction directe du langage naturel par les gens. Lorsque nous traduisons un texte dans un autre texte, comme traduire un paragraphe de l'anglais vers le chinois, nous devons généralement suivre les étapes suivantes :

(1) Tout d'abord, identifiez chaque mot de la phrase

( 2) Analysez le ; structure grammaticale de la phrase ;

(3) Faire une traduction préliminaire basée sur le sens de la phrase

(4) Modifier la traduction

(5) Rédiger la traduction finale ;

De même, nous pouvons diviser le processus de travail du compilateur en cinq étapes : analyse lexicale, analyse syntaxique, analyse sémantique et génération de code intermédiaire, optimisation et génération de code cible.

La première étape : l'analyse lexicale

La tâche de l'analyse lexicale est la suivante : saisir le programme source, analyser et décomposer les chaînes qui composent le programme source et identifier chaque mot (également appelé symbole de mot ou symbole en abrégé ), Tels que les mots de base (début, fin, if, for, while), les identifiants, les constantes, les opérateurs et les délimiteurs (signes de ponctuation, crochets gauche et droit).

Les symboles de mots sont les composants de base du langage et les éléments de base permettant aux gens de comprendre et d'écrire des programmes. Identifier et comprendre ces éléments est sans aucun doute la base de la traduction. Tout comme pour traduire de l'anglais vers le chinois, si vous ne comprenez pas les mots anglais, il est impossible de traduire correctement. Ce qui est suivi au stade de l'analyse lexicale, ce sont les règles lexicales de la langue (ou règles de formation des mots). Les outils efficaces pour décrire les règles lexicales sont les formes formelles et les automates efficaces.

Deuxième étape : analyse grammaticale

La tâche de l'analyse grammaticale est la suivante : sur la base de l'analyse lexicale et selon les règles grammaticales de la langue, décomposer les chaînes de symboles de mots en diverses unités grammaticales (catégories grammaticales), telles que des « phrases » , "phrase", "segment de programme" et "programme", etc. Grâce à l'analyse syntaxique, il est déterminé si la chaîne d'entrée entière constitue un « programme » grammaticalement correct. L'analyse grammaticale suit les règles grammaticales de la langue. Les règles de grammaire sont généralement décrites à l'aide de grammaires hors contexte. L'analyse lexicale est une analyse linéaire, tandis que l'analyse syntaxique est une analyse hiérarchique. Par exemple : Z= Par conséquent, la tâche de l'analyse syntaxique est d'identifier X + 0,618 * Y en tant qu'expression arithmétique, et en même temps, dix fois la chaîne de symboles entière mentionnée ci-dessus appartient à la catégorie des instructions d'affectation.

La troisième étape : analyse sémantique et génération de code intermédiaire

La tâche de cette étape est d'analyser la signification des différentes catégories grammaticales identifiées par l'analyse syntaxique et d'effectuer une traduction préliminaire (générer du code intermédiaire). Cette étape comprend généralement deux aspects du travail. Tout d'abord, effectuez des arrangements sémantiques pour chaque catégorie grammaticale, par exemple, si la variable est définie, si le type est correct, etc. Si la sémantique est correcte, l’autre côté du travail est effectué, c’est-à-dire l’interprétation du code intermédiaire.

Cette étape suit les règles sémantiques du langage. Les règles sémantiques sont généralement décrites à l'aide de grammaires d'attributs. La « traduction » commence seulement ici à entrer en jeu. Le "code intermédiaire" est un système de notation clair et facile à traiter, qui est généralement indépendant d'un matériel spécifique. Ce système de notation est soit proche dans une certaine mesure de la forme d'instruction des ordinateurs modernes, soit il peut être relativement facilement transformé en instructions machine des ordinateurs modernes.

Par exemple, de nombreux compilateurs utilisent un « quaternion » très similaire à « l'instruction à trois adresses » comme code intermédiaire. Sa signification est la suivante : effectuer une certaine opération (spécifiée par "opérateur") sur les "opérandes gauche et droit" et conserver la valeur obtenue par l'opération comme "résultat". Lorsque les tétragrammes sont utilisés comme codes intermédiaires, la tâche de génération de codes intermédiaires consiste à traduire diverses catégories en séquences de tétragrammes selon les règles grammaticales de la langue.

D'une manière générale, le code intermédiaire est un système de notation indépendant du matériel spécifique. Les tantes moyennes couramment utilisées, en plus des formules quaternaires, incluent également les formules ternaires, les formules ternaires indirectes, la notation polonaise inversée, la représentation arborescente, etc.

La quatrième étape : l'optimisation du code

La tâche de l'optimisation est de traiter et de transformer le code intermédiaire généré à l'étape précédente, afin de produire un code cible plus efficace (gain de temps et d'espace) dans l'étape finale. Les principaux aspects de l'optimisation incluent : l'extraction des sous-expressions PR, l'optimisation des boucles, la suppression du code inutile, etc. Parfois, afin de faciliter les « opérations parallèles », le code peut également être parallélisé. Le principe suivi par l'optimisation est la règle de transformation équivalente du programme.

La cinquième étape : Programme de génération de code cible

La tâche de cette étape est de transformer le code intermédiaire (ou après optimisation) en code langage bas niveau sur une machine spécifique. Cette étape met en œuvre la traduction finale et son travail dépend de la structure du système matériel et de la signification des instructions machine. Le travail à ce stade est très complexe, comprenant la conception de l'utilisation des composants fonctionnels du système matériel, la sélection des instructions machine, l'allocation de l'espace de stockage pour diverses variables de type de données et la planification des registres et des registres de sauvegarde, etc.

Le code objet peut être sous la forme d'un code d'instruction absolu ou d'un code d'instruction déplaçable ou d'un code d'instruction d'assemblage. Si le code objet est un code d'instruction absolu, ce code objet peut être exécuté immédiatement. Si le code cible est un code d'instruction d'assemblage, il doit être compilé par l'assembleur avant de pouvoir être exécuté. Il convient de souligner que le code objet généré aujourd'hui par la plupart des compilateurs pratiques est un code d'instruction déplaçable. Avant de s'exécuter, ce type de code cible doit utiliser un programme d'assemblage de connexion pour connecter chaque module cible (y compris la fonction de bibliothèque fournie par le système), déterminer l'emplacement des variables (ou constantes) du programme dans la mémoire principale et charger le mémoire spécifiée dans la mémoire. L'adresse de départ en fait un programme de code d'instruction absolu qui peut être exécuté.

Pour plus de connaissances sur la programmation, veuillez visiter : Vidéos de programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn