Traduction des langages
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 source analyseur lexical parser générateur de code programme objet Page 2
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 s La fonction du parser est d identifier la structure grammaticale du programme et de reconnaître le rôle de chaque composant Page 3
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 et des mots clés (if, while, etc) pour marquer le début d une. 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
Les règles de syntaxe peuvent être exprimées sous la forme de diagrammes syntaxiques Exemple: diagramme syntaxique de la if-then-else if expression booléenne then else 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
Exemple: expression terme + - terme facteur + x terme facteur a b c Page 6
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
expression terme + expression facteur terme a facteur x terme b facteur c Page 8
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 if B1 then if B2 then S1 else S2 d après le diagramme syntaxique donné précédemment pour la if-then-else Page 9
if expression booléenne then else B1 S2 if expression booléenne then B2 S1 Page 10
if expression booléenne then B1 if expression booléenne then else B2 S1 S2 Page 11
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
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, les valeurs de x et z se trouvent déjà dans les registres du processeur Page 13
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
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 traduction programme objet link module de charge load programme exécutable Page 15