Maison >Problème commun >Quel est le logiciel système capable de transformer les programmes sources en langage de haut niveau en programmes cibles ?

Quel est le logiciel système capable de transformer les programmes sources en langage de haut niveau en programmes cibles ?

青灯夜游
青灯夜游original
2022-07-26 14:58:4111891parcourir

Le logiciel système qui transforme les programmes sources de langage de haut niveau en programmes cibles est un « compilateur ». Un compilateur fait référence à un programme de traduction qui traduit un programme source écrit dans un langage de programmation de haut niveau en un programme cible équivalent au format langage machine. Le processus de travail d'un compilateur traduisant un programme source en un programme cible est divisé en cinq étapes : analyse lexicale de la syntaxe ; optimisation du code intermédiaire ; analyse lexicale du code cible ; , si des erreurs grammaticales sont détectées lors de l'analyse, un message d'invite sera émis.

Quel est le logiciel système capable de transformer les programmes sources en langage de haut niveau en programmes cibles ?

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

Le logiciel système capable de traiter des programmes sources écrits dans des langages de haut niveau en programmes cibles est un « compilateur ».

Compilateur (programme de compilation), également appelé compilateur, fait référence à un programme de traduction qui traduit un programme source écrit dans un langage de programmation de haut niveau en un programme cible équivalent au format langage machine. Les compilateurs sont des programmes de traduction mis en œuvre à l'aide d'une approche d'implémentation générative. Il prend en entrée un programme source écrit dans un langage de programmation de haut niveau et en sortie un programme cible exprimé en langage assembleur ou en langage machine. Le programme cible compilé passe généralement également par une étape d'exécution afin de s'exécuter avec le support du programme en cours d'exécution, de traiter les données initiales et de calculer les résultats de calcul requis.

Le compilateur doit analyser le programme source puis le synthétiser dans le programme cible. Premièrement, vérifier l'exactitude du programme source et le décomposer en plusieurs composants de base ; deuxièmement, établir les parties de programme cible équivalentes correspondantes sur la base de ces composants de base. Afin d'accomplir ces tâches, le compilateur doit créer des tables pendant la phase d'analyse et transformer le programme source en un langage intermédiaire afin qu'il puisse être facilement référencé et traité lors de l'analyse et de la synthèse.

Caractéristiques du compilateur :

Le compilateur doit analyser le programme source puis le synthétiser dans le programme cible. Premièrement, vérifier l'exactitude du programme source et le décomposer en plusieurs composants de base ; deuxièmement, établir les parties de programme cible équivalentes correspondantes sur la base de ces composants de base. Afin d'accomplir ces tâches, le compilateur doit créer des tables pendant la phase d'analyse et transformer le programme source en un langage intermédiaire afin qu'il puisse être facilement référencé et traité lors de l'analyse et de la synthèse.

Principales structures de données utilisées dans l'analyse et la synthèse de structures de données, y compris les tables de symboles, les tables de constantes et les programmes de langage intermédiaire. La table des symboles se compose d'identifiants utilisés dans le programme source ainsi que de leurs attributs, qui incluent des types (tels que des variables, des tableaux, des structures, des fonctions, des procédures, etc.), des types (tels que des entiers, des types réels, des chaînes, des types complexes, etc.). étiquettes), etc.), ainsi que d'autres informations requises par le programme cible. La table des constantes comprend les constantes utilisées dans le programme source, y compris la représentation machine des constantes et les adresses du programme cible qui leur sont attribuées. Un programme en langage intermédiaire est une forme intermédiaire de programme introduite avant la traduction du programme source en programme cible. Le choix de sa représentation dépend de la manière dont le compilateur l'utilisera et le traitera ultérieurement. Les formes linguistiques intermédiaires couramment utilisées comprennent la représentation polonaise, les triples, les quadruples et les triples indirects.

L'analyse d'une partie du programme source se fait à travers trois étapes : analyse lexicale, analyse syntaxique et analyse sémantique. L'analyse lexicale est complétée par un programme d'analyse lexicale (également appelé scanner), dont la tâche est d'identifier les mots (c'est-à-dire les identifiants, les constantes, les mots réservés et les opérateurs divers, les signes de ponctuation, etc.), de créer des tables de symboles et des tables de constantes, et convert Le programme source est converti en un formulaire interne facile à analyser et à traiter par le compilateur. L'analyseur de syntaxe est la partie centrale du compilateur. Sa tâche principale est de vérifier si le programme source est grammatical selon les règles grammaticales du langage. S'il n'est pas grammatical, un message d'erreur de syntaxe sera généré ; s'il est grammatical, la structure grammaticale du programme source sera décomposée et un programme interne sous forme de langage intermédiaire sera construit. Le but de l’analyse grammaticale est de comprendre comment les mots forment des phrases et comment les énoncés forment des programmes. Le programme d'analyse sémantique vérifie en outre l'exactitude sémantique des structures juridiques du programme. Son objectif est de garantir l'utilisation correcte des identifiants et des constantes, de collecter et de sauvegarder les informations nécessaires dans des tables de symboles ou des programmes de langage intermédiaire et d'effectuer le traitement sémantique correspondant.

Le processus de travail d'un compilateur

Un compilateur est également appelé système de compilation. Il s'agit d'un programme de traitement du langage qui traduit des programmes sources orientés processus écrits dans des langages de haut niveau en programmes cibles. Le processus du compilateur consistant à traduire un programme source en un programme cible est divisé en cinq étapes : analyse lexicale ; génération de code intermédiaire ; optimisation du code cible ; Il effectue principalement une analyse lexicale et une analyse syntaxique, également appelée analyse du programme source. Au cours du processus d'analyse, des erreurs grammaticales sont détectées et des informations rapides sont fournies.

(1) Analyse lexicale

La tâche de l'analyse lexicale est de traiter les mots composés de caractères, de parcourir le programme source caractère par caractère de gauche à droite, de générer des symboles de mots un par un et de les utiliser comme chaînes. La source Le programme est transformé en un programme intermédiaire de chaînes de symboles de mots. Un programme qui effectue une analyse lexicale est appelé lexer ou scanner.

Les symboles de mots dans le programme source sont analysés par le scanner et produisent généralement des formules binaires : catégorie de mot ; la valeur du mot lui-même. Les catégories de mots sont généralement codées avec des nombres entiers. Si une catégorie ne contient qu'un seul symbole de mot, alors pour ce symbole de mot, le codage de catégorie représente entièrement sa propre valeur. Si une catégorie contient de nombreux symboles verbaux, alors pour chacun de ses symboles verbaux, en plus du code de catégorie, sa propre valeur doit également être indiquée.

De manière générale, il existe deux manières de construire des analyseurs lexicaux : la construction manuelle et la génération automatique. La construction manuelle peut fonctionner à l'aide de diagrammes d'états, la génération automatique peut être implémentée à l'aide d'automates finis déterministes.

(2) Analyse syntaxique

L'analyseur syntaxique du compilateur prend les symboles de mots en entrée, analyse si la chaîne de symboles de mots forme une unité grammaticale conforme aux règles grammaticales, telles que l'expression, l'affectation, la boucle, etc. , et vérifie enfin s'il forme un Un programme qui répond aux exigences est analysé selon les règles grammaticales utilisées dans la langue pour vérifier si chaque énoncé a une structure logique correcte. Le programme est l'unité grammaticale finale. Les règles grammaticales d'un compilateur peuvent être caractérisées par une grammaire hors contexte.

Il existe deux méthodes d'analyse grammaticale : l'analyse descendante et l'analyse ascendante. De haut en bas signifie partir du symbole de départ de la grammaire, déduire vers le bas et déduire la phrase. La méthode d'analyse ascendante utilise la méthode de réduction par déplacement. L'idée de base est la suivante : utilisez une fenêtre contextuelle de symbole enregistré premier-dernier pour déplacer les symboles d'entrée un par un lorsque le haut de la pile se forme. une production d'une certaine Lors de la sélection d'une expression candidate, la partie en haut de la pile est réduite au symbole voisin de gauche de la production.

(3) Génération de code intermédiaire

Le code intermédiaire est une représentation interne du programme source, ou langage intermédiaire. La fonction du code intermédiaire est de rendre la structure du programme compilé logiquement plus simple et plus claire, notamment pour faciliter la mise en œuvre de l'optimisation du code cible. Le code intermédiaire est le programme en langage intermédiaire, et la complexité du langage intermédiaire se situe entre le langage du programme source et le langage machine. Il existe de nombreuses formes de langues intermédiaires, les plus courantes étant la notation polonaise inversée, les tétragrammes, les formes ternaires et les arbres.

(4) Optimisation du code

L'optimisation du code fait référence à l'exécution de plusieurs transformations équivalentes sur le programme afin qu'un code cible plus efficace puisse être généré à partir du programme transformé. La soi-disant équivalence signifie que les résultats en cours du programme ne sont pas modifiés. Ce qu'on appelle efficace fait principalement référence à la courte durée d'exécution du code cible et au petit espace de stockage occupé. Cette transformation est appelée optimisation.

Il existe deux types d'optimisation : l'une consiste à optimiser le code intermédiaire après analyse syntaxique, qui ne dépend pas de l'ordinateur spécifique ; l'autre est effectuée lors de la génération du code cible, qui dépend en grande partie de l'ordinateur spécifique. Pour le premier type d'optimisation, il peut être divisé en trois niveaux différents : optimisation locale, optimisation de boucle et optimisation globale selon la portée du programme impliqué.

(5) Génération de code cible

La génération de code cible est la dernière étape de la compilation. Le générateur de code cible convertit le code intermédiaire analysé syntaxiquement ou optimisé en code cible. Il existe trois formes de code cible :

① Code en langage machine qui peut être exécuté immédiatement, toutes les adresses sont déplacées ;

② Modules en langage machine à assembler, lorsqu'ils doivent être exécutés, le chargeur de liens les combine avec certains en cours d'exécution ; programmes Connectez-les et convertissez-les en code de langage machine exécutable ;

③ Le code de langage assembleur doit être compilé par un assembleur pour devenir un code de langage machine exécutable.

Trois problèmes qui affectent directement la vitesse du code cible doivent être pris en compte lors de l'étape de génération du code cible : premièrement, comment générer un code cible plus court ; deuxièmement, comment utiliser pleinement les registres de l'ordinateur et réduire le nombre de fois, le code cible accède à l'unité de stockage ; troisièmement, comment utiliser pleinement les caractéristiques du système d'instruction informatique pour améliorer la qualité du code cible.

Pour plus de connaissances connexes, veuillez visiter la rubrique FAQ !

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