From b0100aa876dc0e69c1428485582e91c42d90900b Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Fri, 20 Jan 2017 15:42:51 +0100 Subject: [PATCH] =?UTF-8?q?Cours=20th=C3=A9orie=20des=20langages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- theoriedeslangagesetcompilation/README.md | 11 ++ theoriedeslangagesetcompilation/cours/1.md | 154 +++++++++++++++++++++ 3 files changed, 166 insertions(+), 1 deletion(-) create mode 100644 theoriedeslangagesetcompilation/README.md create mode 100644 theoriedeslangagesetcompilation/cours/1.md diff --git a/README.md b/README.md index 0a44c7e..5955d83 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/theoriedeslangagesetcompilation/README.md b/theoriedeslangagesetcompilation/README.md new file mode 100644 index 0000000..0454822 --- /dev/null +++ b/theoriedeslangagesetcompilation/README.md @@ -0,0 +1,11 @@ +Théorie des langages de programmation & compilation +--------------------------------------------------- + +#### Cours + +1. [Cours 1](/cours/1.md) + +#### TDs + +#### TPs + diff --git a/theoriedeslangagesetcompilation/cours/1.md b/theoriedeslangagesetcompilation/cours/1.md new file mode 100644 index 0000000..263ea09 --- /dev/null +++ b/theoriedeslangagesetcompilation/cours/1.md @@ -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%