Tout d'abord, donnons un numéro à vos productions.
1
2
3
4S → B b B a A → ε B → εS→AaAb
S→BbBa
A→ε
B→ε
Calculons le premier et suivons les ensembles en premier. Pour de petits exemples comme ceux-ci, l'utilisation de l'intuition sur ces ensembles est suffisante.
FIRST(S)={a,b}FIRST(A)={}FIRST(B)={}FOLLOW(A)={a,b}FOLLOW(B)={a,b}
Calculons maintenant la table . Par définition, si nous n'obtenons pas de conflits, la grammaire est .L L ( 1 )LL(1)LL(1)
a | b |
-----------
S | 1 | 2 |
A | 3 | 3 |
B | 4 | 4 |
Comme il n'y a pas de conflits, la grammaire est .LL(1)
Maintenant pour la table . Tout d'abord, l' automate .L R ( 0 )SLR(1)LR(0)
state 0S→∙AaAbS→∙BbBaA→∙B→∙A⟹1B⟹5
state 1S→A∙aAba⟹2
state 2S→Aa∙AbA→∙A⟹3
state 3S→AaA∙bb⟹4
state 4S→AaAb∙b
state 5S→B∙bBab⟹6
state 6S→Bb∙BaB→∙B⟹7
state 7S→BbB∙aa⟹8
state 8S→BbBa∙
Et puis la table (je suppose que peut être suivi de n'importe quoi).SSLR(1)S
a | b | A | B |
---------------------------
0 | R3/R4 | R3/R4 | 1 | 5 |
1 | S2 | | | |
2 | R3 | R3 | 3 | |
3 | | S4 | | |
4 | R1 | R1 | | |
5 | | S4 | | |
6 | R4 | R4 | | 7 |
7 | S8 | | | |
8 | R2 | R2 | | |
Il y a des conflits dans l'état 0, donc la grammaire n'est pas . Notez que si était utilisé à la place, alors les deux conflits seraient résolus correctement: dans l'état 0 sur la tête de lecture, prendrait R3 et sur la tête de lecture il prendrait R4.L A L R ( 1 ) a L A L R ( 1 ) bSLR(1)LALR(1)a LALR(1)b
Cela soulève la question intéressante de savoir s'il existe une grammaire qui est mais pas , ce qui est le cas mais pas facile à trouver un exemple.L A L R ( 1 )LL(1)LALR(1)