ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

26
ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique

Transcript of ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

Page 1: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

ISBN 0-321-49362-1

Chapitre 3

Syntaxe et sémantique

Page 2: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-2

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

Page 3: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-3

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)

Page 4: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-4

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)

Page 5: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-5

Décrire la syntaxe: exemple

index = 2 * count + 17;

lexèmes tokensindex identificateur= op_affectation2 litéral_int* op_multcount identificateur+ op_add17 litéral_int; point_virgule

Page 6: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-6

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

Page 7: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-7

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

Page 8: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-8

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

Page 9: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-9

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

Page 10: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-10

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)

Page 11: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-11

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

Page 12: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-12

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.

Page 13: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-13

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

Page 14: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-14

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

Page 15: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-15

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.

Page 16: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-16

Arbre syntaxique (Parse Tree)

• Représentation d'une dérivation

<program>

<stmts>

<stmt>

const

a

<var> = <expr>

<var>

b

<term> + <term>

Page 17: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-17

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.

Page 18: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-18

Exemple d'ambiguïté

<expr> <expr> <op> <expr> | const<op> / | -

Page 19: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-19

Exemple d'ambiguïté

<expr> <expr> <op> <expr> | const<op> / | -

<expr>

<expr> <expr>

<expr> <expr><op>

const const const- /

<op>

Page 20: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-20

Exemple d'ambiguïté

<expr> <expr> <op> <expr> | const<op> / | -

<expr>

<expr> <expr>

<expr> <expr>

<expr>

<expr> <expr>

<expr> <expr>

<op>

<op>

<op>

<op>

const const const const const const- -/ /

<op>

Page 21: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-21

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/

-

Page 22: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-22

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>

<expr> const

const

const

+

+

Page 23: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-23

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}

Page 24: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-24

Grammaires: HC vs HC étendue

• HC <expr> <expr> + <term> | <expr> - <term> | <term> <term> <term> * <factor> | <term> / <factor> | <factor>

• HC étendue <expr> <term> {(+ | -) <term>} <term> <factor> {(* | /) <factor>}

Page 25: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-25

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.

Page 26: ISBN 0-321-49362-1 Chapitre 3 Syntaxe et sémantique.

1-26

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.