Cours 7 : Analyse syntaxique ascendante

Analyse syntaxique ascendante

Automate (simple = un seul état non précisé) avec inspection de pile :

𝒜𝛤,𝛴,𝛿,F, 𝛿𝛤×(𝛴{𝜀})×𝛤 fini

Sémantique

Configurations :
𝛤 contenu de pile×𝛴 reste d’entrée
Transitions :

𝛾𝛾𝒜a𝛾𝛾 si (𝛾,a,𝛾)𝛿

Langage :
L(𝒜){w𝛴zF;𝜀𝒜wz}

Lien avec les grammaires algébriques

Automate ascendant de G=N,𝛴,P,S :

𝒜𝛤,𝛴,𝛿,F

  • 𝛤N𝛴
  • F={S}
  • 𝛿{(𝛼,𝜀,A)A𝛼P} (reduce){(𝛼,𝜀,a)a𝛴} (shift)

Lemme : 𝛼,𝛽(N𝛴) et w𝛴

  • i) si 𝛽w𝒜𝛼 alors 𝛼G,rm𝛽w
  • ii) si 𝛼G,rm𝛽w et 𝛽{𝜀}(N𝛴)N alors 𝛽w𝒜𝛼

Corollaire : L(G)=L(𝒜)

pour l’automate ascendant de G

Preuve du Corollaire : 𝛽=𝜀,𝛼=S dans le lemme

Preuve du lemme :

Preuve de i)

Par induction sur la longueur de l’exécution.

  • cas de base : 𝛽=𝛼,w=𝜀, et alors 𝛼G,rm0𝛽w

  • étape d’induction :

𝛽w𝒜𝛼=𝛾𝛾w𝒜a𝛾𝛾

pour (𝛾,a,𝛾)𝛿

Par HR : 𝛼G,rm𝛽w

puis (shift) :

𝛾=𝜀 et 𝛾=a𝛴𝛾𝛾=𝛼aG,rm𝛽wa

ou (reduce)

𝛾=𝛼,a=𝜀 et 𝛾=AN

pour A𝛼P :

𝛾𝛾=𝛾AG,rm𝛾𝛼=𝛼G,rm𝛽w

Preuve de ii)

par induction sur la longueur de la dérivation.

  • Cas de base : 𝛼=𝛽w, alors 𝛽w𝒜𝛼 par une séquence de (shift).

  • Étape d’induction :

𝛼=𝛼1AuG,rm𝛼1𝛼uG,rmvu

La sous-dérivation 𝛼1𝛼rm,G𝛽v donne par HR :

𝛽v𝒜𝛼1𝛼

puis

𝛼1𝛼𝜀𝒜𝛼1A(reduce)𝜀𝒜𝛼1Au(shift u)

Ex :

SaSbab𝜀aaaaabaab𝜀aSbaSb𝜀S aabbL(G)=L(𝒜)

Conflits

Ex 2 :

SaAbBcCAaAbabBaBbabCaCbabb 𝜀aan+1baan+1b{𝜀aanAbnaAS𝜀aanBbnaBbaan+1bb𝜀aanCbnaC
Conflit shift/reduce:

si Srm𝛾Aurm𝛾𝛼uSrm𝛾Aurm𝛾𝛼1a𝛼2u

et 𝛾𝛼=𝛾𝛼1

Conflit reduce/reduce:

si Srm𝛾Aurm𝛾𝛼uSrm𝛾Aurm𝛾𝛼u

et 𝛾𝛼=𝛾𝛼 mais A𝛼A𝛼

Grammaires LR(0)

Grammaire LR(0) :

si sa grammaire étendueGN{S},𝛴{$},P{SS$},S n’a pas de conflit

Construction d’un automate déterministe pour une grammaire LR(0)

Item LR(0) :

c’est une production pointée A𝛼1𝛼2 pour A𝛼1𝛼2P,𝛼1,𝛼2(N𝛴)

Item LR(0) est valide pour 𝛾(N𝛴) :

ssi Srm𝛾Aurm𝛾𝛼1𝛼2u avec 𝛾𝛼1=𝛾.

On note V0(𝛾) l’ens. des items valides de 𝛾.

Équivalence de LR(0) :
𝛾0𝛾V0(𝛾)=V0(𝛾)

NB :

  • 0 est d’index fini 2|G|nb max. d’ens. d’items, puisqu’il y a |G| itemsGA𝛼P|𝛼|+1
𝛾 est viable :

ssi Srm𝛾Aurm𝛾𝛼1𝛼2u=𝛾𝛼2u ssi V0(𝛾)

  • 𝛾0𝛾𝛾X,𝛾X viables 𝛾X0𝛾X
  • si A𝛼1B𝛼2V0(𝛾), alors B𝛽V0(𝛾) B𝛽P :

    Srm𝛾Aurm𝛾𝛼1B𝛼2u(A𝛼1B𝛼2)rm𝛾𝛼1Bvurm𝛾𝛼1𝛽vu(B𝛽)
  • Si 𝛾=𝜀, alors {S𝛼S𝛼P}V0(𝜀)

Automate des contextes :

un automate fini 𝒞(Q,N𝛴,goto,q0) dét. complet, où :

  • q0V0(𝜀)
  • Q{V0(𝛾)𝛾(N𝛴)}
  • goto(q,X)VO(𝛾X) si q=V0(𝛾)
Construction des V0(𝛾) :

Clôture de E{A𝛼1𝛼2A𝛼1𝛼2P}

E𝜇x.E{B𝛽A𝛼1B𝛼2x}

Transitions goto :

goto(E,X){S𝛼S𝛼P}

Ex :

%3 A q_0 S'⟶ .S$ S ⟶ .aA S⟶ .bB S⟶ .cC B q_7 S'⟶S.$ A->B S D q_1 S⟶a.A A⟶.aAb A⟶.ab A->D a C q_8 S'⟶S$. B->C $ E q_5 S⟶aA. D->E A F q_2 A⟶a.Ab A⟶a.b A⟶.aAb A⟶.ab D->F a F->F a G q_4 A⟶aA.b F->G A I q_3 A⟶ab. F->I b H q_6 A⟶aAb. G->H b
Automate à pile LR(0) :

on construit l’automate de contextes de G.

𝒜(𝛤,𝛴,𝛿,q0,FV0(S$))𝛿{(qq1qm,𝜀,qq)AX1Xmqm et goto(q,A)=q} (reduce){(q,a,qq)a𝛴,A𝛼1a𝛼2q et goto(q,a)=q} (shift)

Ex :

q0aq0q1aq0q1q2q0aaaq0q1q2q3q0aaabq0q1q2q2q3q0aaab𝜀q0q1q2q4q0aaAbq0q1q2q4q6q0aaAb𝜀q0q1q5q0aA𝜀q0q7𝜀q0q7q8 (accepte)

Ex :

EE+TETTFFF(E)i

Automate de contextes :

%23 A q_0 S'⟶ .E$ E ⟶ .E + T E⟶ .T T⟶ .T * F T ⟶ .F F ⟶ .(E) F ⟶ .i B q_7 S'⟶S.$ A->B S D q_1 S⟶a.A A⟶.aAb A⟶.ab A->D a C q_8 S'⟶S$. B->C $ E q_5 S⟶aA. D->E A F q_2 A⟶a.Ab A⟶a.b A⟶.aAb A⟶.ab D->F a F->F a G q_4 A⟶aA.b F->G A I q_3 A⟶ab. F->I b H q_6 A⟶aAb. G->H b
SLR(k) :

𝛾,A1𝛼1A2𝛼2V0(𝛾),

Suivk(A1)Suivk(A2)=

et 𝛾,A1𝛼,A2𝛼1a𝛼2V0(𝛾),

Suivk(A1)Premk(a𝛼2Suivk(A2))=

Ex : Suiv1(E)={$,+,)}

la grammaire est SLR(1)


LALR(k) :
LAk(A𝛼,𝛾){k:w𝛾𝛼10𝛾;Srm𝛾Aurm𝛾𝛼1𝛼2urm𝛾𝛼1w}Suivk(A)

remplacer Suivk par LAk dans la déf ci-dessus

NB :

  • utilisé dans OcamL yacc, Bison, etc…

  • ascendants plus difficiles à déboguer à cause des conflits que descendants

Inclusion des langages

(graphe)


NB : Il existe des grammaires SLL(1) non LALR(k) :

k,LL(k)LR(k)

Leave a comment