arbre syntaxique decrit la structure d`une forme.
Transcription
arbre syntaxique decrit la structure d`une forme.
NOTIONS SUR LA TRADUCTION 1 ) Notions de base 1.1 - compilation d’un texte : plusieurs phases ……………. 2 1.2 - vocabulaire et grammaire d’un langage …………….…3 1.3 - grammaire : définition et utilisations ………………… 4 1.4 - reconnaissance : arbre syntaxique ……………………. 5 2 ) Introduction à l’analyse lexicale 2.1 - fonction …………………….………………………... 6 2.2 - définition d’un vocabulaire ………………………….. 7 2.3 - expressions régulières : principes ……………………. 8 2.4 - expressions régulières : autres possibilités …………... 9 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 1 1.1 – Compilation d'un texte : PLUSIEURS PHASES Café 0.2€ 0.2€ Ex1.1.1 Stop Stop Stop Texte en entrée OK ("mots") Analyse LEXICALE ? unités lexicales ou "mots" appartiennent au VOCABULAIRE du langage L ? OK Analyse SYNTAXIQUE int t[ ]={0,1,2}, i; for(i=0;i<3;i++) { t[i] *= 2; } ("phrases" ou "formes") ? unités lexicales arrangées selon les FORMES SYNTAXIQUES de L ? OK ACTIONS Analyse SEMANTIQUE ("sens") Interpréter les conventions sémantiques s'il y en a GENERATION de CODE "Interprétation": actions immédiates 10/04/12 Ex1.1.2 Compilation: préparer un CODE EXECUTABLE plus tard Télécom SudParis – CSC 4508 – Notions sur la Traduction 2 1.2 – VOCABULAIRE, GRAMMAIRE d'un langage L Vocabulaire unités lexicales possibles ("mots") du langage cible L - un vocabulaire fini peut être défini par énumération => Voir Ex1.2.1 - d'autres méthodes permettent des vocabulaires infinis => Voir 2 - Analyse Lexicale Règles syntaxiques constructions possibles pour grouper les u. lexicales Ex1.2.1 : grammaire d'un langage naturel élémentaire Catégories lexicales Valeurs possibles Reconnaît (mal) 1 sous-titre du Wall Street Journal … ! Sera complété ! partie => les "mots" possibles dans L <DOT> := ‘.’ lexicale = le " vocabulaire terminal " VT <ART> := a | an | the <TRANS_VRB> := cut | cuts - définitions (éventuellement partie syntaxique récursives) des formes possibles <COMM_NOUN> := bill | bills - en fonction d'autres symboles, <PROP_NOUN> := Bell | Verizon ou de catégories lexicales <Sentence> := <SubjVrbCplt> <DOT> <SubjVrbCplt>:= <NounGrp> <TRANS_VRB> <NounGrp> <NounGrp> := <PROP_NOUN> | <ART> <COMM_NOUN> <xxx> : symboles de VN, Vocabulaire Non-Terminal de la grammaire 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 3 1.3 - GRAMMAIRES : DEFINITION, UTILISATION Grammaire G (VT,VN,P, S) VT vocabulaire terminal VN vocabulaire non terminal P règles syntaxiques S axiome ou "start symbol" Une règle syntaxique : Tête (Left Hand Side, LHS) : définit un symbole non terminal <NTh > : EX.1.3.1 les mots du langage L définissent les notions de la grammaire ou "règles de production", voir + bas le symbole de VN défini d'après les autres, mais ne servant pas à en définir d'autres Queue (Right Hand Side, RHS) : - un ensemble OU d' alternatives - chacune: concaténation ET de symboles de VT ou VN (alternative vide possible) | <NTi > <Tj > | <Tk > <NTl > <Tm > ; (marque de fin de règle) Utilisations : a) en "production" de formes : par substitutions partie gauche / partie droite < SubjVrbCplt> <DOT> <Sentence> (suite Ex.1.2) <NounGrp> <TRANS_VRB> <NounGrp> <DOT> EX.1.3.2 b) en reconnaissance (parsing) par réductions (remplacements RHS->LHS) 10/04/12 Bell cut Verizon . = une production syntaxiquement correcte Voir => Analyse syntaxique Télécom SudParis – CSC 4508 – Notions sur la Traduction 4 1.4 - Reconnaissance : ARBRE SYNTAXIQUE décrit la structure - pouvant être produite par la grammaire d'une forme - reconnue dans l'entrée par réductions successives (remplacements RHS ->LHS) = arbre étiqueté - feuille : unité lexicale reconnue ("mot", un symbole de VT) - nœud : tête de la règle appliquée pour réduire (symbole de VN) <Sentence> EX.1.4 (suite Ex.1.2) < SubjVrbCplt > <DOT> <NounGrp> <NounGrp> <PROP_NOUN> <TRANS_VRB> <ART> <COMM_NOUN> Texte en entrée : Verizon cuts the bills . Cette grammaire est très élémentaire : - accepte 1 seule forme possible pour <Sentence> - accepte l'entrée ssi formée d'1 seule <Sentence> Verizon cut the bills . - accepte d'autres entrées syntaxiquement correctes Verizon cuts an bill . the bill cuts Verizon . mais dénuées de sens 10/04/12 besoin de grammaire + élaborée (élimination possible par analyse sémantique) Télécom SudParis – CSC 4508 – Notions sur la Traduction 5 2.1 - INTRODUCTION A L'ANALYSE LEXICALE ROLE - reconnaître les unités lexicales, ou "tokens", ou "mots" - et leurs catégories lexicales nécessaires pour l' analyse syntaxique EX.2.1 ( = Ex.1.2, légèrement complété) PRINCIPE - du texte en entrée … - … dériver une chaine prétraitée de 2-uples: catégorie lexicale no dans la catégorie catégorie - et les structures auxiliaires 0 Verizon , Bell South will cut the DSL bills . 2 1 1 '.' ',' 1 (0) 2 0 2 PROP_NOUN 0 Bell 1 Verizon 2 2 3 0 3 AUX 4 0 5 6 0 2 4 TRANS_VERB 0 will 0 cut 1 cuts 6 1 5 ART 0 the 0 (0) 6 COMM_NOUN 0 bill 1 bills 2 DSL IMPLEMENTATION pratique. Exemple : avec les outils “flex” / “bison” - l’analyseur syntaxique demande quand il en a besoin la prochaine unité lexicale (″look-ahead″) - l'analyseur lexical retourne la catégorie lexicale (et passe éventuellement la valeur) 10/04/12 fonction yyparse( ) … fonction yylex( ) … préparé avec "bison" préparé aec "flex" Télécom SudParis – CSC 4508 – Notions sur la Traduction Voir => Linux Tools: flex, bison 6 2.2 - DEFINITION DU VOCABULAIRE TERMINAL PRINCIPE mots (=unités lexicales) : formés par concaténation de symboles élémentaires ou "caractères" pris dans un alphabet 3 POSSIBILITES 1) Définition par énumération EX.2.2.1 <Séparateur> : ‘,’ | ‘.’ | ‘:’ | ‘;’ ; <Opérateur> : ‘+’ | ‘-’ | ‘*’ | ‘/’ ; - vocabulaire limité, statique - techniques : . tables, dictionnaires . énumération dans des règles de production "plates" 2) Définition par règles de production récursives - le vocabulaire peut être infini EX.2.2.2 3) Définition par "expressions régulières" - formalisme + simple, possibilités + limitées - peut aussi définir un vocabulaire infini 10/04/12 <Nom> ; <Entier> : <Lettre> | <Nom > <Lettre> : <Chiffre> | <Entier > <Chiffre> ; <Lettre> : ‘A’ | ‘B’ | ….. <Chiffre> : ‘0’ | ‘1’ | ….. ; ; Voir => 2.3 - Expressions régulières Télécom SudParis – CSC 4508 – Notions sur la Traduction 7 2.3 - EXPRESSIONS REGULIERES (E.R.) , 1 : PRINCIPES PRESENTATION - formalisme + limité que les règles de production générales : . = une utilisation particulière des règles de production . correspondent aux automates à états finis Voir => Grammaires Voir => Automates - suffisant pour analyse lexicale de langages simples : langage de commandes, utilitaires de "filtrage" (Linux, Java…) … UTILISATION a) spécification d’une e.r. : opérateurs et métacaractères b) reconnaissance d’e.r. : par interpréteur (applique l’automate correspondant) Caractères spéciaux fondamentaux . un symbole quelconque (implicite) concaténation ET | alternative OU * répétition N fois, N ≥ 0 + répétition N fois, N > 0 ( ) délimiteurs de groupement Ex.2.3 alphabet de base : { a, b, c } e.r. : a+(b|c)*a* caractérise un ensemble infini de mots : 10/04/12 a aaa ab aba abbb abbba abcbcba … Souvent : sauf \n opérateurs - chaînes sur {a,b,c} - commençant par au moins un a - suivi(s) de b ou c en nombre quelconque - éventuellement terminée par un ou des a Télécom SudParis – CSC 4508 – Notions sur la Traduction 8 2.4 - EXPRESSIONS REGULIERES: AUTRES POSSIBILITES Option/Répétition de l’élément précédent ? {n} symbole ou groupe élément précédent facultatif élément précédent répété n fois Classes de symboles : spécifient la présence d’1 symbole de la classe dans l’entrée [xyzt] […a-z…] [^…] déf. par énumération de symboles déf. d’intervalle déf. par complément Dans une classe - les opérateurs *+? ne jouent pas - inutile de les "échapper" par \ Délimiteurs de "contexte" ^… …$ Ex.2.4 10/04/12 spécifie que … figure en début de ligne spécifie que … figure en fin de ligne [A-Za-z]+ [aeiou] [0-9](\.[0-9]*)? ^[ \t]+$ un caractère alphabétique une voyelle un nombre à partie entière une ligne "vide" (espaces ou tabulations uniquement) Télécom SudParis – CSC 4508 – Notions sur la Traduction 9 NOTIONS SUR LA TRADUCTION 3 ) Automates à états finis 3.1 - automates : exemples et diagrammes …………. 11 3.2 - automates à états finis : définition …………….. 13 3.3 - exemple applicatif : traitement de texte ………. 14 3.4 - mots acceptés / reconnus ……………………… 15 3.5 - conception d’une fonction de transition ………. 16 3.6 - automates déterministes / non-déterministes ….. 17 3.7 - langage reconnu par un automate ……………... 18 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 10 3.1 - AUTOMATES : EXEMPLES et DIAGRAMMES Problème : dans l’entrée, identifier les "mots" , avec leur catégorie lexicale PRINCIPE : utiliser des états répéter { - lire prochain symbole e en entrée - selon e et état courant : . actions appropriées . changer éventuellement l’état courant } jusqu’à fin de reconnaissance EXEMPLES Ex. 3.1.1 Reconnaître 1 symbole de programmation ALPHA : caractères alphabétiques ALPHANUM : alphabétiques ou numériques e ∉ ALPHA 0 e ∈ALPHA e ∉ ALPHANUM NUM : chiffres décimaux e ∈NUM S=Se 0 e ∈ALPHANUM 1 e ∉ NUM Télécom SudParis – CSC 4508 – Notions sur la Traduction N = 10*N+val(e) e ∈NUM e ∉ NUM 2 10/04/12 Reconnaître 1 entier et obtenir sa valeur N = val(e) S=e 1 Ex. 3.1.2 2 11 Ex.3.1.3 Reconnaître tous les symboles de programmation, ET tous les entiers SEPAR {séparateurs (sauf EOF) } EOF marque de fin de fichier Automate ≈ somme des 2 précédents NUM {chiffres décimaux} ALPHA {caractères alphabétiques } ALPHANUM {alphabétiques ou numériques } n=s=0 e ∈SEPAR s++ e ∈SEPAR e ∈ALPHA 0 e ∈NUM n++ Ss = e e=EOF Nn= val(e) e ∈ALPHANUM Ss= Sse 1 e = EOF 3 e = EOF DIAGRAMMES d’AUTOMATES e ∈SEPAR e ∈NUM 2 Nn= 10*Nn+val(e) Etats Les exemples précédents utilisent des variables : ce sont des automates à états finis + des ressources bornées supplémentaires 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 0 initial n final Transitions (plusieurs possibles) condition action 12 3.2 - AUTOMATES à ETATS FINIS : DEFINITIONS Finite State Automata, FSA automate A Σ = { e1 , … eM } symboles notant les événements présentés à A Q = { qi, i=0, … N-1 } ensemble fini d’états, dont : q0 : état initial (numéroté 0, fléché) QT ⊂ Q : états terminaux ou "accepteurs" δ: fonction de transition - prochain état qt+1 est fonction : . de l’état courant qt qt+1 = δ(qt, e ) (Σ, δ, Q, q0, QT ) . de l’événement en entrée e - à une transition peut être associé un bloc d’actions - par diagrammes d’états - par tables états/transitions SPECIFICATION d’un automate Ex.3.2 : Tables pour l’Ex.3.1.3 0 e ∈ALPHA Ss = e =>1 action prochain état 1 Ss = Ss e =>1 2 erreur e ∈NUM Nn=val(e) e ∈SEPAR Ss=Ss e s ++ e = EOF Lister =>0 tables =>3 =>2 =>1 Nn=10Nn =>0 +val(e) =>2 n ++ Lister =>0 tables Lister tables =>0 =>3 =>3 (3) 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 13 3.3 - Exemple d ’application : TRAITEMENT de TEXTE PRINCIPE - événement c en entrée = caractère lu traducteur : génère un texte en sortie - automate reconnaisseur simple : accepte / rejette c = getc() Ex. 3.3 Supprimer les commentaires "/* … */" du langage C out (c) c = getc() c ≠ ‘/’ - Principe d’un automate (reste à traiter EOF) 0 c = ‘/’ out (‘/’, c) c = getc() c = getc() c ≠ ‘*’ 1 c = ‘*’ - Reconnaissance par expression régulière . une expression régulière possible : c = getc() c = getc() "/*".*"*/" . en utilisant un générateur d’analyseur lexical, on pourra facilement lui associer l’action nulle 2 c ≠ ‘*’ c = ‘*’ c = getc() c = getc() c ≠ ‘/’ 3 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction c = ‘/’ 14 3.4 - MOTS ACCEPTES / RECONNUS par un AUTOMATE A PRINCIPE séquence de symboles e1, … ek = mot accepté/reconnu par A mène l’automate A de l’état initial q0 à un état qk ∈ QT terminal ("accepteur") Ex. 3.4 Reconnaissance de chaîne particulière Sur l’alphabet Σ = { a, b }, reconnaître UNE chaîne : - contenant au moins deux b consécutifs - éventuellement précédés d’un ou plusieurs a - et obligatoirement suivis d’au moins un a a) sans traitement d’erreur / de fin a 0 b b 1 b 2 a 3 a b) avec traitement d’erreur / de fin d’entrée 0 a b 1 b EOF EOF 2 b a EOF 4 ERREUR a 3 EOF 5 FIN - état terminal/accepteur = on a reconnu une "forme" (signification "positive" ou non) ; ne pas arriver à un état terminal, c’est "ne pas comprendre" - si en l’état courant qt l’entrée e n’était pas attendue, il faut traiter l’erreur. Peut-être se repositionner pour la suite Voir => Conception d’une fonction de transition 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 15 3.5 - CONCEPTION d’une FONCTION de TRANSITION Ex. 3.5.1 Reconnaissance de plusieurs occurrences d’une chaîne Ex.5, sans traitement d’erreur / de fin : variante 0 a b 1 b 2 b a 3 a a b b a b a b b a a b b b a a 1ère occurrence 2ème 3ème b Principe simple : La reconnaissance d’une forme-type est étendue au + possible, ou bien jusqu’au début de reconnaissance d’une autre occurrence Remarques : 2ème - il y a des algorithmes reconnaissant toutes les occurrences, avec recouvrement - on peut rechercher simultanément plusieurs formes-type, avec ou sans recouvrement Ex.3.5.2 Reconnaissance de qq. pronoms anglais 10/04/12 3ème h e 0 1 s 2 r 3 s 4 i 7 5 ε h 8 e 9 Télécom SudParis – CSC 4508 – Notions sur la Traduction ε s 6 ε-transition : Voir => Automates non déterministes 16 3.6 - Automates DETERMINISTES / NON-DETERMINISTES NFA Nondeterministic Finite state Automata qi ek q - pour certains (qi,ek), j1 e q k plusieurs transitions possibles q DFA Deterministic Finite state Automata Pour tout couple état-transition (qi,ek), 1 seule transition possible qi ek qj i j2 … - et/ou il y a des ε - transitions : "sans cause" Voir => Ex.3.5.2 - pour représenter des possibilités de choix : la reconnaissance ne sera PAS aléatoire !! mais elle devra explorer les possibilités - méthode : a) concevoir d’abord un NFA b) déduire un DFA équivalent . toujours possible, avec + d’états . algorithmes de conversion, d’optimisation Ex.3.6 Sur l’alphabet Σ = { a, b, EOF }, - contenant au moins un a - suivi d’exactement 2 lettres quelconques reconnaître une chaîne : - le tout avec un éventuel préfixe quelconque non déterministe a, b 0 a a,b 1 a,b 2 3 a b EOF 4 0 5 a a Déterministe (v.simplifiée) b a,b 1 b 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction a,b 2 EOF 3 a 4 b 17 3.7 - LANGAGE RECONNU PAR UN AUTOMATE Définitions - mot M = suite de symboles ( ei1, …, eik ) pris dans un alphabet Σ = { e1, …, em } - langage L : un ensemble donné de mots L = {Mk} ⊂ Σ* - langage reconnu par un automate A = l’ensemble des mots acceptés / reconnus par A Comment caractériser le langage reconnu par un automate spécifier à reconnaître a) par énumération Souvent les langages à reconnaître sont infinis… b) par description Ex.3.7.1 informelle Ex.3.7.2 c) par expression régulière 10/04/12 Sur {0,1}*, mots ne contenant pas deux ‘1’ consécutifs a 1 b Automate A : a 0 b a b 2 Automate reconnaisseur ? Langage reconnu ? Le langage reconnu par un automate à états finis est caractérisable par expressions régulières Télécom SudParis – CSC 4508 – Notions sur la Traduction 18 NOTIONS SUR LA TRADUCTION 4 ) Grammaires 4.1 - exemple de grammaire, 1: spécification …………………… 20 4.2 - exemple de grammaire, 2: utilisation ………………………. 21 4.3 - notion de grammaire ambiguë ……………………………… 22 4.4 - grammaires régulières ……………………………………… 23 4.5 - grammaires d’opérateurs …………………………………… 25 5) Analyse syntaxique 5.1 - analyse syntaxique descendante : principe ………………….. 26 5.2 - analyse syntaxique descendante : exemple simple ………….. 27 5.3 - analyse syntaxique descendante : implémentation, limites …. 28 5.4 - analyse ascendante : par "shift / reduce" …………………… 29 5.5 - analyseurs et classes de grammaires ……………………….. 31 5.6 - analyseur LR(0) : principe …………………………………. 32 5.7 - definition de règles …………………………………………. 34 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 19 4.1 - EXEMPLE DE GRAMMAIRE, 1 : spécification Ex.4.1. : esquisse d’un langage informatique simple Program Definitions Règles syntaxiques Vocabulaire Spécification des catégories lexicales (style "flex ") 10/04/12 : : | ; OneTypeVarDefs : ; VarDefList : | ; VarDef : ScalarVarDef : | ; ArrayVarDef : | ; Number : Definitions Functions ; OneTypeVarDefs Definitions OneTypeVarDefs SIMPLE_TYPE VarDefList fin de règle (méta-langage) ‘;’ mot du langage VarDef VarDefList ‘,’ VarDef ScalarVarDef | ArrayVarDef SYMBOL ‘=‘ Number SYMBOL ; SYMBOL ‘[‘ INT ‘]’ ArrayVarDef ‘[‘ INT ‘]’ INT | FLOAT ; … etc … int | char | float [a-zA-Z] [a-zA-Z0-9]* -?[0-9]+ return SIMPLE_TYPE ; return SYMBOL; return INT; … etc … Télécom SudParis – CSC 4508 – Notions sur la Traduction 20 4.2 - EXEMPLE DE GRAMMAIRE, 2 : utilisation Ex.4.2 (suite Ex.4.1) a) En production Récursivité des règles Program Definitions Functions OneTypeVarDefs Arbre ET/OU de possibilités … etc … VarDefList SIMPLE_TYPE int VarDefList Enumération exhaustive du langage décrit par la grammaire : impossible en général ‘,’ VarDef ScalarVarDef ScalarVarDef SYMBOL En limitant la profondeur de récursion, cela reste très calculatoire VarDef int SYMBOL ‘=‘ Number , SYMBOL = Number … SYMBOL encore à substituer … etc b) En reconnaissance - on cherche à construire UN arbre syntaxique - ceci peut nécessiter des retours arrière (alternatives) 10/04/12 Voir => Analyse syntaxique Télécom SudParis – CSC 4508 – Notions sur la Traduction 21 4.3 - NOTION DE GRAMMAIRE AMBIGUE Pour au moins une chaîne d’entrée, plusieurs arbres syntaxiques possibles Ex.4.3 : l’instruction if en langage C Instruction : IfInstruction | ….. ‘;’ ; IfInstruction : if ‘(‘ Condition ‘)’ Instruction | if ‘(‘ Condition ‘)’ Instruction else Instruction ; Condition : … IfInstruction Instruction IfInstruction Condition if ( Condition1 ) if Condition Condition Instruction Condition Instruction Instruction ( Condition2 ) instruction1 ; else instruction2 ; Instruction IfInstruction Instruction IfInstruction 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 22 4.4 - GRAMMAIRES REGULIERES , 1 Définition - toute partie droite de règle contient au + un symbole non-terminal - ces symboles figurent en partie droite tous au début, ou tous à la fin "linéaire à gauche" " linéaire à droite" <NTi> : <NTj> | <NTk> <Tp1> <Tp2> … ; Propriété <NTi> : <NTj> | <Tp1> <Tp2> … <NTk> ; Le langage L(G) défini/reconnu par une grammaire régulière peut être reconnu par une expression régulière EX.4.4.1 VT = {a,b} VN = { S, A} A possibles : a ba bba … 1 S possibles : de forme S : ba bba bbba … de forme S2 : aba abba abbba … axiome G S : | A : | b A a S a b A forme S1 forme S2 L(G) peut être reconnu par l’e.r. : 10/04/12 aaba aabba aabbba … Exemple d’arbre syntaxique (plusieurs possibles : grammaire ambiguë) a*b+ a Télécom SudParis – CSC 4508 – Notions sur la Traduction a b b b S1 a A S1 S1 S2 23 4.4 - GRAMMAIRES REGULIERES , 2 Les grammaires régulières (ou les e.r.) reconnaissent les "langages réguliers " Ex.4.4.2 G VN = { Symbole } VT = { LETTRE, CHIFFRE } avec LETTRE = { A,B,…,a,b,… } CHIFFRE = { 0,1,…, 9 } Symbole : LETTRE | Symbole LETTRE | Symbole CHIFFRE ; L(G) peut être reconnu par l’e.r. : [A-Za-z] [A-Za-z 0-9]+ … mais sont une catégorie de grammaires aux possibilités restreintes Ex.4.4.3 G 10/04/12 VN = { S } VT = { 0, 1 } - quelques mots de L(G) : S : 0 S 1 | 0 1 ; - grammaire non régulière 01 0011 000111 … - impossible de caractériser L(G) par exp. régulière Télécom SudParis – CSC 4508 – Notions sur la Traduction 24 4.5 - GRAMMAIRES D’ OPERATEURS Définition a) aucune partie droite de règle n’est vide b) ni ne contient 2 symboles non terminaux voisins EX.4.5 Expressions arithmétiques en notation "infixée" E Expr : | | | | | | Factor : Expr ‘+’ Expr Expr ‘-’ Expr Expr ‘*’ Expr Expr ‘/’ Expr ‘-’ Expr ‘(‘ Expr ‘)’ Factor ; SYMBOL | CONSTANT ; E E E E F Exemple d’expression + arbre syntaxique : E E E F F F F - ( ( b + c ) * ( d - f ) ) / e Si on spécifiait la grammaire comme ceci Expr : Expr Oper Expr ; ce ne serait plus une "grammaire d’opérateurs" ! Oper : ‘+’ | ‘-’ | ‘*’ | ‘/’ ; (bien que comportant des opérateurs arithmétiques) 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 25 5.1 - Analyse syntaxique DESCENDANTE : PRINCIPE partir de l’axiome = symbole non terminal N1 pour reconnaître dans le texte un symbole n.t. Ni , il y a plusieurs queues de règle possibles Qi.1, Qi.2 , … - on essaie tour à tour chaque alternative Qi.j nœud OU - pour reconnaître Qi.j il faut reconnaître Qi.j1 Qi.j2 … … Ni : Qi.11 Qi.12 … | Qi.21 Qi.22 … … nœud ET Ni exploration de cet arbre ET/OU de possibilités : - en profondeur d’abord (DFS) : on recherche UN arbre syntaxique - avec retours-arrière si échec Qi.1 Qi.11 10/04/12 Qi.1 Qi.2 Télécom SudParis – CSC 4508 – Notions sur la Traduction Qi.12 Qi.2 … 26 5.2 - Analyse syntaxique DESCENDANTE : exemple simple Ex.5.2.1 <Sentence> <SubjVrbCplt> <DOT> <Sentence> ? (cf. Ex.1.2) ? Verizon cuts the bills . Verizon cuts the bills . <Sentence> <Sentence> <SubjVrbCplt> <SubjVrbCplt> <DOT> <NounGr> <TRANS_VRB><NounGr> <NounGr> <TRANS_VRB><NounGr> <PROP_NOUN> <ART> ? Verizon cuts the bills . <DOT> ? <COMM_NOUN> Verizon cuts the bills . <Sentence> <SubjVrbCplt> <Sentence> <DOT> <SubjVrbCplt> <NounGr> <TRANS_VRB><NounGr> <PROP_NOUN> <ART> Bell <DOT> <NounGr> <TRANS_VRB><NounGr> <PROP_NOUN> <COMM_NOUN> ECHEC Verizon cuts the bills . <ART> Bell <COMM_NOUN> Verizon SUCCES Verizon cuts the bills . …etc… 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 27 5.3 - ANALYSE DESCENDANTE : implémentation, limites - choix OU : d’après le(s) prochain(s) éléments dans le texte ("look-ahead token") . une règle est applicable si par récursion elle peut générer la prochaine unité lexicale - implémentation possible : par appels récursifs de procédures ("descente récursive") . pour reconnaître un symbole n.t. Ni : une procédure Rec_Ni( ) . pour chaque forme possible Qi.j de Ni, appeler Rec_Qi.j1( ) , Rec_ Qi.j2( ) … - pas pour les grammaires "récursives à gauche" directement : Nom : Lettre A : B …. ; ou par récursivité croisée : | Nom Lettre B : A … ; ; - mais on peut éliminer la récursivité à gauche par transformation de la grammaire 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 28 5.4 - Analyse ascendante : par "shift / reduce" a) on considère une "fenêtre" de mots, étendue progressivement à droite b) on y essaie des réductions : remplacement partie droite -> partie gauche symbole Nj <= groupe de symboles n.t. Nik REDUCE : Appliquer une règle dans la fenêtre c) quand aucune réduction n’est possible : SHIFT : Elargir la fenêtre à la prochaine unité d) retour arrière en cas d’impossibilité Verizon Ex. 5.4.1 (reprise de Ex.1.4) 2 REDUCEs, puis SHIFT nécessaire 1 REDUCE, puis SHIFT nécessaire 1 REDUCE, puis SHIFT cuts the bills . PROP_NOUN NounGr TRANS_VRB ART COMM_NOUN NounGr 3 REDUCEs, puis SHIFT SubjVrbCplt 2 REDUCEs, FIN. 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction DOT Sentence 29 5.4 - Analyse ascendante : par "shift / reduce", suite - on cherche toujours à réduire un suffixe de la fenêtre courante - le contenu de la fenêtre peut être géré comme une pile - méthode adaptée aux grammaires LALR (Look Ahead, Left-to-right, Right reduce) Ex.5.4.2 : grammaire d’opérateurs Exp : | | | | ; Exp Exp Exp Exp ID - opérations à réaliser - pour une grammaire d’opérateurs, on peut utiliser une table de précédences d’opérateurs 10/04/12 Pile (fenêtre de réduction) ‘+’ Exp ‘-’ Exp ‘*’ Exp ‘/’ Exp Chaîne d’entrée (unités lexicales) fin début shift reduce shift shift reduce reduce shift shift reduce reduce $ $ $ $ $ $ $ $ $ $ $ ID Exp Exp Exp Exp Exp Exp Exp Exp Exp $ ID + ID ID + ID + ID + ID ID + + ID + Exp + + ID + Exp Télécom SudParis – CSC 4508 – Notions sur la Traduction + + + + + + + ID ID ID ID ID ID ID ID $ $ $ $ $ $ $ $ $ $ $ $ 30 5.5 - RECONNAISSANCE des LANGAGES / GRAMMAIRES "reconnaître une grammaire G" = reconnaître le langage généré par G difficulté dépend de la grammaire grammaire LL reconnaissable par Left-to-right scan, Lefttmost reduction LR reconnaissable par Left-to-right scan, Rightmost reduction LR(k) idem, la reconnaissance utilisant au + k unités d’entrée en avance reconnaissance des grammaires LR - possible par principe d’automate : chaque cellule de la table définissant action / prochain état - 3 techniques possibles pour construire la table : . canonical LR : la plus puissante / coûteuse . LALR : se baser sur les "look-ahead tokens " . simple LR : capacité de reconnaissance limitée 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction Convient bien aux langages informatiques 31 5.6 - ANALYSEUR SYNTAXIQUE LR(0) : PRINCIPE Décide des opérations (shift, reduce, … ) par un automate à états finis o défini par 2 tables o l’automate stocke dans une pile : = la "fenêtre" précédente ; les réductions s’y feront à droite a) les symboles - terminaux - non terminaux intégrés lors d’un « shift » , encore non réduits remplaçant les précédents lors d’un « reduce » b) pour chaque symbole, un numéro d’état associé Table d’actions repris éventuellement + tard A [ EtatCourant, SymboleT ] o cellules non vides contiennent des opérations sn shift : avancer d’un symbole terminal (token) x dans l’entrée rk reduce, en appliquant la k-ième règle Rk a accept : fin de l’analyse sn - empiler le token x, avec pour n° d’ état associé n - se placer dans l’état n X : A1 … ANk symbole n.t. qui sera obtenu par réduction rk o cellules vides = cas d’erreur - dépiler Nk symboles => nouveau sommet de pile, état associé em Table de changements d’états o les cellules non vides définissent des changements d’état 10/04/12 gn « go to n » G[ EtatRepris, SymboleNT ] - prochain état e’ = G [em , X ] - empiler le symbole réduit X + n° d’état associé e’ - passer en l’état Télécom SudParis – CSC 4508 – Notions sur la Traduction e’ 32 5.6 – ANALYSEUR SYNTAXIQUE LR(0) : EXEMPLE A : Actions ( Grammaire 0 1 2 3 4 Texte Tables S’ : S : S : L : L : S $ ( L ) x S L , S ( x ) $ . ( x Analyse 1 2 3 4 5 6 7 8 9 s3 r2 s3 ) x r2 s2 r2 s2 , $ G : Chgts d’état S L g4 r2 r2 g7 g5 a r1 r3 s3 r4 s6 r1 r3 r4 s8 r1 r1 r1 r3 r3 r3 s2 r4 r4 r4 g9 ) $ 1 s3 par A [1, ( ] - Empiler (/3 - Nouvel état = 3 ( . x ) $ 1 3 ( 1 s2 par A [ 3,x ] - Empiler x/2 - Nouvel état = 2 x . ) $ 3 2 reduce par R2, X=S ; Top=3 : par G [ 3,S], empiler S/7 - Nouvel état = 7 ( S . ) $ 1 3 7 reduce par R3, X=L ; Top=3 : par G [ 3,L], empiler L/5 - Nouvel état = 5 ( L .) 1 $ 3 5 s6 par A [ 5, ) ] - Empiler )/6 - Nouvel état = 6 ( L ) .$ 10/04/12 1 3 5 1 S4 6 reduce par R1, X=S ; Top = 1 : par G [ 1,S], empiler S/4 .$ a par A [ 4,$ ] Télécom SudParis – CSC 4508 – Notions sur la Traduction 33 5.7 - DEFINITION DE REGLES, 1: souvent plusieurs solutions EX. Reconnaître des définitions de tableaux d’entiers, en C On veut pouvoir reconnaître : int X3[ ] = { 0, 1, 2 } int a[ ] = { }; int b2c[3 ]; int zz[ ]; Une solution, à discuter 1) 2) 3) 4) 5) 6) 7) 8) 10/04/12 … IntArrayDef : IntArrayDefWithoutDim ‘=‘ IntArrayInit ‘;’ | IntArrayDefWithDim ‘;’ | IntArrayDefWithoutDim ‘;’ ; IntArrayDefWithDim : INT_TYPE ID ‘[‘ INT_VAL ‘]’ ; IntArrayDefWithoutDim : INT_TYPE ID ‘[‘ ‘]’ ; IntArrayInit : ‘{‘ IntValList ‘}’ | ‘{‘ ‘}’ ; IntValList : INT_VAL | IntValList ‘,’ INT_VAL ; … Spécifier l’analyseur lexical IntValList : Pourquoi imposer au moins une INT_VAL ? IntArrayInit : Role de la 2eme alternative ? IntArrayDef : chaque alternative spécifie un ‘;’ final : est-ce judicieux Ajouter une 1ère règle pour traiter une suite de IntArrayDef Ajouter une récupération d’erreur La catégorie lexicale INT_VAL figure à 2 endroits ; cela va-t-il créer une ambiguïté, si oui laquelle ? Dans la solution ci-dessus, la notion IntValList est reconnue au niveau syntaxique a – Si on veut passer des valeurs du niveau lexical au niveau syntaxique - quel devrait être le type (défini par %type) donné au symbole n.t. IntValList ? - au niveau syntaxique, comment pourrait-on stocker les valeurs successives ? b – Alternative : si on voulait reconnaître la même notion par l’analyseur lexical (retournant la catégorie INT_VAL_LIST), quels seraient les avantages, inconvénients, difficultés ? Télécom SudParis – CSC 4508 – Notions sur la Traduction 34 5.7 - DEFINITION DE REGLES, 2: si possible, éviter les conflits ; surtout les conflits reduce / reduce ! EX. Approche progressive Version 0 d’analyseur syntaxique : Se contente d’obtenir les u.lexicales une à une Text : | Text LexUnit { fprintf(stderr, " <LexUnit> " ); } ; LexUnit : P_NOUN | C_NOUN | ART | TRANS_VERB | ‘,’ | ‘.’ ; Version 1 de l’analyseur : on commence à introduire des règles significatives, en identifiant une 1e notion utile Text : | Text NounGroup { fprintf(stderr, " <NounGroup> " ); } | Text LexUnit { fprintf(stderr, " <LexUnit> " ); } ; NounGroup : P_NOUN | ART C_NOUN ; LexUnit : P_NOUN | C_NOUN | ART | TRANS_VERB | ‘,’ | ‘.’ ; ⇒Conflits ( reduce / reduce, shift / reduce) - pourquoi ? - comment modifier la grammaire ? 10/04/12 Télécom SudParis – CSC 4508 – Notions sur la Traduction 35