Academia.eduAcademia.edu

Compilation chapitre

Chapitre 3 : Analyse Syntaxique. Programme Source Analyse lexicale Entités lexicales Analyse syntaxique Arbre Syntaxique L’analyse lexicale, a pour but à partir du programme source suite de caractères de former des entités lexicales. L’analyse syntaxique, a pour rôle de vérification de la forme ou encore de l’écriture de la suite des entités lexicales, on parlera alors de la syntaxe du langage à vérification est faite à l’aide de la grammaire spécifique au langage appelée grammaire syntaxique 1. Définition :  Définition d’une grammaire syntaxique : Une grammaire syntaxique est une grammaire formée de règles de production permettant d’engendrer tous les programmes écrites dans un langage donné.  Notation BNF : On appelle notation BNF une notation du type Non_terminal ::=alternatives. Exemple : A ::=aB/cC Exemple : Soit la grammaire de l’expression arithmétique <program> ::=<exp>  exp> ::=<term> / <exp> + <term> <term> ::= <fact> / <term> * <fact> <fact>::= i / <exp>    Remarque : Le symbole ‘ ::=’ est équivalent au symbole’ ’ Chacune des règles du type ci-dessus est appelée règle de production, la partie gauche est appelée MGP (membre gauche de production) et la partie droite MDP (membre droite de production). Notation de dérivation : Les opérations consistent à remplacer au fur et à mesure en partant de l’axiome des non-terminaux par leurs MDPs sont appelées dérivations. Mme : Korichi Wassila Page 1 Exemple :i+i+i  Notation de réduction : L’opération de réduction est l’inverse de la dérivation, elle consiste à remplacer, une fois que l’on reconnait un MDP par la partie gauche MGP ainsi jusqu'à arriver à l’axiome.  Notation d’arbre syntaxique : Un arbre syntaxique est un arbre, dont la racine est l’axiome de la grammaire syntaxique, les nœuds représentent les MDPs et les feuilles terminales la chaine à analyser syntaxique. Deux méthodes sont utilisées pour la construction d’un arbre syntaxique :  A partir de l’axiome, on effectue une série de dérivations jusqu'à atteindre la chaine à analyser, c’est le cas descendant.  A partir de la chaine à analyser, on effectue des réductions jusqu'à arrivent à l’axiome, c’est le cas ascendant.  Notation d’ambiguïté : On dit qu’une grammaire est ambiguë s’il existe plusieurs arbres syntaxiques correspondant à une même chaine à analyser. Mme : Korichi Wassila Page 2 Exemple : E  E+E/E*E/i Deux arbres syntaxiques et i*i+i la chaine à analyser la grammaire est ambiguë. 2. Mise en œuvre d’un analyseur syntaxique : Il existe deux approches: une méthode descendante et une méthode ascendante.  Les méthodes descendantes qui consistent à partir de l’axiome, à dériver jusqu'à l’obtention de la chaine à analyser, en commençant par le non terminal le plus à gauche et l’analyse se fait généralement de gauche à droit.  Les méthodes ascendantes, contrairement consistent à faire des réductions jusqu'à aboutir à l’axiome.  Récursivité à gauche : Une grammaire G est Récursive Gauche (RG) de façon directe, s’il existe une dérivation de la forme : A A / avec A N et  , (N T)* Exemple : A Aa /Bb B bB /a Remarque : si la grammaire est de la forme A A on parlera de récursivité à droite Une grammaire G est Récursive Gauche indirectement, s’elle s’écrit de la forme : A B1 /1 avec A,B N et 1, 2, 1, 2 B A2 /2 (N T)*  Elimination de la récursivité à gauche immédiate (directe) : Remplacer toute règle de la forme A A / par les deux règles : A A’ A’ A’ / (si en autorisant les règles du type A ) Mme : Korichi Wassila Page 3 Ou les deux regles: A A’ /  A’ A’ /  Exemple: S aS / b /Ac A Aa /c  S aS / b /Ac A  cA’ A’ aA’ / Elimination de la récursivité à gauche indirecte : Exemple Soit la grammaire suivante: S→Aa /b A→Ac/Sd/BA/c B→SSc/a  Factorisation à gauche L'idée de base est que pour développer un non-terminal A quand il n'est pas évident de choisir l'alternative à utiliser (c à d quelle production prendre), on doit réécrire les productions de A de façon à différer la décision jusqu'à ce que suffisamment de texte ait été lu pour faire le bon choix. c-à-d : A X /Y/Z/ A B / A,X,Y,Z N et , (N T)* avec A,B,X,Y,Z N et , (N T)* Devient B X/Y/Z Exemple S→aEbS/aEbSeB/a E→bcB/bca B→ba Factorisée à gauche, cette grammaire devient : S→aS'' S''→EbSS'|Є S'→eB| Є E →bcE' E'→B|a B→ba Mme : Korichi Wassila Page 4