Les langages Syntaxe et sémantique Grammaires Sémantique axiomatique.

Slides:



Advertisements
Présentations similaires
Le Nom L’adjectif Le verbe Objectif: Orthogram
Advertisements

ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
LES NOMBRES PREMIERS ET COMPOSÉS
[number 1-100].
M. SAILLOUR Lycée Notre Dame du Kreisker St Pol de Léon
Licence pro MPCQ : Cours
Fonctions & procédures
Classe : …………… Nom : …………………………………… Date : ………………..
Calculs de complexité d'algorithmes
Les numéros
Systèmes Experts implémentation en Prolog
Chap 1 Grammaires et dérivations.
INTRODUCTION.
Introduction : Compilation et Traduction
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Description du fonctionnement d'un système 1 Clic Clic
JOME, un Composant Logiciel pour le Télé-Enseignement des Mathématiques via le WEB, Compatible OpenMath et MathML Laurent DIRAT OVE / I3S-UNSA.
IFT313 Introduction aux langages formels
Mr: Lamloum Med LES NOMBRES PREMIERS ET COMPOSÉS Mr: Lamloum Med.
Développement d’applications web
IFT313 Introduction aux langages formels
Interagir avec un objet mixte Propriétés physiques et numériques Céline Coutrix, Laurence Nigay Équipe Ingénierie de lInteraction Homme-Machine (IIHM)
Introduction : Compilation et Traduction
1 Cours numéro 3 Graphes et informatique Définitions Exemple de modélisation Utilisation de ce document strictement réservée aux étudiants de l IFSIC.
Partie 1 Etude de l'existant
Expressions et assignations
Les structures de données arborescentes
Analyse lexicale Généralités Expressions rationnelles Automates finis
Cours de physique générale I Ph 11
Sémantique axiomatique
GRAM 1 CE2 Je sais transformer une phrase affirmative en phrase négative.
1.2 COMPOSANTES DES VECTEURS
Algorithmique et Programmation
Tableaux de distributions
LES NOMBRES PREMIERS ET COMPOSÉS
VOC 1 CE2 Je sais utiliser des mots de la vie quotidienne.
Examen de compilation 4ème année - A
1.3 COORDONNÉES DES POINTS
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Automates à pile LR Notion de poignée.
Expressions régulières et hash tables
Représentation des systèmes dynamiques dans l’espace d’état
Représentation des systèmes dynamiques dans l’espace d’état
IFT Complexité et NP-complétude
DUMP GAUCHE INTERFERENCES AVEC BOITIERS IFS D.G. – Le – 1/56.
1 CSI3525: Concepts des Languages de Programmation Notes # 3: Description Syntaxique des Languages.
CSI3525: Concepts des Languages de Programmation
1.1 LES VECTEURS GÉOMÉTRIQUES
Chapitre 3 Syntaxe et sémantique.
Partie II Sémantique.
Description des langages
Introduction à l’algèbre
Résoudre une équation du 1er degré à une inconnue
Atelier de formation : MAT optimisation II (les graphes).
ASI 3 Méthodes numériques pour l’ingénieur
Elaboré par M. NUTH Sothan 1. 2 Soit x, y et z des coordonnées cartésiennes à 3 dimension. G un ensemble de points dans le plan (u, v). Déf. : On appelle.
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
Expressions régulières et hash tables
Equation différentielle de 2ème ordre
Paradigmes des Langages de Programmation
Paradigmes des Langages de Programmation
LES PILES ET FILES.
Exercice de vérification 1 p
INTRODUCTION.
Les Chiffres Prêts?
Chapitre 3 :Algèbre de Boole
Partie II: Temps et évolution Energie et mouvements des particules
Algorithmes et Programmation
Chap 1 Grammaires et dérivations.
CSI 3525, Grammaires, page 1 Description des langages –Syntaxe et sémantique –Grammaires –Sémantique axiomatique.
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Transcription de la présentation:

Les langages Syntaxe et sémantique Grammaires Sémantique axiomatique

- Syntaxe: le format du langage - Sémantique: la signification des programmes - Analyse des langages - Hiérarchie des langages formels

Syntaxe La syntaxe d’un langage détermine comment les programmes sont construits à partir des éléments de base (mots clés, identificateurs, nombres, parenthèses, etc.). Un programme syntaxiquement correct peut ne pas être acceptable, ou peut fonctionner d’une façon autre que celle voulu.

“Colorless green ideas sleep furiously” Illustre phrase composee par Noam Chomsky en 1957 Example de phrase dont la grammaire est correcte mais dont la sémantique est nonsensical, et donc sans signification

Exercise (5 minutes): Composez une phrase: grammatiquement correcte qui ne veut rien dire

Syntaxe Formelle Une syntaxe formelle est un système décrivant la structure exacte des programmes. Ceux-ci incluent les grammaires, BNF, diagrammes syntaxiques (graphes de syntaxe).

Grammaires Il existe un nombre infini de programmes possible,mais chacun est fini et sa syntaxe doit pouvoir être vérifiée en temps fini. Une grammaire permet une description finie de langages infinies.

Sémantique La sémantique d’un langage détermine le sens des éléments de base et de leurs combinaisons: Comment la signification d’un programme est déterminée par la signification de ses fragments? L’effet des instructions composées (ex: boucles, "if") devraient dépendre uniquement de l’effet des instructions élémentaires qu’elles contiennent (ex: assignations).

Quelle est l’interpretation s/mantique de la phrase: “Cette phrase est fausse”

Méthodes de description sémantique Sémantique opérationnelle Les instructions sont décrite de façon informelle, en terme d’opérations simple, ayant un effet sur l’état de la machine. Sémantique dénotationelle Les instructions sont mis en correspondance avec des objet mathématiques pouvant être manipulés rigoureusement: Un programme décrit une fonction: données  résultats Sémantique axiomatique L’inférence est utilisé pour vérifier que le programme satisfait les postconditions en partant des préconditions Un programme décrit une relation: données  résultats

Analyse lexicale L’analyse lexicale pré-traite le fichier contenant le code source: Reconnaît les éléments lexicaux (mots- clés, noms prédéfini, identificateurs, nombres, parenthèses, opérateurs, …). - enlève les espaces. Ceci rend la traduction plus simple en éliminant les détails de bas niveau.

Analyse syntaxique (parsing) Le programme est il correct ? Une représentation de la structure syntactique est construite pour les programmes correctes

Analyse syntaxique L’analyse syntactique est une composante essentielle de l’implémentation d’un langage de programmation. [ La génération syntactique, également basée sur les grammaires, fait l’inverse: passe de la structure syntactique au code. Important en technologie des langages, mais pas pour les langages de programmation.]

Lex et Yacc sont des outils de génération d'analyseurs lexicaux (Lex) et syntaxiques (Yacc) en langage C.

Langage Est un ensemble de phrases. Phrase == séquence d’éléments de base, places en accord avec des règles bien défini. En langage naturel, l’idée de phrase est bien connue.

Pour les langages de programmation, différentes structures syntaxiques peuvent être considères comme des phrases. Par exemple, dans l’ensemble de toutes les expressions, chaque expression valide est une phrase. Dans l’ensemble de tout les programmes, chaque programme complet et valide est une phrase...

Une hiérarchie des langages formels Les langages formels sont classés selon leur complexité. Une hiérarchie a 4 niveaux, du plus simple au plus compliqué: régulier < indépendant du contexte < contextuel (dépendant du contexte) < récursivement énumérable. Les grammaires sont également classifiées de cette manière.

Une hiérarchie des langages formels (2) Les langages de programmation ont habituellement: Une syntaxe indépendante du contexte, Une sémantique contextuelle. Indépendance du contexte (important pour l’analyse syntactique) signifie que les fragments qui sont analysés ne dépendent pas de d’autres fragments du même programme. Par exemple, l’occurrence d’une variable n’est pas reliée à sa déclaration (la validité de la syntaxe du programme ne dépend pas de la relation entre les deux). Un appel à une méthode et la définition de cette méthode sont analysé séparément.

Grammaires formelles - Concepts des grammaires formelles - Un exemple de grammaire en BNF - Dérivation de l’arbre syntaxique - Ambiguïté des grammaires

Quatre composantes des grammaires formelles Symboles terminaux : Les éléments du langage (comme les noms de variables en Java, ou les mots en français). Symboles non-terminaux : symboles auxiliaires dénotant la sorte de construction (par exemple: boucle, expression_booléenne). Le but (symbole de départ) : dénote n’importe quelle phrase. Productions = Les règles de réécriture utilisés pour reconnaître et générer des phrases

Deux façons de réécrire À partir du but (symbole de départ), produire des approximations more de plus en plus spécifiques d’une phrase, en remplaçant les symboles non-terminaux par leur définition. Réduire une phrase en un format de plus en plus général, en remplaçant les définitions par des symboles non- terminaux, et en atteignant le but (revient au même). Les productions ce qui différencient les grammaires régulières, indépendantes du contexte ou contextuelles.

Exemple: Une grammaire pour les expressions Sept symboles terminaux: + - * ( ) x y Quatre non-terminaux: ‹expr› ‹term› ‹factor› ‹var› On peut nommer ces symboles comme on veut: comme quand on choisit les noms de variables dans un programme, il est bon de choisir des symboles non-terminaux ayant un nom qui aide à comprendre leur sens. But/symbole de départ: ‹expr›

Notation Les ‘< >’ servent à distinguer les symboles non- terminaux des terminaux. Coté gauche  Coté droit signifie: « Le coté droit consiste en ce qui se trouve du coté droit". Une barre ‘|’ sépare les différent coté droit possibles pour un coté gauche particulier.

Productions de notre grammaire ‹expr›  ‹term› | ‹expr› + ‹term› | ‹expr› - ‹term› ‹term›  ‹factor› | ‹term› * ‹factor› ‹factor›  ‹var› | ( ‹expr› ) ‹var›  x | y

De haut en bas et de bas en haut Comme mentionne précédemment, pour une phrase , les productions peuvent être appliqués de deux façons De haut en bas: Dérive  a partir du but (symbole de départ).  sera alors un exemple de l’expression. De bas en haut: Réduit  aux but.

Dérivations Prenons comme exemple la suite de symboles terminaux suivante: ( x - y ) * x + y [Nous allons montrer que c’est une expression – qu’elle suit la syntaxe des expressions] Deux dérivations sont présentées dans les pages suivantes. À chaque ligne, la partie de couleur est impliquée dans la réécriture de la prochaine ligne, selon une production de la grammaire.

Dérivation de haut en bas ‹expr›  ‹expr› + ‹term›  ‹term› + ‹term›  ‹term› * ‹factor› + ‹term›  ‹factor› * ‹factor› + ‹term›  ( ‹expr› ) * ‹factor› + ‹term›  ( ‹expr› - ‹term› ) * ‹factor› + ‹term›  ( ‹term› - ‹term› ) * ‹factor› + ‹term›  ( ‹factor› - ‹term› ) * ‹factor› + ‹term›  ( ‹var› - ‹term› ) * ‹factor› + ‹term›  ( x - ‹term› ) * ‹factor› + ‹term›  ( x - ‹factor› ) * ‹factor› + ‹term›  ( x - ‹var› ) * ‹factor› + ‹term›  ( x - y ) * ‹factor› + ‹term›  ( x - y ) * ‹var› + ‹term›  ( x - y ) * x + ‹term›  ( x - y ) * x + ‹factor›  ( x - y ) * x + ‹var›  ( x - y ) * x + y

Dérivation de bas en haut ( x - y ) * x + y  ( ‹var› - y ) * x + y  ( ‹factor› - y ) * x + y  ( ‹term› - y ) * x + y  ( ‹expr› - y ) * x + y  ( ‹expr› - ‹var› ) * x + y  ( ‹expr› - ‹factor› ) * x + y  ( ‹expr› - ‹term› ) * x + y  ( ‹expr› ) * x + y  ‹factor› * x + y  ‹term› * x + y  ‹term› * ‹var› + y  ‹term› * ‹factor› + y  ‹term› + y  ‹expr› + y  ‹expr› + ‹var›  ‹expr› + ‹factor›  ‹expr› + ‹term›  ‹expr›

L’un à coté de l’autre ‹expr›  ‹expr› + ‹term›  ‹term› + ‹term›  ‹term› * ‹factor› + ‹term›  ‹factor› * ‹factor› + ‹term›  ( ‹expr› ) * ‹factor› + ‹term›  ( ‹expr› - ‹term› ) * ‹factor› + ‹term›  ( ‹term› - ‹term› ) * ‹factor› + ‹term›  ( ‹factor› - ‹term› ) * ‹factor› + ‹term›  ( ‹var› - ‹term› ) * ‹factor› + ‹term›  ( x - ‹term› ) * ‹factor› + ‹term›  ( x - ‹factor› ) * ‹factor› + ‹term›  ( x - ‹var› ) * ‹factor› + ‹term›  ( x - y ) * ‹factor› + ‹term›  ( x - y ) * ‹var› + ‹term›  ( x - y ) * x + ‹term›  ( x - y ) * x + ‹factor›  ( x - y ) * x + ‹var›  ( x - y ) * x + y ( x - y ) * x + y  ( ‹var› - y ) * x + y  ( ‹factor› - y ) * x + y  ( ‹term› - y ) * x + y  ( ‹expr› - y ) * x + y  ( ‹expr› - ‹var› ) * x + y  ( ‹expr› - ‹factor› ) * x + y  ( ‹expr› - ‹term› ) * x + y  ( ‹expr› ) * x + y  ‹factor› * x + y  ‹term› * x + y  ‹term› * ‹var› + y  ‹term› * ‹factor› + y  ‹term› + y  ‹expr› + y  ‹expr› + ‹var›  ‹expr› + ‹factor›  ‹expr› + ‹term›  ‹expr›

Est-ce si facile? Pour les deux dérivations, il faut deviner à chaque étape laquelle des productions devrait être utilisée. La stratégie est au cœur des algorithmes d’analyse syntaxique. Idéalement, ont voudrais toujours deviner correctement, mais en pratique il faut tenter une production, et si elle échoue, retourner en arrière et en choisir une autre. Les deux approches ont reconnue la suite de symboles ( x - y ) * x + y comme une expression bien formée de la grammaire.

Arbre syntaxique (parse trees) Le résultat des deux dérivations peut être résumé par le même arbre syntaxique <expr> <term> + <factor> * ( ) — <var> y x L’arbre ne dépend pas de l’ordre dans lequel les productions ont été appliquées lors de la dérivation.

Ambiguïté ‹E›  ‹E› + ‹E› | ‹E› * ‹E› | ‹N› Une grammaire est ambiguë quand une expression de cette grammaire possède plus d’un arbre de dérivation ayant une structure différente. Par exemple, voici une grammaire pour les expressions arithmétiques: ‹E›  ‹E› + ‹E› | ‹E› * ‹E› | ‹N› où ‹N› indique un entier. L’expression 6 * 17 + 23 peut engendrer deux arbres de dérivation.

Deux arbres syntaxiques... ‹E›  ‹E› + ‹E› | ‹E› * ‹E› | ‹N› 6 * 17 + 23 <E> * + <N> 6 17 23 <E> + * <N> 23 6 17

…leur signification... * + 6 17 23  6 * ( 17 + 23 )  ( 6 * 17 ) + 23 Ces deux arbres résultent en des évaluations différentes! Les Ambiguïtés doivent être évites

... Et quoi faire des ambiguïtés Au lieu, on aurait dû définir une grammaire a deux niveaux, pour ne pas avoir + et * au même niveau. Un expression ‹E› est une somme de termes ‹T›. Un terme est un produit de nombres ‹N›. ‹E›  ‹T› | <E> + <T> ‹T›  ‹N› | <T> * <N>

‘long phrase’ the dog the dog that chased the cat the dog that chased the cat that caught the mouse the dog that chased the cat that caught the mouse that chewed the shoe the dog that chased the cat that caught the mouse that chewed the shoe that squashed the fruit the dog that chased the cat that caught the mouse that chewed the shoe that squashed the fruit that stained the chair et ainsi de suite...

... Une grammaire pour les ‘long phrases’ the <noun> [ that <verb> <long phrase> ] <noun>  cat | chair | dog | fruit | mouse | shoe | ... <verb>  caught | chased | chewed | squashed | stained | ...

Une ‘clause’ the dog that chased the cat that caught the mouse that chewed the shoe that squashed the fruit that stained the chair grabbed the sausage that tempted the wolf that fought the fox that scared the squirrel that bit the twig that cracked the nut that hit the boy that lifted the hat

... une grammaire pour les ‘clauses’ <longPhrase> <verb> <longPhrase> <longPhrase>  the <noun> [ that <verb> <longPhrase> ] <noun>  boy | cat | ... <verb>  bit | caught | ... (Avec encore 1500 règles on aura une grammaire raisonnable pour l’anglais. )

listes en Scheme... Une liste peut être vide: () Ou une séquence d’éléments séparés par des espaces, le tout entre parenthèses: ( element ... element ) Chaque élément est soit une liste, ou une atome. Une atome est un identificateur formé de lettres minuscules. Nous supposons qu’un analyseur lexicale convertie texte un une séquence d’éléments de base : atomes et parenthèses. Exemple: ( ab ( xyz br ) () ( no ) yes )

... une grammaire pour les listes <list>  ( <elements> ) <elements>  <element> | <element> <elements> <element>  <atom> | <list> <atom>  <letter> | <letter> <atom>

Un jardin...  mur  grosse fleur  maison Les jardins sont constitués de 4 éléments:  mur  grosse fleur  petite fleur  maison De gauche a droite, le jardin contient: un mur, au moins une grosse fleure, un autre mur, des petite fleurs (plus nombreuse que les grosses), et une maison.

... quelques exemples ...  un jardin  un jardin  un jardin   un jardin

... Une grammaire pour les jardins <garden>   <largeAndSmall> <moreSmall>  <largeAndSmall>     |  <largeAndSmall>  <moreSmall>   |  <moreSmall>