Está en la página 1de 35

Procesadores de Lenguaje

Repaso. Lenguajes formales


Ingeniera en Informtica
Facultad de Informtica Universidad Complutense de Madrid
Curso 2009-2010
Profesor
Federico Peinado
Elaboracin del material
Jos Luis Sierra
Federico Peinado
Procesadores de Lenguaje
Ingeniera en Informtica R.1
Lenguajes formales
Un lenguaje formal es un conjunto (finito o infinito) de
cadenas finitas de smbolos primitivos
Ej: El lenguaje Nmero es simplemente el conjunto infinito
de cadenas finitas formadas con los dgitos
0, 1, 2, 3, 4, 5, 6, 7, 8 y 9
Dichas cadenas estn formadas gracias a un alfabeto y a
una gramtica que estn formalmente especificados
El alfabeto es un conjunto finito no vaco de smbolos
La gramtica es un conjunto finito de reglas para formar
cadenas finitas juntando smbolos del alfabeto
A cada cadena de smbolos de un lenguaje formal se le
llama frmula bien formada (o palabra) del lenguaje
Procesadores de Lenguaje
Ingeniera en Informtica R.2
Clasificacin de gramticas formales
Chomsky clasific jerrquicamente las gramticas
formales que generan lenguajes formales, en estos tipos:
Tipo 3: Gramticas regulares que generan lenguajes
regulares
Tipo 2: Gramticas incontextuales que generan lenguajes
incontextuales
Tipo 1: Gramticas contextuales que generan lenguajes
contextuales
Tipo 0: Gramticas libres que generan lenguajes sin ningn
tipo de restriccin
Cuanto menor es el tipo, mayor es el poder expresivo del
lenguaje generado y ms complejidad tiene su tratamiento
por parte de una mquina
Procesadores de Lenguaje
Ingeniera en Informtica R.3
Lenguajes regulares
Un lenguaje regular es un lenguaje formal que tiene
estas caractersticas:
Puede ser descrito mediante una expresin regular
(expresar de forma compacta cmo son todas las cadenas
de smbolos que le pertenecen)
Puede ser generado mediante una gramtica regular
(obtener todas las cadenas de smbolos que le pertenecen)
Puede ser reconocido mediante un autmata finito
(saber si una cadena de smbolos pertenece a l o no)
Todas estas caractersticas facilitan mucho su
tratamiento computacional, por eso nos interesan los
lenguajes regulares!
Procesadores de Lenguaje
Ingeniera en Informtica R.4
Expresiones regulares (ERs)
El conjunto de expresiones regulares sobre un alfabeto
A se denomina ER(A) y slo contiene expresiones
formadas mediante estas reglas:
ER(A) y denota el lenguaje {}, siendo el vaco
ER(A) y denota el lenguaje {}, siendo la cadena vaca
Si x A, x ER(A) y denota el lenguaje {x}
Si H ER(A) y K ER(A), con lenguajes denotados L
H
y L
K
(H | K) ER(A) y denota el lenguaje L
H
L
K
(Conjunto de todas las cadenas de H o de K)
(HK) ER(A) y denota el lenguaje L
HK
siendo
L
HK
= {hk tal que h L
H
y k L
K
}
(Conjunto de todas las concatenaciones posibles de una cadena de H y otra de K)
H* ER(A) y denota el lenguaje L
H*
siendo
L
H*
= {} {a tal que a L
H
y L
H*
}
(Conjunto de todas las concatenaciones sucesivas posibles de cadenas de H)
Los parntesis () asocian operadores a cadenas de
smbolos. Si no aparecen, repetir * es ms prioritario que
concatenar y concatenar ms prioritario que alternar |
Procesadores de Lenguaje
Ingeniera en Informtica R.5
Extensiones a la notacin de las expresiones regulares
Estas extensiones no amplan la expresividad, pero
hacen mucho ms cmodo expresar lenguajes con ERs
H? H | (Se llama opcionalidad ? y tiene la misma
prioridad que repeticin *)
H+ H(H)* (Se llama cierre positivo + y tiene la misma
prioridad que repeticin *)
[x
n
- x
m
] x
n
| x
n+1
| x
n+2
| | x
m
(Se llama rango [ - ] y slo se
usa para alfabetos totalmente ordenados)
Ej: Intervalos de nmeros naturales como [3-9] o de
caracteres ASCII como [f-m]
\x carcter x (Se llama escape de metacaracteres \ y se
usa para incluir en el lenguaje definido caracteres que
actan como operadores, es decir son metacaracteres, en
las expresiones regulares)
Ej: \* para denotar el carcter *
Ej: \\ para denotar el carcter \

Procesadores de Lenguaje
Ingeniera en Informtica R.6
Ejemplos de expresiones regulares
Descripcin del lenguaje de las cadenas que empiezan
por una a y continan con as y bs
a(a|b)*
Descripcin del lenguaje de las cadenas que empiezan
por a, continan con bs y cs y terminan en d
a(b|c)*d
Descripcin del lenguaje de las cadenas formadas por
trozos de cadena que pueden empezar (o no) por una a
y continan con un nmero que tenga al menos un dgito;
adems terminan siempre en asterisco *
(a?[0-9]+)*\*
Procesadores de Lenguaje
Ingeniera en Informtica R.7
Gramticas formales
Las gramticas formales se definen con una tupla
<T, N, n
0
, P> siendo:
T el alfabeto de smbolos terminales
(Smbolos que forman parte directamente de las cadenas del lenguaje)
N el alfabeto de smbolos no terminales
(Smbolos ms abstractos que representan posibles partes de las cadenas del lenguaje)
n
0
N, el no terminal inicial o axioma
P el conjunto de reglas de produccin o producciones de la
gramtica
Puede representarse como
x
n
y

x
n
y
::=
donde n N y
x
,
y
, (T N)*
Procesadores de Lenguaje
Ingeniera en Informtica R.8
Gramticas regulares
Las gramticas regulares son de uno de estos dos tipos:
Son gramticas regulares a derechas, es decir, todas sus
producciones siguen una de estas tres formas:
n
n t
n t n
donde t T y n, n N
Son gramticas regulares a izquierdas, es decir, todas sus
producciones siguen una de estas tres formas:
n
n t
n n t
donde t T y n, n N
Procesadores de Lenguaje
Ingeniera en Informtica
Autmatas finitos (AFs)
Los autmatas finitos se definen con una tupla
<E, e
o
, A, t, F> siendo:
E el conjunto finito y no vaco de estados posibles
e
o
E, el estado inicial del autmata
A el alfabeto de entrada que acepta el autmata
t, la funcin de transicin de estados
F E, el conjunto de estados finales
Hay dos tipos de autmatas finitos
Autmatas finitos deterministas (AFDs)
t E A E
(Con cada smbolo de entrada se pasa de un estado del autmata a otro)
Autmatas finitos no deterministas (AFNDs)
t E (A {}) (E)
(Con algn smbolo de entrada, o con la cadena vaca, se pasa de uno de los
estados del autmata a otro conjunto no vaco de estados - significa particin -)
R.9
Procesadores de Lenguaje
Ingeniera en Informtica
Comportamiento de un autmata finito
Sirve para reconocer cadenas de smbolos de un
lenguaje regular, para lo que:
1. Parte del estado inicial
2. Recibe uno a uno los smbolos de la cadena de entrada
En un AFND este paso a veces se ignora, pudiendo
ocurrir una transicin espontnea (-transicin)
3. Aplica la funcin de transicin para cambiar su estado
Un AFND puede estar en varios estados a la vez
4. Si quedan smbolos por procesar, vuelve al paso 2
5. Si no quedan smbolos por procesar
Si se ha alcanzado algn estado final la cadena es
reconocida como perteneciente al lenguaje [Fin]
Si no se ha alcanzado ningn estado final la cadena es
rechazada por ser no perteneciente al lenguaje [Fin]
R.10
Procesadores de Lenguaje
Ingeniera en Informtica
Notaciones para autmatas finitos
Tabla de transicin de estados
La permanencia en un estado se representa como una
transicin de un estado otra vez al mismo estado
Se pueden dejar transiciones sin definir (funcin de
transicin de estados parcial), dejando huecos o con guin -
Significa saltar a un estado final de error y rechazar la
cadena por ser no perteneciente al lenguaje
Estados/Smbolos x y
e
o
e
i
-
e
1
e
j
e
k


R.11
Procesadores de Lenguaje
Ingeniera en Informtica
Notaciones para autmatas finitos
Diagrama de transicin de estados
Si varias transiciones van de un mismo estado inicial a un
mismo estado final, con distintos smbolos, se pueden juntar
e
o
e
1
a
a
e
2
b
a
b
e
o
e
1
a
a,b
e
2
a,b
R.12
Procesadores de Lenguaje
Ingeniera en Informtica
Ejemplos de autmatas finitos
e
o
[1-9]
e
2
[0-9]
e
1
0
e
o
+,-
e
1
[1-9]
e
3

0
e
2
[0-9]
e
o
[a-z],[A-Z]
e
1
[a-z],[A-Z],[0-9]
Nmeros naturales
Nmeros naturales con signo
Identificadores (bsicos)
R.13
Procesadores de Lenguaje
Ingeniera en Informtica
Expresiones regulares, gramticas regulares y autmatas finitos
Las expresiones regulares (ERs), las gramticas
regulares, los autmatas finitos deterministas (AFDs) y los
no deterministas (AFNDs) son equivalentes en cuanto a
expresividad
Las ERs describen, las gramticas regulares generan y los
AFs permiten reconocer cualquier lenguaje regular
Existen demostraciones formales para convertir de ER a
AFND, de AFND a AFD y de AFD a ER, as como para
comparar las ERs con las gramticas regulares
R.14
Procesadores de Lenguaje
Ingeniera en Informtica R.15
Lenguajes incontextuales
Un lenguaje incontextual es un lenguaje formal que tiene
estas caractersticas:
Puede ser generado mediante una gramtica incontextual
(obtener todas las cadenas de smbolos que le pertenecen)
Puede ser reconocido mediante un autmata con pila
(saber si una cadena de smbolos pertenece a l o no)
Aunque son ms complejos que los regulares, estas
caractersticas facilitan su tratamiento computacional, por
eso tambin nos interesan los lenguajes incontextuales
Procesadores de Lenguaje
Ingeniera en Informtica R.16
Gramticas incontextuales
Las gramticas incontextuales tienen producciones
n donde n N y (T N)*
Ejemplo: El lenguaje de los nmeros binarios
G
bin
Terminales: 0, 1
No terminales: bits, bit
Axioma: bits
Producciones:
bits bits bit
bits bit
bit 0
bit 1
Procesadores de Lenguaje
Ingeniera en Informtica R.17
Ms sobre gramticas formales (incontextuales)
Las cadenas (T N)* se llaman formas sentenciales
Las cadenas T* se llaman sentencias o frases
Una gramtica incontextual G genera en (T N)*
relaciones de derivacin inmediata
G

G
( es derivable inmediatamente de ) si y slo si se
dan estas tres condiciones:

o
n
1

o

1
n
0
P
siendo
o
,
1
y
0
(T N)* y n N
Las relaciones de derivacin
G
* son el resultado de
hacer el cierre reflexivo-transitivo de
G

G
* ( es derivable de ) si y slo si existe una
secuencia de derivaciones inmediatas que nos permita llegar
a partiendo de
Procesadores de Lenguaje
Ingeniera en Informtica R.18
Ejemplo de derivacin
G
bin
bits bits bit bits bit bit
bit bit bit 1 bit bit 1 0 bit 1 0 1
Procesadores de Lenguaje
Ingeniera en Informtica R.19
Ms sobre gramticas formales (incontextuales)
El lenguaje generado por una gramtica G es L(G)
L(G) = { tal que T* y n
0
*
G
}
(Todas las posibles sentencias derivables del axioma de la gramtica n
0
)
Si
G
* puede haber slo una secuencia de
derivacin inmediata (derivacin de desde ) o
varias posibles
Cada una se representa as:
G

o
,
o

1
, ,
n

G

O en forma compacta:
G

o

G

1

G
.
G

Derivacin por la izquierda: aquella en la que cada


derivacin inmediata
x

G

y
usa la produccin n
0
P
para el n situado lo ms a la izquierda posible en
x
Derivacin por la derecha: aquella en la que cada
derivacin inmediata
x

G

y
usa la produccin n
0
P
para el n situado lo ms a la derecha posible en
x
Procesadores de Lenguaje
Ingeniera en Informtica R.20
rboles de derivacin
Un rbol de derivacin de una gramtica G cumple:
Los nodos estn etiquetados con elementos T N {}
Los hijos de los nodos estn ordenados
Se forma de la siguiente manera:
Un nico nodo etiquetado con n
0
es rbol de derivacin
Si X es rbol de derivacin, h uno de sus nodos hoja
etiquetado con n N y n una de sus producciones,
se puede construir otro rbol de derivacin X as:
Si es ,se aade a h un hijo etiquetado con
Si no, se aaden a h tantos hijos como smbolos tenga ,
etiquetados en orden con dichos smbolos
Si todas sus hojas estn etiquetadas con o terminales, el
rbol de derivacin se llama estructura de la sentencia
formada al concatenar las etiquetas de dichas hojas
Todas las sentencias tienen al menos una estructura
Una sentencia puede tener varias estructuras distintas
Si ocurre en algn caso, la gramtica G es ambigua!
Procesadores de Lenguaje
Ingeniera en Informtica R.21
Ejemplo de rbol de derivacin (estructura)
G
bin
bits
bits
bit
bit
bits
bit
1
0
1
Procesadores de Lenguaje
Ingeniera en Informtica
Ejemplo: El lenguaje de las frmulas bien formadas (fbf) de la
lgica de primer orden
p representa cualquier predicado booleano
R.22
Ejemplo de gramtica incontextual ambigua
G
fbf
Terminales: p, , ,
No terminales: fbf
Axioma: fbf
Producciones:
fbf p
fbf fbf
fbf fbf fbf
fbf fbf fbf
Procesadores de Lenguaje
Ingeniera en Informtica R.23
Ejemplo de gramtica incontextual ambigua
fbf
fbf fbf
fbf
fbf p
p
p
fbf
fbf fbf
p fbf
p

fbf
p
Basta con encontrar dos estructuras distintas para una misma sentencia
de un lenguaje para demostrar que su gramtica es ambigua
p p p
Procesadores de Lenguaje
Ingeniera en Informtica
Autmatas a pila (APs)
Los autmatas a pila se definen con una tupla
<A, P, E, p
o
, e
o
, t, F> siendo:
A el alfabeto de entrada que acepta el autmata
P el alfabeto de la pila
E el conjunto finito y no vaco de estados posibles
p
o
P, el smbolo inicial de la pila
e
o
E, el estado inicial del autmata
t, la funcin de transicin de estados
t E (A {}) P (E P*)
(Con algn smbolo de entrada, o con la cadena vaca, y teniendo en cuenta la cima
de la pila, se pasa de uno de los estados del autmata a otro conjunto no vaco de
estados, sustituyendo el smbolo de la cima de la pila por otros smbolos del alfabeto
de la pila el smbolo ms a la derecha de ellos es la cima de la pila)
F E, el conjunto de estados finales
Comportamiento similar al de un autmata finito:
El comportamiento es no determinista, salvo que t siempre
lleve a un nico estado
R.24
Procesadores de Lenguaje
Ingeniera en Informtica
Ejemplo de autmata a pila
AP
bin
(equivalente a G
bin
)
A = {0, 1}
P = {0, 1, bits, bit, $}
E = {x
0
, x
1
, x
2
}
p
0
= $
e
0
= x
0
Definicin parcial de t:
t(<x
o
,,$>)= {<x
1
,$ bits>}
t(<x
1
,,bits>)= {<x
1
,bit>, <x
1
,bit bits>}
t(<x
1
,,bit>)= {<x
1
,0>, <x
1
,1>}
t(<x
1
,0,0>)= {<x
1
,>}
t(<x
1
,1,1>)= {<x
1
,>}
t(<x
1
,,$>)= {<x
2
,$>}
F = {x
2
}
R.25
Procesadores de Lenguaje
Ingeniera en Informtica R.26
Documentacin tcnica de un lenguaje de programacin
Conjunto de reglas que especifican y permiten verificar la
correccin de las sentencias del lenguaje y que estn
orientadas a los programadores que quieren conocer con
exactitud su sintaxis (principalmente)
La notacin gramatical es til desde el punto de vista del
desarrollador de procesadores de lenguaje, pero no desde el
punto de vista de sus usuarios
Formalismos ms utilizados por ser compactos o visuales:
Notacin BNF (Backus-Naur Form)
Notacin EBNF (Extended Backus-Naur Form)
Diagramas sintcticos
Todos ellos pueden expresar cualquier lenguaje
incontextual (la base de la sintaxis de cualquier lenguaje
de programacin) as que podemos usar el que queramos
Procesadores de Lenguaje
Ingeniera en Informtica R.27
Notacin BNF
TERMINAL Smbolo (ej. una palabra) del lenguaje a definir
(se escribe en letras maysculas)
<no terminal> Smbolo que se define en trminos de otros
smbolos (tanto terminales como no terminales)
(se escribe en letras minsculas y entre <>)
Regla de produccin Descripcin de un smbolo no terminal como
equivalente a 1) una combinacin de terminales
y no terminales, o 2) a la cadena vaca
(Un mismo no terminal puede tener varias reglas de produccin)
Metasmbolo Smbolo propio de la notacin BNF, est reservado
y no puede utilizarse en ningn otro smbolo
::= Equivalencia
(lo de la izquierda equivale a lo de la
derecha; es una regla de produccin)
| Alternativa
(lo de la izquierda o lo de la derecha)
Procesadores de Lenguaje
Ingeniera en Informtica R.28
Sintaxis de los nmeros enteros positivos en notacin BNF
<numero entero> ::= <signo opcional> <secuencia dgitos>
<signo opcional> ::= + | <nada>
<secuencia dgitos> ::= <dgito> | <dgito> <secuencia dgitos>
<dgito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<nada> ::=
Ejemplo en notacin BNF
Procesadores de Lenguaje
Ingeniera en Informtica R.29
Notacin EBNF
Aade metasmbolos nuevos y cambia la forma de presentar
las cosas
BNF
TERMINAL
<no terminal>
Metasmbolo
::= Equivalencia
| Alternativa
Recursividad permitida
EBNF
terminal
No-terminal
Metasmbolo
::= Equivalencia
| Alternativa
(...) Agrupacin
[...] Aparicin opcional
{...} Aparicin 0, 1 o ms veces
(son ERs a la derecha de cada produccin)
Recursividad NO permitida (se suple con {})
Si algn smbolo del lenguaje coincide con un
metasmbolo, el smbolo del lenguaje se pone
entre comillas simples
Procesadores de Lenguaje
Ingeniera en Informtica
Sintaxis de los nmeros enteros positivos en notacin EBNF
Numero-entero ::= [Signo] Secuencia-dgitos
Signo ::= +
Secuencia-dgitos ::= Dgito {Dgito}
Dgito ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
R.30
Ejemplo en notacin EBNF
Procesadores de Lenguaje
Ingeniera en Informtica R.31
Diagramas sintcticos
TERMINAL
No Terminal
Alternativa
Aparicin 0, 1 o ms veces Aparicin opcional
*En las reglas de produccin el no terminal
de la izquierda se deja sin recuadro
Procesadores de Lenguaje
Ingeniera en Informtica R.32
Ejemplo con diagramas sintcticos
Sintaxis de los nmeros enteros positivos en notacin de
diagramas sintcticos
+
Dgito
Dgito
1
0
9
N entero positivo
Dgito

Procesadores de Lenguaje
Ingeniera en Informtica R.33
Crticas, dudas, sugerencias
Federico Peinado
www.federicopeinado.es
Procesadores de Lenguaje
Ingeniera en Informtica R.34
Formas normales
Maneras ms organizadas de expresar una
gramtica incontextual (recomendables para no
cometer errores en la definicin del lenguaje!)
Forma normal de Chomsky
Gramtica incontextual G con todas sus producciones
expresadas segn una de estas dos frmulas:
n n
o
n
1
n t
siendo t T y n, n
o
, n
1
N
Forma normal de Greibach
Gramtica incontextual G con todas sus producciones
expresadas segn esta frmula:
n t
siendo t T y N*

También podría gustarte