IFT313 Solutions devoir #6 Été 2009 Éric Beaudry
1. a) Fait au tableau … S → A B S → c A c A → a A | ε B → B b | ε
2 a) Terminaux: TypeExpression régulièreToken exemple num[0-9]+(.[0-9]+)?21, 0.3 var[a-zA-Z] [a-zA-Z0-9]*x plus\++ mult\** virgule,, grid plot set string \" [^\n"]* \""Courbe 3" title labelxlabel | ylabelxlabel newline\n commentaire# [^\n"]* \n# Premier exemple
2b) Grammaire ::= ::= \n ::= set label string ::= set grid ::= plot ::= pause ::= virgule | ::= title string ::= ::= plus | ::= ::= mult | ::=num ::= var ::= plus ::= mult ::= num ::= var ou
2c) Preuve SLR(1) ::= ● ::= ● \n ::= ● ::= ● \n ::= ● set label string ::= ● set grid ::= ● plot ::= plot ● ::= ● virgule ::= ● :: = ● title string ::= ● … … plot doit être développé. Item réduce seulement. Items shifts seulements. devrat être développé. doit être développé. ne peut générer les symboles, et title. I0I0 I1I1 I2I2
2c) (suite1) ::= plot ● ::= ● virgule Virgule n’est pas dans Follow( ). Il faudra développer. Cela mênera à un état I 4 semblable de I 2. Si I 2 ne génère pas de conflit, alors ce sera aussi vrai pour I 4. I3I3 ::= plot ● ::= ● virgule ::= ● :: = ● title string ::= ● … … I2I2 ::= virgule● :: = ● title string ::= ● … … virgule I4I4
2c) (suite2) ::= plot ● ::= ● virgule ::= ● :: = ● title string ::= ● … … I2I2 ::= ::= plus | ::= ::= mult | ::=num ::= var ::= plus ::= mult ::= num ::= var ou N’est pas SLR(1) ni LR(k) pour n’importe quel k. Cependant, on sait qu’on peut régler le problème en fixant des priorités d’opérateur. Cette grammaire était LL(1) dont certainement LR(1). Le symbole title n’est pas accessible depuis. Donc, il ça ne peut mener à un conflit.
2c) (suite3) ::= plot ● ::= ● virgule ::= ● :: = ● title string ::= ● plus ::= ● mult ::= ● var ::= ● num I2I2 :: = ● title string ::= ● plus ::= ● mult ::= plus ● ::= ● plus ::= ● mult ::= ● var ::= ● num plus ::= plus ● ::= ● plus ::= ● mult 2 conflits shitf / reduce ! Donner priorité au shift mult et shift plus. …