Cours théorie des langages

This commit is contained in:
xdrm-brackets 2017-01-20 15:42:51 +01:00
parent 6831ccaa60
commit b0100aa876
3 changed files with 166 additions and 1 deletions

View File

@ -5,6 +5,6 @@ Cours de Licence3 Semestre 2
- [Systèmes d'exploitation](/systemesdexploitation/README.md)
- [Conception de systèmes d'information](/conceptiondesystemesdinformation/README.md)
- Paradigmes de programmation
- Théorie des langages et compilation
- [Théorie des langages et compilation](/theoriedeslangagesetcompilation/README.md)
- [Systèmes distribués](/systemesdistribues/README.md)
- Anglais

View File

@ -0,0 +1,11 @@
Théorie des langages de programmation & compilation
---------------------------------------------------
#### Cours
1. [Cours 1](/cours/1.md)
#### TDs
#### TPs

View File

@ -0,0 +1,154 @@
### Motivations
Concept de **langage formel**
- créé par les linguistes pour décrire les langages naturels
- effectuer des traductions automatiques
- Noam CHOMSKY: modèle mathématique pour les grammaires
- 1958: langage ALGOL décrit à l'aide d'une grammaire "Hors-Contexte" (notations BNF: description d'un langage de prog.)
Pourquoi étudier les langages formels ?
- conception de langages: syntaxe et grammaire
- Analyse
- lexicale: déterminer les entités syntaxiques)
- syntaxicale: vérifier la syntaxe
- compilation: traduction
- Générateurs d'analyseurs lexicaux (ex: lex)
- Méta-compilateurs : compilateurs de compilateurs, ou générateurs de compilateur (ex: compilateur Ada compilé avec gcc)
- Nécessaire pour l'étude des langages de programmation
### Un compilateur ?
PROGRAMME SOURCE => COMPILATEUR => PROGRAMME CIBLE
||
v
nessages d'erreur
Un compilateur est un **programme** qui
- prend en entrée une **donnée textuelle** source (programme, donnée xml, fichier de configuration, etc)
- la reconnait (l'analyse) pour vérifier sa correction
- émet éventuellement un **message d'erreur**
- le traduit dans le **langage cible**
Le processus de compilation est généralement analysé comme une série de phases:
- Phase: opération logiquement distincte, qui à partir d'une représentation du programme, produit une autre représentation en entrée d'une phase
Phases:
1. Analyse lexicale ]
2. Analyse syntaxique ] Phases d'analyse
3. Analyse sémantique ]
4. Génération du code intermédiaire ]
5. Optimisation du code intermédiaire ] Phases de synthèse
6. Génération du code objet (exécutable) ]
### Compilateur : Phases d'analyse
##### Analyse lexicale
- Consiste à lire le texte source (char par char), et produit une **chaine d'instructions** séparées par un caractère particulier appelé **séparateur**
- Former des unités lexicales appelées **lexèmes**
- Eliminer le informations inutiles (commentaires, etc)
- Présenter une chaine d'entree à l'analyseur syntaxique
Un **lexème** peut être défini comme une unité propre à un langage considéré:
- mots-clés, les identificateurs, les séparateurs, etc
- il y a correspondance avec la table des symboles
On peut distinguer 2 types de lexèmes (ex. Fortran)
1. mots spécifiques du langage (if, for, struct, ...)
2. identificateurs (
##### Analyse syntaxique
- Consiste à prélever des instructions de la chaine délivrée par l'analyseur lexical et déterminer si chacune est conforme aux **règles de syntaxe** du langage considéré.
- Vérification en construisant l'**arbre syntaxique** de l'instruction à analyser
- Les feuilles de l'arbre doivent être les **lexèmes** consistuant l'instruction
- Pour construire l'arbre, l'analyseur syntaxique dispose de **règles de syntaxe** (grammaire) du langage considéré
##### Analyse sémantique
- Destinée à la détection d'erreurs sur la manipulation des objets du langage de programmation, et en particulier au **contrôle de types**
- **Exemple**: contrôle à travers l'arbre syntaxique, fourni par l'analyseur syntaxique, si chaque opérateur est appliqué à de opérandes ayant les types permis par la spécification du langage considéré
- Elle n'existe pas dans tous les compilateurs; apparue avec les langages typés (Pascal)
### Compilateur : Phases de synthèse
##### La génération du code intermédiaire
- Utilisation des variables intermédiaires
- Choix de l'ordre pour faire le calcul
##### L'optimisation du code intermédiaire
- Amélioration du code intermédiaire
- Réduction du nombre de variables de d'instructions
##### La génération du code cible
- Choix des emplacements mémoire pour les variables
- Assignation des variables aux registres
### Compilateur : Phases
##### La gestion des erreurs
- ANalyse lexicale: caractère illégal, identificateur trop long, nombre illégal
- Analyse syntaxique: parenthèses manquantes au sens général( (), begin, etc)
- Analyse sémantique: opérateur incompatible avec le type de l'objet considéré, dépassement d'intervalle, division par 0
- Génération du code cible: dépassement de capacité, etc
- Table des symboles: double déclaration
##### La génération de la table des symboles
- Enregistre les identificateurs et les attributs (emplacement mémoire, typage, etc)
- Chaque identificateur (variable) a une entrée dans la table des symboles
- L'analyseur lexical crée une entrée dans la table des symboles à chaque fois qu'il rencontre un nouvel identificateur
### Outils pour la compilation
##### Correction
- Entrée invalide détectée ?
- Sortie conforme aux attentes ?
- Outil de prédilection = **théorie des langages**
##### Efficacité
- Faut-il attendre le résultat de la compilation ?
- Outil de prédilection = **algorithmique**
##### Bonne conception du logiciel
- Logiciel facile à modifier/étendre ?
- Outil de prédilection = **Génie Logiciel (GL)**
### Thérie de langages pour la compilation ?
Permet de définir rigoureusement et reconnaitre algorithmiquement (pour les langages source et cible):
- Leur **vocabulaire** ou **lexique** : les mots autorisés
- analyse lexicale
- automates à nombre fini d'états
- Leur **syntaxe**: la structure des phrases autorisées:
- analyse syntaxique
- automates à pile, grammaires algébriques
- Leur **sèmantique**: la signification des phrases autorisées
- analyse sémantique
- grammaires attribuées
### Programmation et modalités de contrôle
Programme
- Introduction
- Langages
- Grammaires
- Automates finis
- Expressions régulières
- ...
Modalités de contrôle des connaissances:
- Contrôle continue écrit = 30%
- Examen écrit = 70%