Chapitre 3 Syntaxe et sémantique.

Slides:



Advertisements
Présentations similaires
Sintaks : Tentative de guide de mise en œuvre Michel Hassenforder.
Advertisements

L-System et modélisation de plantes…
Vue générale Pr ZEGOUR DJAMEL EDDINE
Affichage interactif, bidimensionnel et incrémental de formules mathématiques Hanane Naciri et Laurence Rideau INRIA Sophia Antipolis CARI'2000.
Spécification et qualité du logiciel
Calculs de complexité d'algorithmes
Algorithmique Résume.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Chap 1 Grammaires et dérivations.
Introduction : Compilation et Traduction
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
IFT313 Introduction aux langages formels
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Les bases de l’Algorithmique
IFT313 Introduction aux langages formels
Introduction : Compilation et Traduction
Partie 1 Etude de l'existant
Récursivité.
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
OCaml – Les arbres L3 MI.
Analyse lexicale Généralités Expressions rationnelles Automates finis
IFT313 Introduction aux langages formels
Algorithmique et Programmation
Programmation multimédia 3
IFT313 Introduction aux langages formels
Complément Le diagramme des classes
Examen de compilation 4ème année - A
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
IFT313 Introduction aux langages formels Froduald Kabanza Département dinformatique Université de Sherbrooke Grammaires attribuées.
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
1 CSI3525: Concepts des Languages de Programmation Notes # 4: Description Semantique des Languages.
1 CSI3525: Concepts des Languages de Programmation Notes # 3: Description Syntaxique des Languages.
CSI3525: Concepts des Languages de Programmation
IFT 6800 Atelier en Technologies d’information
Chapitre 9 Les sous-programmes.
Chapitre 8 Structure de contrôle.
Expressions et affectations
Analyse lexicale et syntaxique
Partie II Sémantique.
Les langages Syntaxe et sémantique Grammaires Sémantique axiomatique.
Description des langages
Le diagramme de séquences
Inéquations du premier degré à une inconnue
Atelier de formation : MAT optimisation II (les graphes).
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI
1 GPA435 Systèmes d’exploitation et programmation de système Copyright, 2000 © Tony Wong, Ph.D. Chapitre 8 Filtres UNIX.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Introduction.
Expressions régulières et hash tables
chapitre -1- OPERATIONS [B] REGLES DE PRIORITE (f n°103) lundi 15 septembre 2014  rappels de 6°  du nouveau en 5°  applications  exercices  Page.
Paradigmes des Langages de Programmation
Paradigmes des Langages de Programmation
Algorithmique Les structures Rappel L'enchaînement séquentiel
Quel est l’intérêt d’utiliser le diagramme de Gantt dans la démarche de projet A partir d’un exemple concret, nous allons pouvoir exploiter plusieurs parties.
INTRODUCTION.
Cours 1 1 Java. Cours 1 2 Plan général 1.Introduction 2.Les types primitifs, évaluation d’expressions 3.Instructions for, if…. 4.Introduction de l’objet,
Université de Sherbrooke
Algorithmique et programmation (1)‏
Un survol du language C.
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Le langage Z minimal Pr ZEGOUR DJAMEL EDDINE
Le langage Racket (Lisp)
ISBN Chapitre 10 L'implémentation des sous- programmes.
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.
Objets et Actions Élémentaires.
Introduction au langage C
Transcription de la présentation:

Chapitre 3 Syntaxe et sémantique

Chapitre 3: Sujets Introduction Décrire la syntaxe Méthodes formelles de description Grammaires avec attributs Décrire la signification des programmes: la sémantique

Introduction Syntaxe: la forme ou la structure des expressions, énoncés, et autres composantes d'un langage Sémantique: la signification des expressions, énoncés, et autres composantes La définition d'un langage est donnée par sa syntaxe et sa sémantique Qui utilise la définition? Les concepteurs Ceux qui effectuent l'implémentation Les programmeurs (usagers)

Décrire la syntaxe: Terminologie Un mot est une chaîne de caractère sur un alphabet donné Un langage est un ensemble de mots Un lexème est la plus petite unité lexicale d'un langage (e.g., *, somme, begin). On peut voir un programme comme une suite de lexèmes. Les lexèmes sont divisés en groupes appelés token (e.g., identificateur, opérateur)

Décrire la syntaxe: exemple index = 2 * count + 17; lexèmes tokens index identificateur = op_affectation 2 litéral_int * op_mult count identificateur + op_add 17 litéral_int ; point_virgule

Définition formelle des langages Reconnaisseurs Programme qui lit un mot d'entrée et décide si le mot appartient au langage Exemple: l'analyseur syntaxique d'un compilateur Chapitre 4 Générateurs Système permettant de générer les mots du langage On peut déterminer si la syntaxe d'un mot appartient au langage en le comparant à la structure du générateur. Exemple: Grammaires formelles

Méthodes formelles pour décrire la syntaxe Grammaires hors-contextes Méthode la plus utilisée pour décrire la syntaxe d'un langage Grammaire HC étendues Améliore la lisibilité et la facilité d'écriture Grammaires et reconnaisseurs

Grammaire et forme de Backus-Naur Grammaires génératives Développées par Noam Chomsky au milieu des années 50 Les générateurs de langages servent à décrire la syntaxe des langues naturelles Définie une classe de langages: les langages hors-contextes

Forme de Backus-Naur (BNF) métalangage utilisé pour décrire un autre langage Inventé par John Backus pour décrire Algol 58 (simplifié par la suite par Peter Naur) équivalent aux grammaires HC

Introduction aux grammaires Deux types de symboles: Terminaux: lexèmes ou tokens Non-terminaux: variables Grammaire: collection de règles permettant de substituer un non- terminal par une suite de symboles (terminaux et non- terminaux)

Les règles Une règle possède une partie gauche et une partie droite (séparées par une flèche) La partie droite est un non-terminal La partie gauche est une suite de symboles (terminaux et non-terminaux) Une grammaire est un ensemble fini de règles et possède une variable particulière que l'on appelle symbole de départ. Une variable (ou non-terminal) peut apparaître à la gauche de plusieurs règles <stmt> --> <single_stmt> <stmt> --> begin <stmt_list> end

Description d'une liste Une liste de longueur variable peut être décrite en utilisant la récursion: <stmt_list>  <single_stmt> | <single_stmt> ; <stmt_list> Une dérivation est l'application répétée de règles qui commence avec le symbole de départ et se termine avec une séquence de terminaux.

Exemple d'une grammaire <program>  <stmts> <stmts>  <stmt> | <stmt> ; <stmts> <stmt>  <var> = <expr> <var>  a | b | c | d <expr>  <term> + <term> | <term> - <term> <term>  <var> | const

Exemple de dérivation <program>  <stmts> <stmts>  <stmt> | <stmt> ; <stmts> <stmt>  <var> = <expr> <var>  a | b | c | d <expr>  <term> + <term> | <term> - <term> <term>  <var> | const <program> => <stmts> => <stmt> => <var> = <expr> => a =<expr> => a = <term> + <term> => a = <var> + <term> => a = b + <term> => a = b + const

Dérivation À chaque étape d'une dérivation, on obtient un mot appelé forme sententielle. Une phrase est une forme sententielle ne contenenant que des terminaux Une dérivation à gauche (leftmost derivation) en est une où, à chaque étape, on applique une règle à la variable la plus à gauche de la forme sententielle.

Arbre syntaxique (Parse Tree) Représentation d'une dérivation <program> <stmts> <stmt> <var> = <expr> a <term> + <term> <var> const b

Ambiguïté dans une grammaire Une grammaire est ambiguë s'il existe une forme sententielle pouvant être générée par deux arbres syntaxiques différents.

Exemple d'ambiguïté <expr>  <expr> <op> <expr> | const <op>  / | -

Exemple d'ambiguïté <expr>  <expr> <op> <expr> | const <op>  / | - <expr> <expr> <op> <expr> <expr> <op> <expr> const - const / const

Exemple d'ambiguïté <expr>  <expr> <op> <expr> | const <op>  / | - <expr> <expr> <expr> <op> <expr> <expr> <op> <op> <expr> <expr> <op> <expr> <expr> <op> <expr> const - const / const const - const / const

Enlever l'ambiguïté d'une grammaire On doit modifier la grammaire pour représenter la priorité des opérateurs: <expr>  <expr> - <term> | <term> <term>  <term> / const| const <expr> <expr> - <term> <term> <term> / const const const

Associativité des opérateurs L'associativité des opérateurs peut aussi être représenté par la grammaire: <expr> -> <expr> + <expr> | const (ambiguë) <expr> -> <expr> + const | const (non ambiguë) <expr> <expr> <expr> + const <expr> + const const

Grammaires HC étendues Parties optionnelles placées entre crochets [ ] <selection>  if (<expr>) <statement> [else <statement>] Alternatives placées entre parenthèses et séparées par une barre verticale <term>  <term> (+|-) const Répétitions (0 où plus) sont placées entre accolades { } <ident>  letter {letter|digit}

Grammaires: HC vs HC étendue <expr>  <expr> + <term> | <expr> - <term> | <term> <term>  <term> * <factor> | <term> / <factor> | <factor> HC étendue <expr>  <term> {(+ | -) <term>} <term>  <factor> {(* | /) <factor>}

Grammaires attribuées Les grammaires hors-contextes ne peuvent pas décrire tous les aspects syntaxiques d'un langage de programmation. Exemple 1: En Java un point-flottant ne peut pas être affecté dans un entier. Si on tenait compte de toutes les contraintes de ce type, alors on obtiendrait une grammaire énorme et inutilisable. Exemple 2: Il est impossible avec une grammaire HC de préciser qu'une variable doit être déclarée avant d'être utilisée.

Sémantique Contrairement à la syntaxe, il n'y a pas de formalisme largement répandu et accepté permettant de décrire la sémantique d'un langage de programmation. 3 principales méthodes: Sémantique opérationelle: On traduit les instructions dans un langage clair s'exécutant sur une machine virtuelle. Sémantique axiomatique: On utilise la logique mathématique pour indiquer la signification des instruction. Aussi utilisé pour démontrer l'exactitude des programmes. Sémantique dénotationelle: La plus rigoureuse des méthodes. Utilise la théorie des fonctions récursives.