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