P 4 : Analyse syntaxique

Download Report

Transcript P 4 : Analyse syntaxique

L’analyse syntaxique
Pr ZEGOUR DJAMEL EDDINE
Ecole Supérieure d’Informatique (ESI)
http://zegour.esi.dz/
email: [email protected]
L’analyse syntaxique : Rappel

Reconnaît les phrases du langage conformément à une grammaire.

Récupère les unités lexicales produites par le scanner et vérifie que
leurs agencements forment des phrases correctes.

Le scanner devient ainsi un sous programme de l’analyseur syntaxique

Si la grammaire est LL(1), on peut alors appliquer un type particulier
d’analyse syntaxique : descente récursive
L’analyse syntaxique : Grammaire du langage
Z minimal
Structure
<Algo Z>

[ ~Soit|Soient~ <Ps> ] Debut <Lis> Fin [;]
<Ps>
<S>


<S>;{ [~Soit|Soient~] <S>;}*
<Li>[Sep <Typ> ~]
<Li>
< Lis >


Idf {, Idf}*
< Inst > { ; < Inst > }*
<Typ>

Entier
L’analyse syntaxique : Grammaire du langage
Z minimal
Instructions
<Inst>

Idf := <Exp> |
Lire ( Idf {, Idf }* ) |
Ecrire (<Exp> {,<Exp>}* )




<Exps>[ Opr <Exps>]
[Sign] <Terme> { Opa <Terme> }*
<Facteur>{Opm <Facteur>}*
Idf | Cste | ( <Exp>)
Expressions
<Exp>
<Exps>
<Terme>
<Facteur>
Sign dans {+,-}
L’analyse syntaxique : Vérification de la
propriété LL(1)

Sachant qu’aucune production ne dérive la chaîne vide, il suffit de
vérifier pour chaque non terminal
- Déterminer les premiers des productions
- Vérifier que leur intersection est vide
L’analyse syntaxique : Modules de base
utilisés

Scan (Syn, Sem)
Automate délivrant la prochaine unité lexicale

Check(Code, n)
Si Syn = Code
Scan(Syn, Sem) // Avancer
Sinon
Error(n) // Symbole attendu non trouvé
Fsi

Error( n)
Afficher le message d’erreur correspondant à n
L’analyse syntaxique : Forme d’une
procédure récursive
NT

1 | 2 | ….| n
Forme ( en Pascal)
Procedure NT ;
CASE
Prem(1) : Traiter la production 1
Prem(2) : Traiter la production 2
…
Prem(n) : Traiter la production n
ELSE
Retour(Si NT peut produire le vide) ou
Erreur (Sinon)
END
L’analyse syntaxique : Exemple (Pascal)
<Inst>

Idf := <Exp> | Lire ( Idf {, Idf }* ) |
Ecrire(<Exp> {,<Exp>}* )
Procedure INST ;
CASE
Code_idf : Begin Check(Code_idf, n1); Check(Code_aff, n2); EXP End
Code_lire :
Begin
Check(Code_lire, n3); Check(Code_paro, n4); Check(Code_idf, n1);
While (Syn=Code_virgule) Do
Begin Scan; Check(Code_idf, n1) End;
End
Code_ecrire:
Begin
Check(Code_ecrire, n5); Check(Code_paro, n4);
EXP;
While (Syn=Code_virgule) Do
Begin Scan; EXP End;
End
END
L’analyse syntaxique : Analyseur syntaxique
C’est l’ensemble des procédures récursives
Une procédure par non terminal

La procédure associée à l’axiome constitue le programme principal.
C’est elle qui est appelée la première fois.

En général, s’il y a n non terminaux,
il y a n procédures récursives parallèles qui s’entre appellent
L’analyse syntaxique : Considérations
Les procédures sont dépourvues de paramètres.
Syn et Sem : variables globales pour l’analyseur syntaxique
Afin de simplifier l’analyseur
nous optons pour l’arrêt prématuré de la compilation dés qu’une erreur
est rencontrée.
L’analyse syntaxique : Test
Programmer toutes les procédures pour le langage Z minimal.
Écrire des programmes conformément au langage minimal et les tester par
l’analyseur syntaxique