Chapitre 5 Grammaires non contextuelles et arbres syntaxiques Jean Privat Université du Québec à Montréal INF5000 Théorie et construction des compilateurs Automne 2011 Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 1 / 1
Analyse syntaxique Analyseur syntaxique Donnée : une séquence finie de jetons Résultat : une structure syntaxique (un arbre) Générateur d analyseur syntaxique Donnée : une description de syntaxe (une grammaire) Résultat : le code de l analyseur syntaxique correspondant Pour l instant, c est magique SableCC4 est aussi un générateur d analyseur syntaxique Algorithmes pour plus tard (spoiler : on y parle d automates) Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 2 / 1
Grammaire Langages Décrire des langages par leur structure syntaxique Représentation humaine Exemple Une expression est la somme de deux expressions, ou le produit de deux expressions, ou un nombre Questions La chaîne appartient-elle au langage? Si oui, quelle est la structure (l arbre) syntaxique? Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 3 / 1
Grammaire non contextuelle Jeton (terminal) Élément de l alphabet du langage Seul le type du jeton est considéré et non le texte Distingués en bleu dans la suite Production (non-terminal) Variable désignant un ensemble d alternatives Une production spéciale, celle de départ (racine) Alternative Une séquence de jetons et de productions Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 4 / 1
Le langage des formes Grammar formes : Lexer nombre = ( 0.. 9 )+; Token nombre ; Ignored ; Parser forme = { c e r c l e : } c e n t r e p o i n t rayon l o n g { segment : } p o i n t p o i n t ; p o i n t = ( l o n g, l o n g ) ; l o n g = nombre u n i t e ; u n i t e = cm mm pt px ; Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 5 / 1
Le langage des formes Exercice : Trouver l arbre syntaxique centre (5pt, 1cm) rayon 10 px Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 6 / 1
Le langage des formes Exercice : Trouver l arbre syntaxique centre (5pt, 1cm) rayon 10 px point forme:cercle long long long unite:pt unite:cm unite:px centre ( nombre (5) pt, nombre (1) cm ) rayon nombre (10) px Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 6 / 1
Le langage des listes l i s t = {many : } i d l i s t { one : } i d ; Exercice : Trouver l arbre syntaxique id id id Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 7 / 1
Le langage des listes l i s t = {many : } i d l i s t { one : } i d ; Exercice : Trouver l arbre syntaxique id id id list:many list:many list:one id id id Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 7 / 1
Le langage des parenthèses par = { item : } ( par ) {empty : } ( ) ; Exercice : Trouver l arbre syntaxique ((())) Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 8 / 1
Le langage des parenthèses par = { item : } ( par ) {empty : } ( ) ; Exercice : Trouver l arbre syntaxique ((())) par:item par:item par:empty ( ( ( ) ) ) Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 8 / 1
Grammaires vs. expressions régulières, en théorie Langage Expressions régulières (et automates) langage régulier Grammaires non contextuelles langage non contextuel Qui est le plus fort? Peut-on définir tout langage régulier avec une grammaire non contextuelle? Peut-on définir tout langage non contextuel avec une expression régulière? Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 9 / 1
Grammaires vs. expressions régulières, en théorie Langage Expressions régulières (et automates) langage régulier Grammaires non contextuelles langage non contextuel Qui est le plus fort? Peut-on définir tout langage régulier avec une grammaire non contextuelle? oui Peut-on définir tout langage non contextuel avec une expression régulière? non Les langages non contextuels incluent les langages réguliers Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 9 / 1
Grammaires vs. expressions régulières, en pratique Les expressions régulières sont suffisantes pour l analyse lexicale Recherche de sous-chaînes Séquences de jetons au fur et à mesure Les grammaires sont nécessaires pour l analyse syntaxique Fabrication d arbres syntaxiques Un seul arbre complet d un coup Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 10 / 1
Le langage Lisp item = { par : } ( l i s t ) { n i l : } ( ) { i d : } i d ; l i s t = {many : } item l i s t { one : } item ; Exercice : Trouver l arbre syntaxique (id(id id)(id id(id))()) Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 11 / 1
Le langage Lisp item:par list:many list:many list:many item:id item:par list:many list:one item:id list:many item:par list:many item:id list:one item:par item:id list:one list:one item:id item:id item:nil ( id ( id id ) ( id id ( id ) ) ( ) ) Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 12 / 1
Le langage des expressions arithmétiques exp = {add : } exp + exp {min : } exp exp {mul : } exp exp { i n t : } i n t { par : } ( exp ) ; Exercice : Trouver l arbre syntaxique 5 + 4 * 2 5-4 - 2 5 + 4 + 2 Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 13 / 1
Ambiguïté Grammaire ambiguë Plusieurs arbres syntaxiques pour une même phrase Exemple 5 + 4 * 2 exp:mul exp:add exp:add exp:int exp:int exp:mul exp:int exp:int exp:int exp:int int (5) + int (4) * int (2) int (5) + int (4) * int (2) Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 14 / 1
Ambiguïté Problème d arbre La question n est pas sur l appartenance au langage Mais sur obtenir un arbre unique Détection d ambiguïté Problème non décidable (mais on se débrouille) Solutions Récrire la grammaire Priorités explicites (grammaire augmentée) Changer le langage Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 15 / 1
Ambiguïté : Récrire exp = {add : } exp + f a c t o r {min : } exp f a c t o r { f a c t o r : } f a c t o r ; f a c t o r = {mul : } f a c t o r term { term : } term ; term = { i n t : } i n t { par : } ( exp ) ; Exercice : Trouver l arbre syntaxique 5 + 4 * 2 (5 + 4) * 2 5 + (4 * 2) Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 16 / 1
Ambiguïté : Priorités explicites exp = {add : } exp + exp {min : } exp exp {mul : } exp exp { i n t : } i n t { par : } ( exp ) ; Precedence Left mul ; Left add, min ; Attention Priorités explicites ne marchent que pour les cas simples Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 17 / 1
Exercice Question : Concevoir les grammaires Soit l alphabet { 0, 1 } Langage où chaque 1 est forcément suivi d un 0 Exemples : 001001010 OK ; 1101 pas OK Langage des palindromes Exemples : 011010110 OK ; 1101 pas OK Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 18 / 1
Exercice Question : Concevoir les grammaires Soit l alphabet { 0, 1 } Langage où chaque 1 est forcément suivi d un 0 Exemples : 001001010 OK ; 1101 pas OK S = 0 S 1 0 S ; Langage des palindromes Exemples : 011010110 OK ; 1101 pas OK S = 0 S 0 1 S 1 1 0 ; Jean Privat (UQAM) 05 Grammaires et arbres syntaxiques INF5000 Automne 2011 18 / 1