Anda di halaman 1dari 47

Departamento de Ciencias de la Computacin

Anl i si s si ntcti co descendente


e
Anss sntctco
descendente
Departamento de Ciencias de la Computacin
Anl i si s con retroceso

E anss sntctco descendente (ASD)


ntenta encontrar entre as produccones
de a gramtca a dervacn por a
zquerda de smboo nca para una
cadena de entrada.

E|empo:
- anazar a cadena de entrada "cad" dada a
gramtca sguente:
S c A d
A a b | a
Departamento de Ciencias de la Computacin
Ej empl o
S
c A d
S c A d
Gramtca
S c A d
A a b
A a

"cad", se toma a prmera produccn.


Departamento de Ciencias de la Computacin
Ej empl o
Gramtca
S c A d
A a b
A a

"cad", se toma a segunda produccn.

sguente ho|a de rbo A, cabd


S
c A d
S
c A d
a b
A a b
Departamento de Ciencias de la Computacin
Ej empl o
Gramtca
S c A d
A a b
A a

"cad" se compara con a sguente ho|a de


rbo etquetada con "b". Como no
concuerda, se ndca e error y se vueve a
A para ver s hay otra aternatva no
ntentada.
S
c A d
a b
error
Departamento de Ciencias de la Computacin
Ej empl o
Gramtca
S c A d
A a b
A a

"cad", se toma a sguente aternatva que


comenza por a.

sguente ho|a de rbo A, cad


S
c A d
S
c A d
a
A a
Departamento de Ciencias de la Computacin
Ej empl o
Gramtca
S c A d
A a b
A a

"cad", concde d con d anss extoso


S
c A d
a
Departamento de Ciencias de la Computacin
Anl i si s con r etr oceso: ej erci ci o

E|ercco:
- anazar a cadena de entrada "aabb" dada a
gramtca sguente:
S a S b
S a b
Departamento de Ciencias de la Computacin
Anl i si s si ntcti co descendente
e
Anss sntctco
descendente predctvo
Departamento de Ciencias de la Computacin
Anl i si s si ntcti co predi cti vo

E anazador debe reazar a prevsn de


a rega a apcar so con ver e prmer
smboo que produce para que e
agortmo tenga una compe|dad nea.

E|empo:
- Sent if Express then Sent
- Sent while Express do Sent
- Sent begin Sent end
Exste so una posbdad de dervacn, segn que e
prmer smboo que haya en a entrada sea un f, whe
o begn
6o;_ o;-o uo
ou.cc.I;
Departamento de Ciencias de la Computacin
Anl i si s si ntcti co descendente
predi cti vo ( ASDP)

Las gramtcas que son susceptbes de


ser anazadas sntctcamente de forma
descendente medante un anss
predctvo y consutando un ncamente
un smboo de entrada pertenecen a
grupo LL(1).

A partr de gramtcas LL(1) se pueden


construr anazadores sntctcos
descendentes predctvos (ASDP), que son
ASD sn retroceso.
Departamento de Ciencias de la Computacin
Conj untos de predi cci n

Son con|untos de smboos termnaes


- ayudan a predecr qu rega se debe apcar
para e no termna que hay que dervar.

Se construyen a partr de os smboos de


as partes derechas de as produccones
de a gramtca.

E anazador consuta e sguente smboo


en a entrada
- s pertenece a con|unto de predccn de una
rega apca esa rega, s no da error.
Departamento de Ciencias de la Computacin
Ej empl o de conj untos de predi cci n
e
Supngase a entrada "babxcc", que se
han edo ya os smboos subrayados en
"babxcc", y a gramtca es:
- A a B c | x C | B
- B bA
- C c

Ou produccn debe tomar para segur


e anss?
Departamento de Ciencias de la Computacin
Ej empl o de conj untos de predi cci n
La cadena de dervacones ha sdo:
- A B bA baBc babAc
e
Ahora hay que segur desarroando a varabe A
utzando os con|untos de predccn.
e
Como a sguente etra es una "x" se ege a
segunda opcn (A x C)
- A a B c | x C | B
- B bA
- C c
babxcc
Departamento de Ciencias de la Computacin
Ej empl o de no conj untos de predi cci n

La gramtca
- A a B c | a C | B
no cumpe os requstos para LL(1) porque
s aparece una "a" en a entrada hay dos
posbes opcones.
Luego e anss:
- no puede ser predctvo y,
- a gramtca no es LL(1).
Departamento de Ciencias de la Computacin
Cl cul o de l os conj untos de predi cci n
Ccuo de os con|untos de predccn
Ccuo de os prmeros
Ccuo de os sguentes
Departamento de Ciencias de la Computacin
Conj untos de predi cci n

Los con|untos de predccn se cacuan


- en funcn de os prmeros smboos que
puede generar a parte derecha de a rega, y
- cuando a parte derecha puede generar a
cadena vaca, en funcn de os smboos que
pueden aparecer a contnuacn de a parte
zquerda de a rega en una forma sentenca
dervabe de smboo nca.
Departamento de Ciencias de la Computacin
Cl cul o de l os conj untos de predi cci n

Para poder defnr os con|unto de


predccn es necesaro determnar:
-
con|unto de prmeros con|unto de prmeros
e
cacuar os prmeros smboos que genera
una cadena de termnaes y no termnaes
-
con|unto de sguentes con|unto de sguentes
e
obtener os smboos que pueden segur a
un no termna en una forma sentenca.
Departamento de Ciencias de la Computacin
Cl cul o de l os conj untos de l os pri meros
Ccuo de os prmeros
Departamento de Ciencias de la Computacin
Cl cul o del conj unto de pri meros

Sea una gramtca G = (


T
,
N
,S,P)
- PRIM se apca a (o - (
T

N
)
*
)

Def.-
- S o es una forma sentenca compuesta por
una concatenacn de smboos, PRIM(o) es e
con|unto de termnaes (o ) que pueden
aparecer ncando as cadenas que pueden
dervar de o.

Def. forma-
- a - PRIM(o) s a - (
T
{}) y o = a
*
Departamento de Ciencias de la Computacin
Cl cul o del conj unto de pri meros PRIM(
o)

Regas:
a) S o concde con , PRIM()={}
b) S o - (
T

N
)
+
, o= a
J
a
2
... a
n
, entonces
a) S a
J
a -
T
, PRIM(o)={a}
b) S a
J
A -
N
es necesaro obtener os prmeros de
todas as partes derechas de as produccones de A.
PRIM(A) =

n
=1
PRIM(o
i
) o
i
- P
S despus de cacuar PRIM(A), - PRIM(A) y A no es e
tmo smboo de o, entonces
PRIM (o) = (PRIM(A)-{}) PRIM(a
2
... a
n
)
Tanto s A es e tmo smboo de o como s PRIM(A)
PRIM (o) = PRIM(A)
Departamento de Ciencias de la Computacin
Ej empl o
Gramtca
E T E'
E' + T E' |
T F T'
T' * F T' |
F (E) | dent
PRIM(E')={+,}
PRIM(T')={*,}
PRIM(F)={(,dent}
PRIM(E)=PRIM(T)=PRIM(F)={(,dent}
E T E' T F T'
Departamento de Ciencias de la Computacin
Ej erci ci o
Gramtca
A Aa | BCD
B b |
C c |
D d | Ce
Cacuar e con|unto de prmeros de a
sguente gramtca
Departamento de Ciencias de la Computacin
Ej erci ci o
Aadr a rega
D
Departamento de Ciencias de la Computacin
Ej erci ci o
Gramtca
E E S T | T
S + | -
T T M F | F
M *
F (E) | n
Cacuar e con|unto de prmeros de a
sguente gramtca
Departamento de Ciencias de la Computacin
Ej erci ci o
Gramtca
S E T
T ; S |
E s
Cacuar e con|unto de prmeros de a
sguente gramtca
Departamento de Ciencias de la Computacin
Ej erci ci o
Gramtca
sentenca sent_f | otra_sent
sent_f f (exp_boo) sentenca parte_ese
parte_ese ese sentenca |
exp_boo true | fase
Cacuar e con|unto de prmeros de a
sguente gramtca
Departamento de Ciencias de la Computacin
Cl cul o de l os conj untos de l os
si gui entes
Ccuo de os sguentes
Departamento de Ciencias de la Computacin
Cl cul o del conj unto de si gui entes
Se apca a no termnaes (
N
) de a
gramtca (A)
- devueve e con|unto de termnaes que
pueden aparecer a contnuacn de A en
aguna forma sentenca dervada de smboo
nca y
- un smboo ($) que representa e fna de a
cadena de entrada.
Departamento de Ciencias de la Computacin
Cl cul o del conj unto de si gui entes

Def.-
- S A es un smboo nca no termna de a
gramtca, SIG(A) es e con|unto de termnaes
(y $) que pueden aparecer a contnuacn de
A en aguna forma sentenca dervada de
smboo nca.

Def. forma-
a SIG(A) s a (
N
{$}) y o, /
S = oAa para agn par de cadenas o
*
Departamento de Ciencias de la Computacin
Regl as para el cl cul o del conj unto de
si gui entes
1. Incamente, SIG(A) =
2. S A es smboo nca, SIG(A) = SIG(A) {$}
3. Para cada rega B oA
SIG(A) = SIG(A) (PRIM() - {})
4. Para cada rega B oA o B oA en a que
- PRIM()
SIG(A) = SIG(A) SIG(B)
5. Repetr os pasos 3 y 4 hasta que no se
puedan aadr ms smboos a SIG(A)
Departamento de Ciencias de la Computacin
Ej empl o

Ccuo de os sguentes de a
gramtca:
E T E'
E' + T E' |
T F T'
T' * F T' |
F (E) | dent
Departamento de Ciencias de la Computacin
Ej empl o
SIG(E) = SIG(E) {$}
como F (E)
SIG(E) = {$} (PRIM()) - {})
SIG(E) = {$} {)} = {$, )}
Gramtca
E T E'
E' + T E' |
T F T'
T' * F T' |
F (E) | dent
F ( E )
B oA
SIG(E) SIG(E)
Para cada rega B oA
SIG(A) = SIG(A) (PRIM() - {})
Departamento de Ciencias de la Computacin
Ej empl o
SIG(E') = SIG(E') SIG(E)
SIG(E') = SIG(E') SIG(E')
SIG(E') = SIG(E) = {$, )}
E T E'
B o A
E' + T E'
B o A
SIG(E') SIG(E')
Gramtca
E T E'
E' + T E' |
T F T'
T' * F T' |
F (E) | dent
Para cada rega B oA o B oA en a que - PRIM()
SIG(A) = SIG(A) SIG(B)
Departamento de Ciencias de la Computacin
Ej empl o
PRIM(E') = { + , }
SIG(T) = SIG(T) (PRIM(E')-{}) = {+}
como - PRIM(E')
SIG(T) = SIG(T) SIG(E') = {$, )}
como E'
SIG(T) = SIG(T) SIG(E')
SIG(T) = ({+}) {$, )} = {+ , $ , )}
E T E'
B o A
E' + T E'
B o A
SIG(T) SIG(T)
Gramtca
E T E'
E' + T E' |
T F T'
T' * F T' |
F (E) | dent
Para cada rega B oA
SIG(A) = SIG(A) (PRIM() - {})
Para cada rega B oA o B oA
en a que - PRIM()
SIG(A) = SIG(A) SIG(B)
Departamento de Ciencias de la Computacin
Ej empl o
SIG(T') = SIG(T') SIG(T)
SIG(T') = SIG(T') SIG(T')
SIG(T') = SIG(T) = {+ , $ , )}
T F T'
B o A
T' * F T'
B o A
SIG(T') SIG(T')
Gramtca
E T E'
E' + T E' |
T F T'
T' * F T' |
F (E) | dent
Para cada rega B oA o B oA en a que - PRIM()
SIG(A) = SIG(A) SIG(B)
Departamento de Ciencias de la Computacin
Ej empl o
PRIM(T') = { * , }
SIG(F) = SIG(F) PRIM(T')-{} = {*}
como - PRIM(T')
SIG(F) = SIG(F) SIG(T) = {+,$, )}
como T'
SIG(F) = SIG(F) SIG(T')
SIG(F) = ({*}) {+,$,)} = {*,+, $,)}
T F T'
B o A
T' * F T'
B o A
SIG(F) SIG(F)
Gramtca
E T E'
E' + T E' |
T F T'
T' * F T' |
F (E) | dent
Para cada rega B oA
SIG(A) = SIG(A) (PRIM() - {})
Para cada rega B oA o B oA
en a que - PRIM()
SIG(A) = SIG(A) SIG(B)
Departamento de Ciencias de la Computacin
Ej erci ci o

Ccuo de os sguentes de a gramtca:


Gramtca
E E S T | T
S + | -
T T M F | F
M *
F (E) | n
Departamento de Ciencias de la Computacin
Ej erci ci o

Ccuo de os sguentes de a gramtca:


Gramtca
S E T
T ; S |
E s
Departamento de Ciencias de la Computacin
Ej erci ci o

Ccuo de os sguentes de a gramtca:


Gramtca
sentenca sent_f | otra_sent
sent_f f (exp_boo) sentenca parte_ese
parte_ese ese sentenca |
exp_boo true | fase
Departamento de Ciencias de la Computacin
Cl cul o de l os conj untos de predi cci n
Ccuo de os con|untos de predccn
Departamento de Ciencias de la Computacin
Cl cul o del conj unto predi cci n
La funcn PRED
- se apca a produccones de a gramtca
(A o)
- devueve un con|unto de predccn que
puede contener cuaesquera de os
termnaes de a gramtca y e smboo $,
pero nunca puede contener .
Departamento de Ciencias de la Computacin
Cl cul o del conj unto predi cci n
Cuando e ASDP tene que dervar un no
termna
consuta e smboo de entrada y o busca en os
con|untos de predccn de cada rega de ese no
termna
s os con|untos de predccn son ds|untos, e AS
podr construr una dervacn por a zda. de a
cadena de entrada.
PRED (A o) =
s - PRIM(o) entonces = (PRIM(o) - {}) SIG(A)
s no = PRIM(o)
Departamento de Ciencias de la Computacin
Ej empl o: cl cul o del conj unto predi cci n
S A B | s
A a S c | e B f |
B b A d |
PRED(S PRED(S AB) AB) = (PRIM(AB)-{}) SIG(S) = {a,e,b,$,c}
PRED( PRED(S S s) s) = PRIM(s) = {s}
PRED(A PRED(A aSc) aSc) = PRIM(aSc) = {a}
PRED(A PRED(A eBf) eBf) = PRIM(eBf) = {e}
PRED(B PRED(B bAd) bAd) = PRIM(bAd) = {b}
PRIM(AB) = {a , e , b, }
SIG(S) A a S c
SIG(S) = SIG(S) (PRIM(c) - {}) = {$ , c}
Departamento de Ciencias de la Computacin
Ej empl o: cl cul o del conj unto predi cci n
PRED(A PRED(A ) ) = (PRIM()-{}) SIG(A)
S A B | s
A a S c | e B f |
B b A d |
SIG(A) = SIG(A) (PRIM(B) - {}) = {b , }
{}={b}
PRIM(B) = { b , } es decr, - PRIM(B)
SIG(A) = SIG(A) SIG(S) = {$ , c}
SIG(A) = SIG(A) (PRIM(d) - {}) = {d}
SIG(A) = {b, $ , c , d}
PRED(A PRED(A ) ) = {b, $ , c , d}
S A B
B o A
B b A d
B o A
Departamento de Ciencias de la Computacin
Ej empl o: cl cul o del conj unto predi cci n
S A B | s
A a S c | e B f |
B b A d |
SIG(B) = SIG(B) SIG(S) = {$ , c}
SIG(B) = SIG(B) (PRIM(f) - {}) = {f}
SIG(B) = {$ , c} {f} = {$ , c , f}
PRED(B PRED(B ) ) = {$ , c , f}
S A B
B o A
A e B f
B o A
PRED(B PRED(B ) ) = (PRIM()-{}) SIG(B)
Departamento de Ciencias de la Computacin
Ej erci ci o del cl cul o del conj unto
predi cci n

Ccuo de con|unto de predccn de a


gramtca:
Gramtca
E E S T | T
S + | -
T T M F | F
M *
F (E) | n
Departamento de Ciencias de la Computacin
Ej erci ci o del cl cul o del conj unto
predi cci n

Ccuo de con|unto de predccn de a


gramtca:
Gramtca
S E T
T ; S |
E s
Departamento de Ciencias de la Computacin
Ej erci ci o del cl cul o del conj unto
predi cci n

Ccuo de con|unto de predccn de a


gramtca:
Gramtca
sentenca sent_f | otra_sent
sent_f f (exp_boo) sentenca parte_ese
parte_ese ese sentenca |
exp_boo true | fase
Departamento de Ciencias de la Computacin
La condi ci n LL( 1)
LL(1)
Departamento de Ciencias de la Computacin
La condi ci n LL( 1)

Gramtcas LL(1), se debe cumpr:


- Dadas as produccones de a gramtca para
un msmo termna A o
1
| o
2
|...| o
n
, \A -
N
,
se debe cumpr a condcn:
\ ,| (=|) PRED(A o

) i PRED(A o
|
) =
e
Es decr, no puede haber nngn smboo termna
que pertenezca a dos o ms con|untos de
predccn de as regas de un msmo no termna.
Departamento de Ciencias de la Computacin
Caracter sti cas de l a condi ci n LL( 1)

La secuenca de tokens se anaza de


zquerda a derecha.

Sempre derva e no termna que


aparezca ms a a zquerda.

So es necesaro ver un token de a


secuenca de entrada para averguar que
rega de produccn segur.
Departamento de Ciencias de la Computacin
Ej empl o de gr amti ca LL( 1)

Gramtca con|untos de predccn


A abB {a}
A Bb {b,c}
B b {b}
B c {c}
Es LL(1) porque son ds|untos
PRED(A abB) i PRED(A Bb) = {a} i {b,c} =
PRED(B b) i PRED(B c) = {b} i {c} =
Departamento de Ciencias de la Computacin
Ej empl o de gr amti ca LL( 1)

S se aade a rega B a
Gramtca con|untos de predccn
A abB {a}
A Bb {a,b,c}
B b {b}
B c {c}
B a {a}
No es LL(1) porque no son ds|untos
PRED(A abB) PRED(A Bb) = {a} i {a,b,c}
Departamento de Ciencias de la Computacin
Ej erci ci o
Cumpe esta gramtca a condcn LL(1)?
E E + T | T
T T * F | F
F num | (E)
Departamento de Ciencias de la Computacin
Ej erci ci o
PRED(E E + T) = PRIM(E + T) = {num,(}
PRED(E T) = PRIM(T) = {num,(}
PRED(T T * F) = PRIM(T * F) = {num,(}
PRED(T F) = PRIM(F) = {num,(}
PRED(F num) = PRIM(num) = {num}
PRED(F (E)) = PRIM((E)) = {(}
Gramtca
E E + T | T
T T * F | F
F num | (E)
PRED(E E + T) i PRED(E T) = {num,(} i {num,(}
PRED(T T * F) i PRED(T F) = {num,(} i {num,(}
PRED(F num) i PRED(F (E)) = {num} i {(} =
Los no termnaes E y T no cumpen a condcn LL(1)
Departamento de Ciencias de la Computacin
Ej erci ci o
Cumpe esta gramtca a condcn LL(1)?
E T E'
E' + T E' |
T F T'
T' * F T' |
F num | (E)
Departamento de Ciencias de la Computacin
Ej erci ci o
Gramtca
A B C D
B a C b
B
C c A d
C e B f
C g D h
C
D

En prncpo no tene nnguna


caracterstca que ndque que no
es LL(1), ya que:
- no es recursva por a zda
- n smboos comunes por a
zda.

Cacuar os con|untos de
predccn, y para eo, antes os
prmeros y os sguentes.
Departamento de Ciencias de la Computacin
Ej erci ci o

Es LL(1) a sguente gramtca?


A B C D
B b |
C c |
D d |
Departamento de Ciencias de la Computacin
Anl i si s si ntcti co descendente
e
Modfcacn de gramtcas
no LL(1)
Departamento de Ciencias de la Computacin
Modi fi caci n de gramti cas no LL( 1)
Emnacn de a ambgedad
Factorzacn por a zquerda
Emnacn de a recursvdad por a
zquerda
Departamento de Ciencias de la Computacin
Car acter sti cas

Agunas caracterstcas garantzan que


una gramtca no es LL(1):
- Recursva por a zquerda
- Smboos comunes por a zquerda
- Ambgua

Exsten mtodos para modfcara y


convertra en una gramtca LL(1)
Departamento de Ciencias de la Computacin
El i mi naci n de l a ambi gedad

Ms de un rbo sntctco posbe.

No exste una metodooga para emnara

Soucn: repantearse e dseo de a


msma para encontrar una gramtca no
ambgua equvaente (que genere e
msmo engua|e)
Departamento de Ciencias de la Computacin
Factori zaci n por l a i zqui erda

S dos produccones aternatvas de un


smboo A empezan gua, no se sabr por
cu de eas segur.

Soucn: reescrbr as produccones de A


para retrasar a decsn hasta haber vsto
o sufcente de a entrada como para
eegr a opcn correcta.
Departamento de Ciencias de la Computacin
Regl a general par a factori zar por l a
i zqui erda

Encontrar e pref|o ms argo comn a


dos o ms produccones de A, pero
sempre aqu que sea comn a ms
produccones

S exste un pref|o comn ms corto en


varas produccones y otro ms argo en
un par de eas, hay que emnar prmero
e ms corto comn a as varas ( = 6 ta
que |6| < ||).
Departamento de Ciencias de la Computacin
Regl a general par a factori zar por l a
i zqui erda

Soucn: susttur as produccones:


A o
1
| o
2
| ... | o
n
|

Donde

ndca todas as aternatvas que no


empezan por o, por:
A oA' |

A'
1
|
2
| ... |
n
Departamento de Ciencias de la Computacin
Ej empl o de factori zaci n por l a
i zqui erda

Sea a gramtca
Sent f Expr then 5ent ese 5ent endf
Sent f Expr then 5ent endf
Sent otras
Donde se tene
A o
1
| o
2

Soucn: sustturo por dos


produccones de a forma
A oA'
A'
1
|
2
Departamento de Ciencias de la Computacin
Ej empl o de factori zaci n por l a i zqui erda
o = f Expr then 5ent

1
= ese 5ent endf

2
= endf


= Otras
Sent f Expr then 5ent Sent'
Sent Otras
Sent' ese 5ent endf
Sent' endf
Gramtca
Sent f Expr then 5ent ese 5ent endf
Sent f Expr then 5ent endf
Sent otras
Departamento de Ciencias de la Computacin
El i mi naci n de l a recursi vi dad por l a
i zqui erda

Una gramtca es recursva por a


zquerda
- s tene aguna produccn que sea
recursva por a zquerda, o ben
- s a partr de una forma sentenca como
A se obtene una forma sentenca A
en a que e no termna A vueve a ser
e prmero por a zquerda.
A - N / A = Ao para aguna cadena o
*
Departamento de Ciencias de la Computacin
Regl a par a modi fi car una gramti ca

Rega para modfcar una gramtca y


de|e de ser recursva por a zquerda
Para una gramtca
A Ao
1
| Ao
2
| ... | Ao
m
|
1
|
2
| ... |
n
se susttuye por
A
1
A' |
2
A' | ... |
n
A' (nuevo no termna
auxar)
A' o
1
A' | o
2
A' | ... | o
m
A' | (recursva por a
derecha)
A'
Departamento de Ciencias de la Computacin
Ej empl o de el i mi naci n de recursi vi dad por
l a i zda.
Gramtca
E E + T | E - T | T
T T * F | T / F | F
F num | (E)
E TE'
E' + TE' | -TE' |
T FT'
T' * FT' | / FT' |
F num | (E)
o
1
= + T
o
2
= - T
= T
o
1
= * F
o
2
= / F
= F
A Ao
1
| Ao
2
| ... | Ao
n
|
1
|
2
| ... |
m
se susttuye por
A
1
A' |
2
A' | ... |
n
A'
A' o
1
A' | o
2
A' | ... | o
m
A' |
A'
Departamento de Ciencias de la Computacin
Ej empl o de conversi n de una gramti ca
en LL( 1)
S S nst | T R V
T tpo |
R bq V fbq |
V d S fn | d ; |
S T R V S'
S' nst S' |
T tpo |
R bq V fbq |
V d V' |
V' S fn | ;
Recursva por a zda. Y as dos prmeras de
V tenen factores comunes por a zda.
Departamento de Ciencias de la Computacin
Ej empl o de conversi n de una gramti ca
en LL( 1)
PRED(S' nst S') = {nst}
PRED(S' ) = {$, fn}
PRED(T tpo) = {tpo}
PRED(T ) = {bq, d, nst, $, fn}
PRED(R bq V fbq) = {bq}
PRED(R ) = {d, nst, $, fn}
PRED(V d V') = {d}
PRED(V ) = {nst, $, fn}
PRED(V' S fn) = {tpo, bq, d, nst, $, fn}
PRED(V' ;) = {;}
Departamento de Ciencias de la Computacin
Ej erci ci o
Modfcar esta gramtca para que
sea LL(1)
S S nst
S S var D
S
D D dent E
D D dent sep
D nt
D foat
E S fproc
Departamento de Ciencias de la Computacin
Traza de una cadena

Dada a sguente gramtca hacer as


modfcacones necesaras para que pueda
ser una gramtca LL(1)
S S nst | T R V
T tpo |
R bq V fbq |
V d S fn | d ; |
Departamento de Ciencias de la Computacin
Anl i si s si ntcti co descendente
e
Anazador sntctco
descendente predctvo
drgdo por taba
Departamento de Ciencias de la Computacin
ASDP di ri gi dos por tabl a
Modeo de un ASDP no recursvo
drgdo por taba
Modeo de anazador sntctco
predctvo
Construccn de a tabas de anss
sntctco
Procedmento para construr tabas de
anss LL(1)
Mensa|es de error de tpo sntctco
Departamento de Ciencias de la Computacin
Car acter sti cas

Es otra forma de construr un ASDP

Construccn utzando una pa de


smboos (termnaes y no termnaes)

A a vsta de un token de preanss se


buscar en a taba de anss.

Prmero construr a taba y despus


reazar e proceso de anss
Departamento de Ciencias de la Computacin
Model o de un ASP no recursi vo di ri gi do
por tabl a
a * b $
A
Y
S
$
Programa para
anss sntctco
predctvo
Taba de
anss
sntctco
M|A,a|
Fn de a
cadena
Sada
(produccones
anazadas)
Ser a que dr|a e
anss. Es o que
caracterza a cada
anazador
Base de a
pa
Smboo
nca
Entrada: cadena que se va a anazar
A -
N
, a -
T
, a o $
Departamento de Ciencias de la Computacin
Model o del anal i zador si ntcti co
predi cti vo
Expcacn de grfco
- E programa tene en cuenta
A, e smboo de a cma de a pa, y
a, e smboo en curso de a entrada.
Departamento de Ciencias de la Computacin
Model o del anal i zador si ntcti co
predi cti vo
Posbdades:
1. S A = a = $, e AS se detene y anunca e xto de a
reazacn de anss.
2. S A = a $, e anazador sntctco saca A de a pa y
mueve e apuntador a sguente smboo de a pa.
3. S A es un no termna, e programa consuta a entrada
M|A,a| de a taba.
S M|A,a|={A UVW}, e AS susttuye A por WVU (U en a
cma);
S M|A,a|=error, e AS ama a a rutna de recuperacn error
A, e smboo de
a cma de a pa
a, e smboo en
curso de a entrada.
Departamento de Ciencias de la Computacin
Construcci n de l as tabl as de anl i si s
si ntcti co

Agortmo
A o con a - PRIM(o)
E AS expandr A por o cuando e smboo de
a entrada sea a.
Probema
cuando o = o o = a
en este caso se debe expandr A en o
e
s e smboo de a entrada est en SIG(A), o
e
s se ha acanzado $ y est en SIG(A)
*
Departamento de Ciencias de la Computacin
Construcci n de una tabl a de ASDP

Mtodo
- reazar para cada produccn A o de G
e
para cada a - T, a - PRIM(o) se aade
A o a M|A,a|
-
S - PRIM(o) se aade
A o a M|A,b| \b - SIG(A)
-
S - PRIM(o) y $ - SIG(A) se aade
A o a M|A,$|
- Cada entrada no defnda se marca con error en M
Departamento de Ciencias de la Computacin
Procedi mi ento para construi r tabl as de
anl i si s
e
Las fas se etquetan con os no termnaes y as
coumnas se etquetan con os termnaes y e
smboo fn de fchero.
e
En cada ceda se coocar a rega a apcar para
anazar a varabe de esa fa cuando e termna de
esa coumna aparezca en a entrada.
e
Se cacuan os con|untos de predccn para
cada rega.
e
Para cada termna a - PRED(A o), se aade A
o a Taba|A, a|
e
Cada entrada no defnda de Taba ser error
sntctco.
Departamento de Ciencias de la Computacin
Cl cul o de l a tabl a de anl i si s de una
gramti ca
PRED(E TE') = PRIM(T) =
= PRIM(F) = {num,(}
PRED(E' +TE') = {+}
PRED(E' -TE') = {-}
PRED(E' ) = SIG(E') =
= SIG(E) = {),$}
PRED(T FT') = PRIM(F) = {(,num}
PRED(T' *FT') = {*}
PRED(T' /FT') = {/}
PRED(T' ) = {+, -, ), $}
PRED(F (E)) = {(}
PRED(F num) = {num}
Gramtca
E TE'
E' + TE' | -TE' |
T FT'
T' * FT' | / FT' |
F num | (E)
Departamento de Ciencias de la Computacin
Presentaci n de l a tabl a de anl i si s de l a
gramti ca
Anazador que, a ser predctvo, so
podr construrse s a gramtca a anazar
es LL(1).
num + - * / ( ) $
E Error Error Error Error Error Error
E' Error Error Error Error
T Error Error Error Error Error Error
T' Error Error
F Error Error Error Error Error Error
E TE' E TE'
E' +TE' E' -TE' E' E'
T FT' T FT'
T' T' T' *FT' T' /FT' T' T'
F num F (E)
Departamento de Ciencias de la Computacin
Presentaci n de l a tabl a de anl i si s de l a
gramti ca
Ser LL(1) porque no
aparern dos o ms
produccones en a
msma casa.
Gramtca
5ent f Expr then 5ent
5ent'
5ent otras
5ent' else 5ent |
Expr ogco
otras lgico else if then $
Sent Error Error Error Error
Sent' Error Error Error Error
Expr Error Error Error Error Error
Sent otras Sent f ...
Sent' ese Sent
Sent'
Sent'
Expr gco
Departamento de Ciencias de la Computacin
Apl i caci n del al gor i tmo
Gramtca
Taba de anss
Apcar e agortmo a a entrada num + num * num $
E TE'
E' + TE' | -TE' |
T FT'
T' * FT' | / FT' |
F num | (E)
num + - * / ( ) $
E Error Error Error Error Error Error
E' Error Error Error Error
T Error Error Error Error Error Error
T' Error Error
F Error Error Error Error Error Error
E TE' E TE'
E' +TE' E' -TE' E' E'
T FT' T FT'
T' T' T' *FT' T' /FT' T' T'
F num F (E)
Departamento de Ciencias de la Computacin
Apl i caci n del al gor i tmo

Pa
- muestra e contendo de a pa en cada momento
fondo -------- tope

Entrada
- representa o que queda por anazar en cada
momento.

Sada
- empare|amento de tokens
- ndca as produccones que se van apcando
Departamento de Ciencias de la Computacin
Apl i caci n del al gori tmo
Entrada "num + num * num $"
$ E
$ E' T
$ E' T' F
$ E' T' num
$ E' T'
$ E'
$ E' T +
$ E' T
$ E' T' F
$ E' T' num
$ E' T'
$ E' T' F *
$ E' T' F
$ E' T' num
$ E' T'
$ E'
$
num + num * num $
num + num * num $
num + num * num $
num + num * num $
+ num * num $
+ num * num $
+ num * num $
num * num $
num * num $
num * num $
* num $
* num $
num $
num $
$
$
$
E T E'
T F T'
F num
empare|ar num
T'
E' + T E'
empare|ar +
T F T'
F num
empare|ar num
T * F T'
empare|ar *
F num
empare|ar num
T'
E'
aceptar
Pila Entrada
Salida
E

n
a
c

n
Departamento de Ciencias de la Computacin
Traza de una cadena

Dada a sguente gramtca hacer as


modfcacones necesaras para que pueda
ser una gramtca LL(1)
S A B
A begn S end B theend
A
B var L : tpo
B B fvar
B
L L , d
L d
Construr a taba de anss y
trazar a cadena de entrada:
"begn var a , b : tpo var c : tpo"
Departamento de Ciencias de la Computacin
Traza de una cadena
Dada a sguente gramtca hacer as
modfcacones necesaras para que pueda ser una
gramtca LL(1).
Gramtca
E | L
E a
L E O
O , L
O |
Construr a taba de anss
y anazar a cadena de
entrada "|a, a|"

Anda mungkin juga menyukai