• Aucun résultat trouvé

La traduction d’un langage

N/A
N/A
Protected

Academic year: 2022

Partager "La traduction d’un langage"

Copied!
15
0
0

Texte intégral

(1)

Eduardo Sanchez

Ecole Polytechnique Fédérale de Lausanne

Traduction des langages

(2)

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 analyseuranalyseur parser générateurgénérateur programmeprogramme

(3)

♦ 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

(4)

♦ 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

(5)

♦ Les règles de syntaxe peuvent être exprimées sous la forme de diagrammes syntaxiques

♦ Exemple: diagramme syntaxique de la phrase if-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

ifif expression thenthen elseelse

booléenne expression

booléenne phrasephrase phrasephrase

(6)

♦ Exemple:

--

terme terme

phrase phrase

++

xx

facteur facteur

terme terme

++

bb aa expression

terme

facteur

(7)

♦ 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

(8)

expression expression

expression expression

terme terme

facteur

facteur termeterme

facteur facteur terme

terme

facteur facteur

a

+

b

x

(9)

♦ 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

(10)

phrase phrase

phrase phrase expression

booléenne expression booléenne

B1

if then else phrasephrase

S2 phrase phrase expression

booléenne expression

booléenne then if

B2 S1

(11)

phrase phrase

phrase phrase expression

booléenne expression booléenne

B1 if then

phrase phrase else

S2 phrase

phrase expression

booléenne expression

booléenne then if

B2 S1

(12)

♦ 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)

(13)

♦ 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

(14)

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

(15)

♦ 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

traduction

traduction linklink loadload

programme

source programme

objet module

de charge programme

exécutable

Références

Documents relatifs

Avec l'aide des philosophes "senior" reconnus, nous discuterons de comment écrire des articles de premier niveau en philosophie, de comment les organiser et les structurer,

Toute démonstration faite avec les règles 1 à 6 de la logique intuitionniste donne donc un programme sous la forme d’un λ -terme. Il se pose maintenant deux questions essentielles :

Je vais dire la mˆeme chose d’une autre fa¸con encore ; comme vous le voyez, j’insiste car ce point est important. La physique math´ematique n’explore pas notre environnement

„ Des systèmes et des méthodes standardisées de sélection des donneurs, de collecte, de traitement, de dépistage, de conservation et de transport du sang afin que la

Compiler un programme signifie traduire le fichier le contenant en un langage compréhensible et exécutable par la machine cible4. On compile un fichier Prog.c par

• Déclare une variable x de type int – entier- de valeur initiale 4, utilisable ensuite dans une instruction. 65 MAP

gouvernement fédéral pour déterminer son mandat d’ici à 2027. La Commission vient d’amorcer un processus de planification stratégique pour orienter ses travaux au cours

• Prévention en entreprise : mesures sanitaires, mesures organisationnelles (circulation dans l’entreprise, risques psychosociaux, télétravail, travail en horaires décalés,