Front-end d un complateur parte avant (analyse) Bureau 332 - M3 mrabelle.nebut at lfl.fr texte source analyseur lexcal analyseur syntaxque analyse sémantque rep sémantque 2012-2013 2/59 Analyse sémantque n termes de P... Au sens strct : passer d un arbre syntaxque / une dérvaton à une représentaton nterne du programme source Au sens large : nclut auss les analyses du back-end. Analyse lexcale : P2 le plannng d entrée n est pas lexcalement correct : levée de Scannerxcepton l l est : découpage en token Analyse syntaxque : P3 le plannng d entrée n est pas syntaxquement correct : levée de Parserxcepton l l est :... ren 3/59 4/59 Ren? Quo d autre? Mantenant l faut produre le fcher HML! Avant de produre le fcher HML : vérfer que la date a un sens vérfer que le créneau horare a un sens Ces vérfcatons ne sont pas du ressort des analyses lexcale et syntaxque. 5/59 6/59 Plus généralement Comment fat-on? Sur un programme syntaxquement correct... Une analyse sémantque qu vérfe par exemple : que le programme est correctement typé ; n COMPIL, on va apprendre : une méthode qu passe partout qu l n y a pas de double déclaraton ; que toute varable est déclarée avant son utlsaton ; etc. basée sur le prncpe des grammares attrbuées... mas pas toutes les grammares attrbuées qu construt un modèle sémantque Pus une ou pluseurs actons sémantques : = une structure de données consttuée d objets Java (cf COO) optmsaton producton de code les calculs sont fats sur cette structure de données (cf COO, algo, etc) calculs dvers etc 7/59 8/59
Pourquo fat-on comme ça? Dans ce cours On pourrat se passer du modèle sémantque mas : c est mons propre d un pont de vue GL c est mons modulare On pourrat vor toutes les grammares attrbuées mas : les attrbuts hértés ne sont pas du tout ntutfs on peut toujours s en passer les versons tout synthétsé contennent ben à la constructon de la structure de données Java Les grammares attrbuées (en parte) Les modèles sémantques L analyse sémantque pendant l analyse syntaxque : outllage 9/59 10/59 Pour fare smple...... on va commencer sans structure de données. Par exemple, pour calculer la eur d une expresson arthmétque on va : écrre une grammare attrbuée qu fat drectement le calcul alors qu à la fn du cours on fera : écrre une grammare attrbuée qu calcule des objets Java représentant l expresson pus calculer la eur à partr des objets Java 11/59 12/59 Prncpe des grammares attrbuées xemple Les actons au sens large = des calculs sur des données x : calcul = générer du HML, données = nom master, soutenance, etc x : calcul = vérfer le créneau, données = bornes de l nterle on enrcht les grammares algébrques par : des données : des attrbuts des calculs sur ces données : des actons Calculer la eur d une expresson arthmétque. + ( ) eur de + + pour l entrée 3 + 2 + 1? 13/59 14/59 Arbre syntaxque pour + + Les questons à se poser pour démarrer rès utle pour concevor une attrbuton. Quelles données veut-on calculer quels attrbuts? Comment les calculer quelles actons? + + 15/59 16/59
Données - attrbuts Attrbuts dans l exemple Les attrbuts sont assocés aux symboles de la grammare Symboles = termnaux et non-termnaux xemple : Données = eur de l expresson elle-même : ; de ses sous-expressons :,. attrbut de type enter assocé au non-termnal, noté. attrbut de type enter assocé au non-termnal, noté. attrbut de type enter assocé au termnal, noté. NB : smltude avec les attrbuts d un objet en POO 17/59 18/59 Arbre décoré Calculs - actons Nœuds de l arbre syntaxque décorés avec la eur des attrbuts. Autant de cases que les actons devront remplr. Addtons, par ex pour + :. =. +. On assoce une acton à la producton en dstnguant les dfférentes occurrences de : + { 0. = 1. +. } Passage de eurs : + + 19/59 {. =. } 20/59 Arbre décoré, fn Remarque Pour l entrée 3+2+1 6 5 1 3 2 3 3 + 2 + 1 Qu fxe la eur de l attrbut du termnal? elle est ntalsée par l analyseur lexcal. 21/59 22/59 Grammare attrbuée fnale t s la grammare état ambguë? + { 0. = 1. +. } {. =. } ( ) {. =. } {. =. } On obtendrat la même eur pour les 2 arbres adms par + +...... mas consdérons la grammare : + * Le mot + * a deux sgnfcatons,. a 2 eurs possbles. attrbuer une grammare ambguë n a aucun sens pratque. 23/59 24/59
Comment quand Flot de données pour les attrbuts Les attrbuts qu on utlse remontent dans l arbre syntaxque. Cette grammare spécfe comment calculer des eurs assocées à ses symboles. Mas elle ne dt pas quand effectuer ces calculs...... n dans quel ordre effectuer les actons. Grammare attrbuée = formalsme de spécfcaton, pas d exécuton. 3 3 5 9 2 4 Au sens strct, actons = équatons, pas affectatons. 3 + 2 + 4 25/59 On parle d attrbut synthétsés. 26/59 Sur l exemple + { 0. = 1. +. } {. =. } ( ) {. =. } {. =. } 27/59 Ces actons respectent le schéma : att gauche prod = f ( att drote prod) Pour les symboles non-termnaux : en parte gauche de producton : occurrences de défnton des attrbuts en parte drote de producton : occurrences d utlsaton des attrbuts 28/59 Défnton Dt autrement Le schéma : att gauche prod = f ( att drote prod) correspond à un attrbut synthétsé : défn quand assocé à un non-termnal en parte gauche de producton ; utlsé quand assocé à un non-termnal ou termnal en parte drote de producton. xcepton : attrbut du termnal. : eur fxée par analyseur lexcal ; S le non-termnal X possède un attrbut synthétsé a : toutes les productons de membre gauche X dovent calculer une eur pour X.a n apparaît qu en parte drote (utlsaton seule) ; dt synthétsé par conventon. 29/59 30/59 Autre exemple : expressons préfxées enter ( + lste ) ( * lste ) lste lste ɛ Calcul de la eur de l expresson? 31/59 32/59
Attrbuton partelle Attrbuton partelle 5 lste lste 3 2 lste : de type enter assocé au termnal enter ; de type enter assocé au non-termnal ; enter {. = enter. } ( + lste ) {. =? } ( * lste ) {. =? } ( + 3 enter 2 enter ) 33/59 34/59 Comment fare pour lste? Premère soluton ( + lste ) ( * lste ) lste lste pas moyen de vor en même temps l opérateur et les eurs de la lste vor en même temps = dans le même sous-arbre l faut fare crculer l nformaton On se débroulle pour descendre l opérateur à applquer jusqu aux eurs de la lste Mas alors c est un attrbut qu descend, dt hérté. Pas dans ce cours. 35/59 36/59 Seconde soluton xemple On collecte les eurs de la lste et on les remonte jusqu à l opérateur. t pour collecter l faut... une collecton! Donc, une structure de données plus rche qu un type élémentare : enter ( + lste ) ( * lste ) lste lste ɛ pour et enter, type enter, calcul dem avant lste pour lste, type lst<enter> L acton devent un code mpératf, qu peut s écrre en Java, en pseudo-code, etc. 37/59 38/59 xemple complet Pour aller plus lon enter {. = enter. } ( + lste ) {. = calcule(+, lste.lste) } ( * lste ) {. = calcule(*, lste.lste) } lste lste { lste tmp = lste 1.lste lste tmp.ajoutete(.) lste 1.lste = lste tmp } lste ɛ { lste.lste = new lst<enter> } où calcule(operateur, lste) est programmée à part : lste vde : retourne l élément neutre de operateur On peut auss : assocer à l axome une structure de données qu représente exactement l expresson dans un autre module du complateur, exploter cette structure pour calculer la eur de l expresson. lste non vde : retourne l accumulateur résultant de l applcaton de l opérateur aux éléments de la lste 39/59 40/59
xemple des expressons <<nterface>> xpresson * nter Addton <<abstract>> xpressonbnare Multplcaton 41/59 42/59 xemple des expressons xemple pour Int Les méthodes de xpresson et ses sous-types permettent de : éuer l expresson calculer une expresson post-fxée etc Program nom : Strng 1 LsteDeclaraton * <<nterface>> Declaraton varable : Strng 1 LsteInstructon 1 <<nterface>> Instructon Affectaton varable: Strng 1 Lecture varable : Strng <<nterface>> xpresson 43/59 Declaratonnter DeclaratonLste nter Lste 44/59 xemple pour Int Pattern Vsteur C est le pattern utlsé en COMPIL. Les méthodes de Program permettent de : effectuer un contrôle de type décompler le programme source générer du code Java etc Prncpe : ne pas mettre une méthode par analyse dans xpresson ou Program coder chaque analyse dans une classe ndépendante, un Vsteur chaque vsteur parcourt / vste la structure de données la structure de données est Vstable Vous verrez ça en COO! 45/59 46/59 Quand effectuer les actons Soluton classque : pendant l analyse syntaxque À chaque fos qu une producton est applquée, l acton assocée est exécutée. fxe un ordre d exécuton pour les actons 47/59 48/59
st-ce toujours possble? avec Cup xste-t-l toujours un ordre de calcul des attrbuts compatble...... avec l ordre d applcaton des productons mposé par l analyse syntaxque? Ou dans le cas où les attrbuts sont tous synthétsés : pour les analyseurs ascendants générés par Cup pour les analyseurs descendants générés par AntLR Cup permet d écrre n mporte quelle grammare attrbuée ne contenant que des attrbuts synthétsés. Il faut tout de même que la grammare algébrque sous-jacente sot acceptée par Cup. Pour des rasons de Géne Log, l approche est un peu dfférente de l approche de théore du langage. 49/59 50/59 xemple : expressons arthmétques Grammare ambguë rejetée par Cup termnal PLUS, MOINS, MUL, NIR; non termnal expr; enter + - * - {-, +} p { * } p { -unare} opérateurs bnares assocatfs à gauche expr ::= NIR expr PLUS expr expr MOINS expr expr MUL expr MOINS expr ; 51/59 52/59 Ajout des prortés et assocatvté Ajout ds la grammare de la pro du mons unare termnal MOINS_UNAIR; /* bdon, n exste pas dans l an lex, sert à fxer la pro du mons unare. */ /* du plus au mons prortare */ precedence left PLUS,MOINS; precedence left MUL; precedence left MOINS_UNAIR; /* l faut mettre left ou autre chose c m^eme s opérateur unare */ expr ::= NIR expr PLUS expr expr MOINS expr expr MUL expr MOINS expr %prec MOINS_UNAIR ; 53/59 54/59 Attrbuts Actons Les actons sémantques sont écrtes en Java. Un seul attrbut par symbole, sous-type de Object. Pour déclarer un attrbut, on donne unquement son type (objet) : termnal Integer NIR; non termnal xpresson expr; L attrbut du non-termnal en parte gauche est par conventon RSUL. 55/59 lles sont placées : entre {: :} en fn de producton avant le ; mas avant un %prec. expr ::= NIR:enter {: RSUL = new nter(enter); :} MOINS expr: {: RSUL = new Oppose(); :} %prec MOINS_UNAIR ; 56/59
xécuton des actons Actons et accès aux attrbuts Le nom des attrbuts est local à une producton (= var locale) Accès à l attrbut d un symbole par : Une acton est exécutée lors de la réducton de la producton assocée. cad quand la parte drote de la producton a été reconnue. L arbre syntaxque est construt en ordre postfxe. 57/59 expr ::= NIR: {: RSUL = new nter(); :} MOINS expr: {: RSUL = new Oppose(); :} %prec MOINS_UNAIR expr:gauche MOINS expr:drote {: RSUL = new Soustracton(gauche, drote); :}; 58/59 Attrbuts de l axome L analyseur syntaxque décoré fournt les attrbuts de l axome. mport java_cup.runtme.symbol;... Parserxpresson parser = new Parserxpresson(scanner);... Symbol s = parser.parse(); xpresson e = (xpresson) s.ue;... 59/59