Академический Документы
Профессиональный Документы
Культура Документы
Gramáticas
Ejemplo:
O S P
S A T
P V
A el
A un
T niño
T perro
V corre
V camina
Gramáticas
T niño
•S V es la variable de inicio.
•T={a,b}
S aSb •V={S}
•S=S
S •P={SaSb, S}
S aSb ab
Una derivación es la obtención de una palabra u a
partir de una palabra v, ambas pertenecientes a
(V+T)*, aplicando una regla de producción:
a VF transparencia previa.
a B bB
B
Ba
b Ir derivando la palabra corresponde
a ir cambiando de estado interno (la
variable), y escribiendo.
Gramáticas regulares)
•SaT
•TSb
•S
Más ejemplos:
S SS | ( S ) |
donde T={(,)}, V={S}. ¿Lenguaje?
S (S) ()
S (S) (SS) ((S)S) ((S)(S)) (()(S)) (()())
Más ejemplos:
S aSa | bSb |
donde T={a,b}, V={S}. ¿Lenguaje?
Ejercicios:
G 1: G2:
S XaaX S XY
X aX | bX | X aX | bX | a
Y Ya | Yb | a
SXX
XaXb |
GLC "prototípicas"
SaSb | X
XbXa |
GLC, un ejemplo más complejo
10010011010010110
inicio parte central final
00110100
A B C D
Cantidad de 0’s:
A: , ó termina en 1 •la misma a cada lado
C: , ó comienza con 1 •al menos uno
GLC, un ejemplo más complejo
10010011010010110
inicio parte central final
A B C S → ABC
A → | U1
00110100 U → 0U | 1U |
C → | 1U
D
B → 0B0 | 0D0
Cantidad de 0’s: D → 1U1 | 1
•la misma a cada lado
•al menos uno
Derivaciones y árboles
S XY
X aaX |
Y Yb |
S XY aaXY aaXYb aaaaXYb aaaaXb aaaab
X Y S XY aaXY
aaaaXY aaaaY
aaaaYb aaaab
a a X Y b
SR aaaab :
a a X S XY XYb
Xb aaXb
aaaaXb aaaab
Derivaciones y árboles
S
•En la raíz va S.
X Y
•En las hojas, terminales o .
a a X Y b •Las derivaciones extremas,
L y R, corresponden a
a a X hacer recorridos del árbol
en pre-orden y post-orden,
respectivamente.
E E + E | (E) | V
E Vx|y|z E
E + E E + E
x+y+z
V E + E E + E V
x V V V V z
y z x y
T o t a l = p r e c i o + i v a ; Analizador
léxico
asignación
Parser
Total := Expresión
id + id
precio iva
E E + E | EE | (E) | V
E Vx|y|z E
E E E + E
V E + E xy+z E E V
x V V V V z
y z x y
S La mayoría de los
lenguajes lo resuelven
if b then S else S
asignando el else al if
más cercano.
if b then S a
a
S
if b then S
if b then S else S
a a
GLC: ambigüedad
E E + E | EE | (E) | V
Vx|y|z
•Genera lo mismo, pero
obliga al árbol a
ET|E+T reconocer la prioridad
TF|TF de la multiplicación.
F (E) | V •Java o C++ aplican algo
Vx|y|z análogo para resolver
los else ambiguos.
GLC: ambigüedad
L {a nb nc m } {a nb mc m }
S S1 | S2 S1 S1c | A S 2 aS 2 | B
A aAb | B bBc |
Ergo:
S → aSb | bSaSb | T
T→S|
S aSb aaSbb
abSaSbb ... Problema:
aTb
bSaSb baSbaSb ¿Cuándo
...
parar?
T S ...
GLC: simplificación
Ejemplo:
S a | Xb | aYa •Eliminamos X
XY| •A partir de SXb se agrega
Yb|X Sb, pues X es anulable.
•A partir de SaYa se agrega
Anulables: X e Y. Saa, pues Y es anulable,
S a | Xb | aYa | b | aa
XY
Yb|X
Eliminación de producciones nulas
Otro ejemplo:
S aMb S aMb
Sustituimos
M aMb M S ab
M M aMb
M ab
Anulables: M
Eliminación de producciones unitarias
Ejemplo: S aX | Yb
XS
Y bY | b | X
•Como X * S, se agregan XaX , XYb
•Como Y * X... No se agrega nada.
•Como Y * S, se agregan YaX , YYb
•Finalmente, eliminamos las producciones unitarias
XS y YX.
S aX | Yb
X aX | Yb
Y bY | b | aX | Yb
Eliminación de variables inútiles
S aSb SX
S X aX Y es inútil: no
SX X hay forma de que
aparezca en una
X aX Y bX derivación!
S uXv w
•Si esto nunca ocurre, es inútil.
S aS | A | C U={a,b}
Aa U={a,b,A}
U={a,b,A,S}
B aa
U={a,b,A,S,B}
C aCb
Eliminación de variables inútiles
S aS | A | C U={a,b} S aS | A
Aa U={a,b,A}
U={a,b,A,S}
Aa
B aa
U={a,b,A,S,B} B aa
C aCb
Eliminación de variables inútiles
S aS | A
Generamos
Aa grafo de
dependencia S A B
B aa
B no es alcanzable
Es inútil. S aS | A
Aa
Eliminación de variables inútiles
Simplificación de gramáticas:
S AS S AS
Está en FNC
S a S AAS
A SA A SA
No está en FNC
Ab A aa
Forma Normal de Chomsky (FNC)
Y listo.
S AV1
•Llevar GLC a la forma normal de V1 BTa
Chomsky es relativamente fácil. A TaV2
V2 TaTb
•Tener la GLC en FNC sirve para varias
cosas, prácticas y teóricas. B ATc
Ta a
•La más importante: para parsear en Tb b
tiempo polinomial en |w|.
Tc c
CYK
A BB k\j 1 2 3 4 5
Aa 1 a a b b b
B AB 2 aa ab bb bb
Bb
3 aab abb bbb
aabbb
5 aabbb
S AB
CYK
A BB
Aa
a a b b b
B AB
A A B B B
Bb
aa ab bb bb
aabbb
S AB
CYK
A BB
Aa
a a b b b
B AB
A A B B B
Bb
aa ab bb bb
S,B A A
aab abb bbb
Variables que
generan las
subpalabras de aabb abbb
largo 2
aabbb
S AB
CYK
A BB
a a b b b
Aa
A A B B B
B AB
Bb aa ab bb bb
S,B A A
aab abb bbb
Variables que S,B A S,B
generan las
subpalabras aabb abbb
de largo 5 (o A S,B
sea, w)
aabbb
S,B
CYK
Input Pila
Estados
input
a a
pila
b tope c
h Reemplaza h
e e
$ $
a, c
q1 q2
input
a a
pila c
b tope b
h Guarda h
e ("push")
e
$ $
a,b
q1 q2
input
a a
pila
b tope
h Saca h
e ("pop")
e
$ $
q1 a, q2
input
a a
pila
b tope b
h Sin cambio h
e e
$ $
PDA (Autómatas de pila)
q2
a, b c
q1 q1 ,b c q2
a, b c q3
No determinismo Transición
M = ( Q, , q0, F )
: Q({})({}) 2Q({})
PDA, ejemplo
a, a b, a
q0 , q b, a q , $ $ q
1 2 3
PDA, ejemplo
Input
a a a b b b
$
Pila
estado a, a b, a
actual
q0 , q b, a q , $ $ q
1 2 3
PDA, ejemplo
Input
a a a b b b
$
Pila
a, a b, a
q0 , q1 b, a q2 , $ $ q3
PDA, ejemplo
Input
a a a b b b a
$
Pila
a, a b, a
q0 , q1 b, a q2 , $ $ q3
PDA, ejemplo
Input a
a a a b b b a
$
Pila
a, a b, a
q0 , q1 b, a q2 , $ $ q3
PDA, ejemplo a
Input
a
a a a b b b a
$
Pila
a, a b, a
q0 , q1 b, a q2 , $ $ q3
PDA, ejemplo a
Input
a
a a a b b b a
$
Pila
a, a b, a
q0 , q1 b, a q2 , $ $ q3
PDA, ejemplo
Input a
a a a b b b a
$
Pila
a, a b, a
q0 , q1 b, a q2 , $ $ q3
PDA, ejemplo
Input
a a a b b b a
$
Pila
a, a b, a
q0 , q1 b, a q2 , $ $ q3
PDA, ejemplo
Input
a a a b b b
$
Pila
a, a b, a
acepta
q0 , q1 b, a q2 , $ $ q3
PDA, ejemplo
L {a b : n 0}
n n
a, a b, a
q0 , q1 b, a q2 , $ $ q3
PDA, otro ejemplo
L( M ) {ww }R
a, a a, a
b, b b, b
q0 , q1 , $ $ q2
PDA, otro ejemplo
Input
a b b a
$
Pila
a, a a, a
b, b b, b
q0 , q1 , $ $ q2
PDA, otro ejemplo
Input
a b b a a
$
Pila
a, a a, a
b, b b, b
q0 , q1 , $ $ q2
PDA, otro ejemplo
Input
b
a b b a a
$
Pila
a, a a, a
b, b b, b
q0 , q1 , $ $ q2
PDA, otro ejemplo
Input
b
a b b a a
$
Pila
a, a a, a
b, b b, b
q0 , q1 , $ $ q2
PDA, otro ejemplo
Input
b
a b b a a
$
Pila
a, a a, a
b, b b, b
q0 , q1 , $ $ q2
PDA, otro ejemplo
Input
a b b a a
$
Pila
a, a a, a
b, b b, b
q0 , , $ $ q2
q1
PDA, otro ejemplo
Input
a b b a
$
Pila
a, a a, a
b, b b, b
acepta
q0 , q1 , $ $ q2
Guardando strings
q1 a, b w q2
Guardando strings
a, b cdf
q1 q2
input
a a
c string
pila d guardado
b top f
h Guardar h
e e
$ $
Y otro ejemplo...
L( M ) {w : na nb }
a, $ 0$ b, $ 1$
a, 0 00 b, 1 11
a, 1 b, 0
q1
, $ $ q2
Input
a b b a a b
$
a, $ 0$ b, $ 1$
Pila
a, 0 00 b, 1 11
a, 1 b, 0
q1
, $ $ q2
Input
a b b a a b
0
$
a, $ 0$ b, $ 1$
Pila
a, 0 00 b, 1 11
a, 1 b, 0
q1
, $ $ q2
Input
a b b b a a
0
$
a, $ 0$ b, $ 1$
Pila
a, 0 00 b, 1 11
a, 1 b, 0
q1
, $ $ q2
Input
a b b b a a
1
$
a, $ 0$ b, $ 1$
Pila
a, 0 00 b, 1 11
a, 1 b, 0
q1
, $ $ q2
Input
a b b b a a 1
1
$
a, $ 0$ b, $ 1$
Pila
a, 0 00 b, 1 11
a, 1 b, 0
q1
, $ $ q2
Input
a b b b a a 1
1
$
a, $ 0$ b, $ 1$
Pila
a, 0 00 b, 1 11
a, 1 b, 0
q1
, $ $ q2
Input
a b b b a a
1
$
a, $ 0$ b, $ 1$
Pila
a, 0 00 b, 1 11
a, 1 b, 0
q1
, $ $ q2
Input
a b b b a a
$
a, $ 0$ b, $ 1$
Pila
a, 0 00 b, 1 11
a, 1 b, 0
acepta
q1
, $ $ q2