Traduction des langages
Transcription
Traduction des langages
Traduction des langages Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne La traduction d’un langage ♦ La conversion d’un programme d’un langage vers un autre s’appelle une traduction ♦ Le programme dans sa forme originale est le programme source. La version traduite est le programme objet ♦ Le processus de traduction se décompose en trois phases: • analyse lexicale • parsing • génération de code programme programme source source Page 2 analyseur analyseur lexical lexical parser parser générateur générateur de de code code Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne programme programme objet objet ♦ L’analyseur lexical doit reconnaître dans le programme source les chaînes de symboles qui forment une entité ♦ Une fois l’entité identifiée, elle est classée selon son type (valeur numérique, mot, opérateur arithmétique, etc) ♦ L’unité est représentée ensuite par un motif de bits appelé token, transférée au parser ♦ Le parser voit donc le programme comme une suite d’unités lexicales (tokens) plus que comme une suite de symboles. Et le parser groupe ces unités en phrases ♦ La fonction du parser est d’identifier la structure grammaticale du programme et de reconnaître le rôle de chaque composant Page 3 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne ♦ Dans les langages modernes, à format libre, la structure du programme doit être identifiée indépendamment de l’espacement utilisé dans le programme source ♦ Pour cela, les langages utilisent des symboles de ponctuation pour marquer la fin d’une phrase et des mots clés (if, while, etc) pour marquer le début d’une phrase. Les mots clés sont des mots réservés, que l’on ne peut pas utiliser à d’autres fins dans le programme ♦ Le processus de parsing se base dans un ensemble de règles de syntaxe, qui définissent la syntaxe du langage de programmation Page 4 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne ♦ Les règles de syntaxe peuvent être exprimées sous la forme de diagrammes syntaxiques ♦ Exemple: diagramme syntaxique de la phrase if-then-else if if expression expression booléenne booléenne then then phrase phrase else else phrase phrase ♦ Dans ces diagrammes, les termes utilisés tels quels dans le langage apparaissent à l’intérieur des ovales, tandis que les termes qui demandent une description additionnelle apparaissent à l’intérieur des rectangles ♦ Les premiers termes sont appelés terminaux; les seconds sont appelés non terminaux Page 5 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne ♦ Exemple: + + phrase phrase expression terme terme -- + + terme terme terme facteur facteur facteur xx aa bb cc Page 6 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne ♦ L’analyse qui montre si une certaine chaîne respecte un ensemble de diagrammes syntaxiques peut se représenter sous la forme d’un arbre de parsing ♦ Exemple: déterminer si la chaîne a+bxc respecte les diagrammes syntaxiques précédents Page 7 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne expression expression terme terme + facteur facteur a expression expression terme terme facteur facteur x b terme terme facteur facteur c Page 8 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne ♦ Faire le parsing d’un programme revient à faire l’arbre de parse du programme source ♦ Les règles syntaxiques d’un langage ne peuvent pas permettre plus d’un arbre de parse pour la même chaîne: cela pourrait conduire à des ambiguïtés dans le programme ♦ Exemple: faire l’arbre de parse pour la phrase if B1 then if B2 then S1 else S2 d’après le diagramme syntaxique donné précédemment pour la phrase if-then-else Page 9 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne phrase phrase if expression expression booléenne booléenne then phrase phrase else B1 S2 if expression expression booléenne booléenne then B2 Page 10 phrase phrase Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne phrase phrase S1 phrase phrase if expression expression booléenne booléenne then phrase phrase B1 if expression expression booléenne booléenne then B2 Page 11 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne phrase phrase S1 else phrase phrase S2 ♦ Les deux solutions sont différentes. Les deux interprétations pourraient être distinguées sans ambiguïté grâce à l’utilisation des parenthèses: • if B1 then (if B2 then S1) else S2 • if B1 then (if B2 then S1 else S2) Page 12 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne ♦ La phase finale de la traduction est la génération du code objet ♦ Une partie importante de la génération du code est son optimisation ♦ Exemple: la traduction ligne à ligne du code x = y + z; w = x + z; conduirait à un code non optimal. En effet, le générateur de code doit voir que, après l’exécution de la première phrase, les valeurs de x et z se trouvent déjà dans les registres du processeur Page 13 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne Linking et loading ♦ Le programme objet généré par la traduction, bien qu’en langage machine, peut rarement être exécuté directement par le processeur ♦ L’une des raisons de cette impossibilité est l’utilisation des modules traduits séparément ♦ En plus, le programme fait souvent des demandes au système d’exploitation ♦ Un programme objet est donc un programme en langage machine contenant des bouts de programme qui doivent être liés entre eux et à d’autres programmes objets pour obtenir un programme exécutable ♦ Ces connexions sont faites par un programme appelé linker Page 14 Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne ♦ Le programme exécutable, généré par le linker, est souvent appelé un module de chargement. Les modules de chargement sont stockés sous forme de fichiers dans la mémoire de masse du système ♦ Finalement, pour exécuter le programme, le module de chargement doit être placé dans la mémoire. Cette fonction est l’oeuvre d’un programme appelé loader, qui fait partie du système d’exploitation programme source Page 15 traduction traduction programme objet link link module de charge Eduardo Sanchez Ecole Polytechnique Fédérale de Lausanne load load programme exécutable