Está en la página 1de 26

Departamento de Ciencias de la Computacin

rbol es de deri vaci n


Arboes de dervacn
Departamento de Ciencias de la Computacin
Deri vaci ones
S A entonces A es una derivacin
donde , son cadenas arbitrarias de smbolos gramaticales.
Si
1

2

n
se dice que
1
deriva a
n
deriva en un paso
deriva en cero o ms pasos
*
Departamento de Ciencias de la Computacin
Deri vaci ones
Podemos decir:

y entonces
Del mismo modo se puede decir
deriva en uno o ms pasos
*
*
*

Departamento de Ciencias de la Computacin


Deri vaci ones
Una dervacn por a zquerda es
aquea en a que se reempaza e no
termna ms a a zquerda en cada
paso de a dervacn.
anogamente para a derecha
Una dervacn por a zquerda
corresponde a a numeracn preorden
de os nodos nternos de su rbo de
anss gramatca asocado.
derecha - postorden nversa
Departamento de Ciencias de la Computacin
rbol es de deri vaci n
Toda dervacn de as gramtcas de
tpo 1, 2 3 se puede representar
medante un rbo.
Departamento de Ciencias de la Computacin
Ej empl o de rbol de deri vaci n
Sea a gramtca:
G = ( 0,2,4,6,8),(N,C),N, {
N C | CN
C 0 | 2 | 4 | 6 | 8
} )
Sea a dervacn
N CN CCN CCC 4CC 48C 480
N
C
N
C N
8
C
0 4
Departamento de Ciencias de la Computacin
Ej erci ci o
Sea a gramtca
S ( L ) | a
L L , S | S
Cues son os eementos no termnaes?
Cues son os eementos termnaes?
Cues es e smboo nca?
Reazar os rboes sntctcos de
(a , a)
(a , (a , a))
(a , ((a , a) , (a , a)))
Departamento de Ciencias de la Computacin
Ambi gedad
Una gramtca es ambgua ambgua s e
engua|e que defne contene aguna
cadena que tenga ms de un rbo de
anss sntctco. (no ambgua mpca un
nco rbo)
No es posbe construr anazadores efcentes
para gramtcas ambguas.
Con certas restrccones restrccones a a gramtca se
podr afrmar que no es ambgua.
Departamento de Ciencias de la Computacin
Ej empl o de gramti ca ambi gua
Sea una gramtca cuyas regas de
produccn son as sguentes:
E E + E
E E * E
E n
E (E)
Se pde e o os rboes sntctcos de
"7+4*2".
Departamento de Ciencias de la Computacin
Ej empl o de gramti ca ambi gua
E
E E
E
E
n
n
+
*
n
(7)
(4) (2)
(8)
(15)
Gramtica
E E + E
E E * E
E n
E (E)
Produccion
E E + E
n + E
n + E * E
n + n * E
n + n * n
Departamento de Ciencias de la Computacin
Ej empl o de gramti ca ambi gua
E
E
E
E
E
n
n
*
+
n
(2)
(7) (4)
(11)
(22)
Produccion
E E * E
E + E * E
n + E * E
n + n * E
n + n * n
Gramtica
E E + E
E E * E
E n
E (E)
Departamento de Ciencias de la Computacin
Ej empl o de gramti ca ambi gua
Soucn a a ambgedad modfcar
as regas de produccn.
Dstnguendo factor y
trmno (producto de
dos factores)
E E + T | T
T T * F | F
F (E) | n
rbo sntctco de "7+4*2"
E
E T
F T
n
n
+
*
n
(7) (4)
(2)
(8)
(15)
T
F
F
Departamento de Ciencias de la Computacin
Ej erci ci o
Sea a gramtca
S a S b S
S b S a S
S
Demostrar que es ambgua contruyendo dos
rboes sntctcos correspondentes a a frase
abab
Departamento de Ciencias de la Computacin
Gramti cas bi en formadas
Caracterstcas de as gramtcas que
se deben evtar para que no sea
ambgua
Regas nnecesaras:
A A
Smboos nnaccesbes:

U A donde U
N
y no aparece en a parte derecha
de nnguna otra rega y U no es e smboo de axoma.
U es accesbe S xUy, x,y
*

*
Departamento de Ciencias de la Computacin
Gramti cas bi en formadas
Rega superfuas

Para no ser superfuo U


N
debe cumpr
U x, x
T
*

Emnacn de smboos no generatvos:

G = (
T
,
N
, S, P)
para cada A
N
se genera G(A)
s L(G(A)) es vaco A es un smboo no generatvo
Emnacn de regas de redenomnacn, A B

para cada A
N
ta que A B y para cada rega de a
forma B x donde x
N
se aadr una rega de a forma
A x

*
Departamento de Ciencias de la Computacin
Gramti cas bi en formadas
Emnacn de regas no generatvas, A :

S L(G) no contene
es posbe emnarar todas
En caso contraro
se pueden emnar todas menos S
donde para cada A
N
(A S) ta que A y
por cada rega B xAy se aadr otra rega de a
forma B xy excepto s x=y=
*
Departamento de Ciencias de la Computacin
Gramti cas bi en formadas
Ccos:
S A
S a
A S
Regas que ofrezcan camnos aternatvos:
S A
S B
A B
Departamento de Ciencias de la Computacin
Gramti cas bi en formadas
Produccones recursvas en as que as
varabes no recursvas de a produccn
pueden dervar a a cadena vaca:
S H R S
S s
H h |
R r |

S H R

H h |

R r |
Departamento de Ciencias de la Computacin
Ej empl o
Lmpar a sguente gramtca
G = ({0,1}, {S, A, B, C}, S, P)
S AB | 0S1 | A | C
A 0AB |
B B1 |
Departamento de Ciencias de la Computacin
Ej empl o
G = ({0,1}, {S, A, B, C}, S, P)
S AB | 0S1 | A | C
A 0AB |
B B1 |
Smboo no
generatvo
G = ({0,1}, {S, A, B, C}, S, P)
S AB | 0S1 | A
A 0AB |
B B1 |
Departamento de Ciencias de la Computacin
Ej empl o
Emnacn de
regas de a
forma x
G = ({0,1}, {S, A, B, C}, S, P)
S AB | 0S1 | A | B |
A 0AB | 0B | 0A | 0
B B1 | 1
G = ({0,1}, {S, A, B, C}, S, P)
S AB | 0S1 | A
A 0AB |
B B1 |
Departamento de Ciencias de la Computacin
Ej empl o
Emnacn de
regas de
redenomnacn
S A | B
G = ({0,1}, {S, A, B, C}, S, P)
S AB | 0S1 | 0AB | 0A | 0B | B1 | 0 | 1 |
A 0AB | 0B | 0A | 0
B B1 | 1
G = ({0,1}, {S, A, B, C}, S, P)
S AB | 0S1 | A | B |
A 0AB | 0B | 0A | 0
B B1 | 1
Departamento de Ciencias de la Computacin
Ej erci ci o
G = ({,+}, {Z, E, F, G, P, O, S, T}, Z, P)
Z E + T
E E | S + F | T
F F | FP | P
P G
G G | GG | F
T T * |
O E | E + F | T | S
S
Departamento de Ciencias de la Computacin
Asoci ati vi dad de l os operadores
La asocatvdad de un operador bnaro
defne cmo se operan tres o ms
operandos.
Por a zda: se evaan de zda. a dcha. Es
a que utzan a mayora de os engua|es.

E|empo "b#a#3.8".

Prmero se opera "b" con "a" y despus


e resutado con "3.8"
Muchos de os operadores no son
conmutatvos.
Departamento de Ciencias de la Computacin
Asoci ati vi dad
Cuando a asocatvdad de un operador
es por a zquerda, a rega sntctca
en a que ntervene dcho operador
debe ser recursva por a zquerda, y
anogamente por a derecha.
Departamento de Ciencias de la Computacin
Precedenci a
La precedenca de un operador
especfca e orden reatvo de cada
operador respecto a os dems
operadores.
E|. "2%3#4" con mayor precedenca de #,
prmero se operara e 3 y e 4, y e
resutado con e 2
Departamento de Ciencias de la Computacin
Precedenci a
En a mayora de os engua|es os
operadores mutpcatvos tenen
mayor preferenca que os adtvos.
Uso de parntess parntess para agrupar os
operadores segn a convenenca de
programador y eudr as precedencas
y asocatvdades defndas en e
engua|e.
Departamento de Ciencias de la Computacin
Ej empl o de precedenci a
Supngase os operador "+" y "-" con
asocatvdad por a zquerda y os
operadores "*" y "/" con asocatvdad
por a derecha.
Precedenca habtua: "*" y "/" mayor
precedenca que "+" y "-" y os
parntess a mxma preferenca.
Gramtca?
Departamento de Ciencias de la Computacin
Sol uci n al ej empl o de precedenci a
E E + T
E E - T
E T
T F * T
T F / T
T F
F (E)
F n
Cmo sera e rbo asocado a
a sguente sentenca?
12 - 4 - 6 / 2 / 2
Departamento de Ciencias de la Computacin
Sol uci n al ej empl o de precedenci a
E E + T
E E - T
E T
T F * T
T F / T
T F
F (E)
F n
12 - 4 - 6 / 2 / 2
E
T
E
T
-
/
(4)
T
/
T
F
n
-
F
n
F
n
F
n
(2)
(6)
(2)
(12)
E
T
F
n
Departamento de Ciencias de la Computacin
Gramti ca correcta
La gramtca debe refe|ar a
precedenca y asocatvdad de os
operadores puesto que a mayora de
os engua|es ob|eto no tenen
precedenca o asocatvdad.
Departamento de Ciencias de la Computacin
Lenguaj es y procesadores de l enguaj e
Lengua|e naturaes
Lengua|es artfcaes
Lengua|es de programacn
Procesadores de engua|e Procesadores de engua|e
Compador
Interprete
Compador-Interprete
Departamento de Ciencias de la Computacin
Procesador de l enguaj e: partes
Taba de smboos e dentfcadores
Anazador xco
Anazador sntctco
Anazador semntco
Generador de cdgo
Optmzador de cdgo
Gestn de memora
Recuperacn de errores detectados
Departamento de Ciencias de la Computacin
Fases de un compi l ador
Programa fuente
Anazador xco
Anazador sntctco
Anazador semntco
Generacn de cdgo ntermedo
Optmzador de cdgo ntermedo
Generador/optmzador de cdgo ob|eto
Programa ob|eto
Gestn
de
errores
Taba de
smboos
A
n

s
Departamento de Ciencias de la Computacin
Organi zaci n de l as fases en front end y
back end
Programa fuente
Front
end
Anss xco
Anlisis sintctico
Generacn de
cdgo ntermedo
Anss
semntco
Cdgo ntermedo
Back
end
Optmzacn
cdgo ntermedo
Generacn
cdgo ob|eto
Cdgo ob|eto
Optmzacn
cdgo ob|eto
Departamento de Ciencias de la Computacin
Front end y back end
Front end:
fases de anss y generacn de cdgo
ntermedo.
depende de engua|e fuente y es
ndependente de engua|e ob|eto.
Back end:
fases de generacn y optmzacn de cdgo.
depende de engua|e ob|eto y es
ndependente de engua|e fuente.
Departamento de Ciencias de la Computacin
Ti pos de anl i si s si ntcti co.
Descendente.
Anss descendente: se parte de a raz de
rbo (smboo nca de a gramtca) y se
van apcando regas por a zquerda
obtenendo una dervacn por a zda. de
smboo nca. Las ho|as de rbo tendrn os
tokens que nos devueve e anazador xco.
Ascendente
Anss ascendente: se empeza por as ho|as
(tokens) y se van creando os nodos
ntermedos hasta egar a a raz (smboo
nca).
Departamento de Ciencias de la Computacin
Ej empl o
E|.: Dada a entrada "num*num+num"
y a gramtca:
E E + T | T
T T * F | F
F num
obtener as dervacones por ambos
mtodos de anss
Departamento de Ciencias de la Computacin
Ej empl o de anl i si s si ntcti co: descendente
Producciones:

E E + T

E T

T T * F

T F

F num

F num

T F

F num
E
T
T
F
T
num
num
+
*
num
E
F
F
Gramtica
E E + T | T
T T * F | F
F num
Departamento de Ciencias de la Computacin
Ej empl o de anl i si s si ntcti co: ascendente
Producciones:

F num

T F

F num

T T * F

E T

F num

T F

E E + T
E
T
T
F T
num num +
*
num
E
F
F
Gramtica
E E + T | T
T T * F | F
F num
Departamento de Ciencias de la Computacin
Gramti cas que permi ten un anl i si s en ti empo
l i neal O( n)
Anss descendente: gramtcas LL(k)
Anss ascendente: gramtcas LR(k)
L es left to right: a secuenca de tokens de
entrada se anaza de zquerda a derecha.
L/R es left-most/right-most: obtene a
dervacn por a zquerda/derecha.
k es e nmero de smboos de entrada que es
necesaro conocer en cada momento para
poder hacer e anss.
Departamento de Ciencias de la Computacin
Gramti cas que permi ten un anl i si s en ti empo
l i neal O( n)
E|.: LL(2): cadenas
anazadas de zquerda a derecha
dervando e no termna que quede por
dervar ms a a zquerda
necesta mrar dos tokens.
Departamento de Ciencias de la Computacin
Ej empl o
Dsear una gramtca no ambgua que
genere todos os nmeros enteros sn
sgno que sean pares, consderando
que e 0 es par tambn.
N D N
N Dgpar
D 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Dgpar 0 | 2 | 4 | 6 | 8
Departamento de Ciencias de la Computacin
Ej erci ci o
Sea a gramtca
S c A d
A a b
A a
y a cadena de entrada cad
Construr e rbo sntctco
Ou paso reaza para a generacn de
rbo?
Departamento de Ciencias de la Computacin
Ej erci ci o
S
c A d
S
c A d
a b
S
c A d
a
error
A a b
S c A d
A a
Gramtica
S c A d
A a b
A a
Departamento de Ciencias de la Computacin
Ej erci ci o
Sea a gramtca
S a S b S
S b S a S
S
y a cadena de entrada abab
Construr dos rboes sntctco
Ou paso reaza para a generacn de
rbo?
Departamento de Ciencias de la Computacin
Ej erci ci o
S
S S

S S

S
S S

S S

Gramtica
S a S b S
S b S a S
S
Cadena Cadena
abab
Departamento de Ciencias de la Computacin
Ej erci ci o
Consderese a gramtca ndependente de
contexto G = ({*,+, a}, {S}, S, P).
S S S +
| S S *
| a
Demostrar como se puede generar a cadena
aa+a*
Construr e rbo sntctco para esta cadena
Ou engua|e genera esta gramtca?
Departamento de Ciencias de la Computacin
Ej empl o
Dsear una gramtca no ambgua para a
decaracn de varabes enteras, carcter o rea
en C.
Debe admtr decaracones de tpo:
nt ,|; char c,r;
foat f, f2;
lista_decl decl lista_decl
| decl
decl tipo lista_var ';'
lista_var ident ',' lista_var
| ident
tipo int
| char
| float
Departamento de Ciencias de la Computacin
Ej empl o
Dada a gramtca sguente, escrbe
as dervacones por a zquerda y os
rboes de anss gramatca para as
sguentes expresones:
3 + 4 * 5 - 6
3 * (4 - 5 + 6)
3 - (4 + 5 * 6)
expr expr opsuma term
| term
opsuma '+'
| '-'
term opmult factor
| factor
opmult '*'
factor '(' expr ')'
| num
Departamento de Ciencias de la Computacin
Ej empl o
Dada a sguente gramtca de
expresones smpfcadas tpo LISP.
Escrbe una dervacn por a zquerda
y otra por a derecha para a cadena
( a 23 ( m x y ) )
dbu|a rbo de anss
gramatca para esta cadena
list '(' list_exp ')'
list_exp list_expr expr
| expr
expr atomo
| list
atomo numero
| identificador

También podría gustarte