Partielo | Créer ta fiche de révision en ligne rapidement
ECOLE D'INGENIEUR
4ème année

Compilation informatique Compilation informatique Compilation informatique Compilation informatique

Théorie des systèmes d'informations

Definition

Compilation
• Un code source est envoyé dans un compilateur pour obtenir un code cible. Le code source est écrit en langage de haut niveau qui est un langage fait pour le programmeur, le programmeur est capable d’exprimer dans ce code source des idées de haut niveau. Le code cible est bas niveau : de l’assembleur, des codes intermédiaires (LLVM)... Ce qui va nous intéresser est le code de type “3 adresses”. Le compilateur va assurer une traduction du code source en code cible. Lors de la traduction, il faut préserver : ? le sens des instructions donc la sémantique du programme source (quel sens il a et ce qu’il est censé faire) ? préserver les entrées ? préserver la fonction définissant les sorties en fonction des entrées ? préserver les sorties


Analyse lexicale :

• Définir le lexique du langage source :

o mots-clés (while, if..)

o constantes (10, 0.5, “toto”)

o identifiants, ( x5, _toto, etc)

o signes de ponctuation(‘;’ ‘,’ ‘’.’)

=>spécifier des familles de lexème/unités lexicales


ID = Suites de lettres et de chiffres commençant par une lettre => x4

CST_INT= suites de chiffres entre {0,1,...,9} => 14

CST_DEC = suites de chiffres, un point, une suite non vide de chiffres => .01


Mot clé :

PLUS = {‘+’}|

MULT= {‘*’} | ? Distingués de l’analyse lexicale car il

DIV= {‘/’} | participe à la structure du programme


Première remarque :

• On spécifie ces lexèmes à l’aide de ce qu’on appelle des expressions régulières.

exemple :

o [0 - 9] les chiffres de 0 à 9

o [0 - 9]+ (= un ou plus) les suites non vides de chiffres

o [0 - 9]* (= 0 ou plus) les suites de chiffres éventuellement vide (éventuellement le mot qui contient aucune lettre)

o [0 - 9]*’.’[0 - 9]+ des constantes décimales

o [a-zA-Z][a-zA-Z 0 - 9]* une suite (une déf non ?) des identifiants

o “if” le lexème IF

• Une fois qu’on a définit l’ensemble des ces lexèmes un outil comme LEX permet de générer automatiquement un programme qui prend en entrée une chaîne de caractères et la découpe en lexème (si c’est possible)

exemple :

o x + y

• exemple d’erreur :

o x + 9y (la chaîne 9y n’est pas un mot autorisé dans le lexique)


Un compilateur peut effectivement détecter et afficher une erreur lexicale.


L’analyseur lexical est utilisé comme client de l’analyseur syntaxique. Car l’analyseur syntaxique va demander quel est le lexème et l’analyseur lexical va lui donner le lexème en question.


La compilation fait partie d’un domaine de l’informatique ou les programmes sont directement extrait des spécifications ? cela est vrai pour l’analyseur syntaxique et pour l’analyseur lexical mais cela peut se faire dans d’autre domaine comme par exemples :

• les jeux vidéos

• l’intelligence artificielle (on lui donne un jeu d’exemple et ensuite elle peut s'autogérer)

• les bases de données ( ? possibilité de créer le modèle entité relation puis de le donner à un SGBD pour qu’il crée les tables …)

L’informatique tend à devenir de plus en plus descriptive et moins spécifique et cela peut se faire grâce à la compilation.


A retenir :

Analyse Syntaxique • Exemple: Expression Arithmétique Le lexique des expressions arithmétiques: • Opérateur: PLUS, MULT, … • ID, CST,.. • Parenthèses: “(“ PARG, “)” PARD // Comment définir le langage des expressions arithmétiques à partir des ces éléments de lexique (lexem) ? Expressions arithmétiques simples : • Constantes • ID Expression arithmétiques complexes : • e1 PLUS e2 • e1 MULT e2 • PARG e PARD avec e, e1, e2 des expressions arithmétiques plus simple et c’est tout!! On formalise cette définition un peu intuitive par des règles de grammaire Soit exp l’ensemble des expressions arithmétiques qu’on veut définir. On a : en vert les cas de bases, en rouge les cas récursifs (? ? = “peut être et inclus”) • exp ? ? ID • exp ? ? CST • exp ? ? exp PLUS exp • exp ? ? exp MULT exp • exp ? ? PARG exp PARD Voilà les règles de production / grammaire. Ces règle de grammaire se traduisent en inclusion ( ? ? ?). On se retrouve ici avec un système d’inéquations sur les ensembles de mots qu’on peut construire à partir de nos unités lexicales.
'
ECOLE D'INGENIEUR
4ème année

Compilation informatique Compilation informatique Compilation informatique Compilation informatique

Théorie des systèmes d'informations

Definition

Compilation
• Un code source est envoyé dans un compilateur pour obtenir un code cible. Le code source est écrit en langage de haut niveau qui est un langage fait pour le programmeur, le programmeur est capable d’exprimer dans ce code source des idées de haut niveau. Le code cible est bas niveau : de l’assembleur, des codes intermédiaires (LLVM)... Ce qui va nous intéresser est le code de type “3 adresses”. Le compilateur va assurer une traduction du code source en code cible. Lors de la traduction, il faut préserver : ? le sens des instructions donc la sémantique du programme source (quel sens il a et ce qu’il est censé faire) ? préserver les entrées ? préserver la fonction définissant les sorties en fonction des entrées ? préserver les sorties


Analyse lexicale :

• Définir le lexique du langage source :

o mots-clés (while, if..)

o constantes (10, 0.5, “toto”)

o identifiants, ( x5, _toto, etc)

o signes de ponctuation(‘;’ ‘,’ ‘’.’)

=>spécifier des familles de lexème/unités lexicales


ID = Suites de lettres et de chiffres commençant par une lettre => x4

CST_INT= suites de chiffres entre {0,1,...,9} => 14

CST_DEC = suites de chiffres, un point, une suite non vide de chiffres => .01


Mot clé :

PLUS = {‘+’}|

MULT= {‘*’} | ? Distingués de l’analyse lexicale car il

DIV= {‘/’} | participe à la structure du programme


Première remarque :

• On spécifie ces lexèmes à l’aide de ce qu’on appelle des expressions régulières.

exemple :

o [0 - 9] les chiffres de 0 à 9

o [0 - 9]+ (= un ou plus) les suites non vides de chiffres

o [0 - 9]* (= 0 ou plus) les suites de chiffres éventuellement vide (éventuellement le mot qui contient aucune lettre)

o [0 - 9]*’.’[0 - 9]+ des constantes décimales

o [a-zA-Z][a-zA-Z 0 - 9]* une suite (une déf non ?) des identifiants

o “if” le lexème IF

• Une fois qu’on a définit l’ensemble des ces lexèmes un outil comme LEX permet de générer automatiquement un programme qui prend en entrée une chaîne de caractères et la découpe en lexème (si c’est possible)

exemple :

o x + y

• exemple d’erreur :

o x + 9y (la chaîne 9y n’est pas un mot autorisé dans le lexique)


Un compilateur peut effectivement détecter et afficher une erreur lexicale.


L’analyseur lexical est utilisé comme client de l’analyseur syntaxique. Car l’analyseur syntaxique va demander quel est le lexème et l’analyseur lexical va lui donner le lexème en question.


La compilation fait partie d’un domaine de l’informatique ou les programmes sont directement extrait des spécifications ? cela est vrai pour l’analyseur syntaxique et pour l’analyseur lexical mais cela peut se faire dans d’autre domaine comme par exemples :

• les jeux vidéos

• l’intelligence artificielle (on lui donne un jeu d’exemple et ensuite elle peut s'autogérer)

• les bases de données ( ? possibilité de créer le modèle entité relation puis de le donner à un SGBD pour qu’il crée les tables …)

L’informatique tend à devenir de plus en plus descriptive et moins spécifique et cela peut se faire grâce à la compilation.


A retenir :

Analyse Syntaxique • Exemple: Expression Arithmétique Le lexique des expressions arithmétiques: • Opérateur: PLUS, MULT, … • ID, CST,.. • Parenthèses: “(“ PARG, “)” PARD // Comment définir le langage des expressions arithmétiques à partir des ces éléments de lexique (lexem) ? Expressions arithmétiques simples : • Constantes • ID Expression arithmétiques complexes : • e1 PLUS e2 • e1 MULT e2 • PARG e PARD avec e, e1, e2 des expressions arithmétiques plus simple et c’est tout!! On formalise cette définition un peu intuitive par des règles de grammaire Soit exp l’ensemble des expressions arithmétiques qu’on veut définir. On a : en vert les cas de bases, en rouge les cas récursifs (? ? = “peut être et inclus”) • exp ? ? ID • exp ? ? CST • exp ? ? exp PLUS exp • exp ? ? exp MULT exp • exp ? ? PARG exp PARD Voilà les règles de production / grammaire. Ces règle de grammaire se traduisent en inclusion ( ? ? ?). On se retrouve ici avec un système d’inéquations sur les ensembles de mots qu’on peut construire à partir de nos unités lexicales.
'