Maison  >  Article  >  Quel est le programme écrit appelé programme source ?

Quel est le programme écrit appelé programme source ?

青灯夜游
青灯夜游original
2022-08-29 16:47:235517parcourir

Un programme écrit dans un « langage de programmation » est appelé programme source. Le code source fait référence à un fichier texte non compilé écrit conformément à certaines spécifications du langage de programmation. Il fait référence à une série d'instructions de langage informatique lisibles par l'homme, généralement écrites dans un langage de haut niveau. Le but ultime d'un programme source informatique est de traduire un texte lisible par l'homme en instructions binaires qu'un ordinateur peut exécuter. Ce processus est appelé compilation et est réalisé via un compilateur.

Quel est le programme écrit appelé programme source ?

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

Un programme écrit dans un « langage de programmation » est appelé programme source.

Qu'est-ce qu'un programme source ? Un programme source, également appelé code source, fait référence à un fichier texte non compilé écrit conformément à certaines spécifications du langage de programmation, généralement. rédigé dans un langage de haut niveau. Dans les langages de programmation modernes, les programmes sources peuvent apparaître sous la forme de livres, de cassettes ou d'autres supports, mais le format le plus couramment utilisé est celui des fichiers texte. Le but de ce format typique est de compiler un programme informatique.

Le but ultime d'un programme source informatique est de traduire un texte lisible par l'homme en instructions binaires qu'un ordinateur peut exécuter. Ce processus est appelé compilation et est réalisé via un compilateur.

Le type de fichier du programme source fait référence à la méthode de codage spéciale utilisée lors du stockage du programme source, qui est facile à lire et à identifier. Les fichiers texte sont le type de fichier le plus couramment utilisé, mais de nombreux langages de haut niveau et langages d'assemblage ont leurs propres types de fichiers. Il est généralement d'usage de les enregistrer dans des types de fichiers de langage de haut niveau ou de langage d'assemblage, principalement pour le. commodité d'une compilation ultérieure par le compilateur.

L'émergence des langages de programmation de haut niveau (également appelés langages de haut niveau) fait que les langages de programmation informatique ne s'appuient plus excessivement sur une machine ou un environnement spécifique. En effet, les langages de haut niveau sont compilés en différents langages machine sur différentes plates-formes au lieu d'être directement exécutés par la machine. L'un des principaux objectifs de FORTRAN, l'un des premiers langages de programmation, est d'atteindre l'indépendance de la plate-forme.

Fonction

Les principales fonctions du code source ont les deux fonctions suivantes :

Générer du code cible, c'est-à-dire un code pouvant être reconnu par les ordinateurs.

  • Décrire le logiciel, c'est-à-dire expliquer l'écriture du logiciel. De nombreux débutants, et même quelques programmeurs expérimentés, ignorent la rédaction des descriptions des logiciels ; car cette partie ne sera pas directement affichée dans le programme généré, ni impliquée dans la compilation. Mais cela montre que cela présente d’énormes avantages en termes d’apprentissage, de partage, de maintenance et de réutilisation de logiciels. Par conséquent, la rédaction de descriptions de logiciels est considérée comme une bonne habitude dans l’industrie pour créer d’excellents programmes, et certaines entreprises rendent également obligatoire leur rédaction.

  • Il est à noter que pour les langages compilés, comme C/C++/Java, la modification du code source ne peut pas changer le code cible généré. Si le code cible doit être modifié en conséquence, il doit être recompilé. Cependant, il existe actuellement de nombreux langages de script populaires, tels que Perl/Python, qui ne nécessitent pas de recompilation. Après avoir modifié le code, vous pouvez l'exécuter directement et voir les résultats de la modification.

Combinaison de codes

Le code source est une partie spéciale du logiciel et peut être inclus dans un ou plusieurs fichiers. Un programme ne doit pas nécessairement être écrit dans le même format que le code source. Par exemple, si un programme est pris en charge par une bibliothèque en langage C, il peut être écrit en langage C tandis qu'une autre partie peut être écrite en langage assembleur afin d'obtenir une efficacité opérationnelle plus élevée. Dans la situation actuelle, il y a très peu de logiciels qui doivent être écrits directement en langage assembleur, car souvent le programme d'optimisation généré par le compilateur est déjà très efficace, et le plus souvent il est compilé en C/C++. Langage pour écrire les parties du noyau qui nécessitent de la vitesse et utiliser des langages dynamiques tels que Perl/Python/Lua pour réaliser des extensions de noyau, telles que des interfaces, des configurations de gestion, etc. Cela ne fera ni perdre en efficacité ni augmenter la flexibilité du programme. Les logiciels plus complexes nécessitent généralement la participation de dizaines, voire de centaines de codes sources. Afin de réduire cette complexité, il faut introduire un système capable de décrire la relation entre chaque code source et comment le compiler correctement. Dans ce contexte, les systèmes de contrôle de version (VCS) sont nés et sont devenus l'un des outils nécessaires aux développeurs pour réviser le code.

Il existe une autre combinaison : le portage de logiciels écrits pour une plateforme vers une autre plateforme, comme le portage de logiciels sous Windows vers Linux ou MacOS. Le terme professionnel est le portage de logiciels. Généralement, les logiciels pouvant s'exécuter sur plusieurs plates-formes sont appelés logiciels multiplateformes.

Traitement des programmes sources en langage de haut niveau en programmes cibles

Le logiciel système qui peut traiter les programmes sources écrits en 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 scanner le programme source caractère par caractère de gauche à droite, de générer des symboles de mots un par un et d'utiliser le programme source comme chaîne An programme intermédiaire transformé en une chaîne 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 génèrent 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 si elle forme un programme qui répond aux exigences, selon le langage utilisé, l'analyse des règles grammaticales vérifie si chaque énoncé a la structure logique correcte et si 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 Lorsqu'une expression candidate est trouvée, 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 langage intermédiaire, 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é 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'instructions 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