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
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|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)
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
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
) 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)
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
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
Donde
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
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
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