Compil 4

Vous aimerez peut-être aussi

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 11

Notions de base

• Tout langage de programmation possède des règles qui indiquent


la structure syntaxique.

• La syntaxe d’un langage peut être décrite par une grammaire.

• La grammaire décrit comment les unités lexicales doivent être


agencées.

• Un analyseur syntaxique est donc un programme qui ‘‘n’extrait


aucune information de la chaîne analysée’’, il ne fait qu’accepter
ou rejeter cette chaîne.
Principe de base
• Construire un arbre de dérivation dont la liste des feuilles
est la chaîne traitée.

• Cet arbre est une première information extraite de la chaîne


source : un début de compréhension de ce que le texte
signifie.

• Outre la reconnaissance, l’analyseur syntaxique doit


construire l’arbre syntaxique.

• IL y’a deux méthodes : l’analyse descendante et l’analyse


ascendante.
G =(VT,VN,S0,P)

N’apparaissent pas dans le langage


Mais dans les règles de la grammaire
Axiome de G
L(G)={phrase/S0G phrase}
Exemple:
Des parenthèses et des crochets correctement équilibrés en altenance,
on pourra utiliser les règles de productions suivantes:
Paren  ‘(‘ Croch ‘)’ | ‘(‘ ‘)’ Croch  ‘[‘Paren ‘]’ | ‘[‘ ‘]’
On peut ajouter un non terminal Début pour permettre de commencer
indifféremment par les crochets ou les parenthèses :
Début  Paren | Croch
Exemple : 1. expression → expression ‘+’ terme
Axiome 2. | terme
3. terme → terme ‘*’ facteur
4. | facteur
5. facteur → nombre
6. | identificateur
7. | ‘(‘ expression ‘ )’

Considérons la chaîne ‘‘60 * vitesse + 200’’ qui, une fois lue par l'analyseur lexical,
se présente ainsi : nombre ‘*’ identificateur ’+’ nombre

On appliquant les règles 1,2,3,4,5,6,4,5; on arrive à dériver cette phrase.

expression
1. expression "+" terme
2. terme "+" terme
3. terme "*" facteur "+" terme 5. nombre "*" facteur "+" terme
4. facteur "*" facteur "+" terme 6. nombre "*" identificateur "+" terme
4.nombre "*" identificateur "+" facteur
5. nombre "*" identificateur "+" nombre
expression
expression "+" terme nombre "*" facteur "+" terme
terme "+" terme nombre "*" identificateur "+" terme
terme "*" facteur "+" terme nombre "*" identificateur "+" facteur
facteur "*" facteur "+" terme nombre "*" identificateur "+" nombre

Cette dérivation est appelée une dérivation à gauche : le non-terminal le plus


à gauche est le premier qui réecrit.

On peut représenter graphiquement cette dérivation :


Qualités des grammaires:
• Une grammaire doit avoir quelques qualités pour que la
construction de l’arbre de dérivation soit possible et utile.

• Grammaire ambigüe:

– G est une grammaire ambigüe s’il existe une phrase de L(G) qui
plus qu’un arbre de dérivation.

– Exemple classique du if-then-else


– Solution : chercher une grammaire équivalente.(pas de méthode!)
Qualités des grammaires:
• Grammaire récursive à gauche:

– Si elle contient une production de la forme A Aa où A un


non-terminal et une chaîne quelconque.

– Solution :

On remplace A Aa | b par les deux productions:

A b A’ et A aA’ | e
expression → expression ‘+’ terme | expression ‘-’ terme | terme
terme → terme ‘*’ facteur| terme ‘/’ facteur | facteur
facteur → nombre | identificateur| ‘(‘ expression ‘ )’
gr
Grammaire équivalente non récursive à gauche :
Qualités des grammaires:
• Epsilon production:

La production finexp ‘+’ terme finexp | e pose un problème

lors de l’écriture d’un analyseur syntaxique puisqu’elle

impliquera « une manière de reconnaitre finexp consiste à ne

rien reconnaitre! »

Solution - on impose la règle suivante : Dans une dérivation

d’un non-terminal , une e-production ne peut être choisie que

lorsqu’aucune autre production n’est applicable.


Qualités des grammaires:
• Factorisation à gauche:
On cherche à écrire des analyseurs prédictifs (le choix entre productions
ayant le même membre gauche doit se faire sans ambigüité).
-Solution :
On remplace A a b1 | ab2 par les deux productions:
A a A’ et A’ b1 | b2
(si les symboles susceptibles de commencer une réecriture de b1
sont différents de ceux pouvant commencer une réecriture de b2 )

instr Si → si expr alors instr | si expr alors instr sinon instr


Devient :
instrSi → si expr alors instr finInstrSi
finInstrSi → sinon instr | ε

Vous aimerez peut-être aussi