Está en la página 1de 35

Procesadores de Lenguaje

Repaso. Lenguajes formales

Profesor
Federico Peinado

Elaboracin del material


Jos Luis Sierra
Federico Peinado

Ingeniera en Informtica
Facultad de Informtica Universidad Complutense de Madrid
Curso 2009-2010
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.1
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.2
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.3
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 LH y LK
 (H | K) ER(A) y denota el lenguaje LH LK
(Conjunto de todas las cadenas de H o de K)

 (HK) ER(A) y denota el lenguaje LHK siendo


LHK = {hk tal que h LH y k LK}
(Conjunto de todas las concatenaciones posibles de una cadena de H y otra de K)

 H* ER(A) y denota el lenguaje LH* siendo


LH* = {} {a tal que a LH y LH*}
(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.4
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 *)
 [xn - xm] xn | xn+1 | xn+2 | | xm (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.5
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.6
Gramticas formales

 Las gramticas formales se definen con una tupla


<T, N, n0, 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)

 n0 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.7
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
nt
 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
nt
 n n t
donde t T y n, n N

Procesadores de Lenguaje
Ingeniera en Informtica R.8
Autmatas finitos (AFs)

 Los autmatas finitos se definen con una tupla


<E, eo, A, t, F> siendo:
 E el conjunto finito y no vaco de estados posibles
 eo 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 -)

Procesadores de Lenguaje
Ingeniera en Informtica R.9
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]

Procesadores de Lenguaje
Ingeniera en Informtica R.10
Notaciones para autmatas finitos

 Tabla de transicin de estados

Estados/Smbolos x y
eo ei -
e1 ej ek

 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

Procesadores de Lenguaje
Ingeniera en Informtica R.11
Notaciones para autmatas finitos

 Diagrama de transicin de estados

a
a a
eo e1 e2
b
b

 Si varias transiciones van de un mismo estado inicial a un


mismo estado final, con distintos smbolos, se pueden juntar

a a,b
eo e1 e2
a,b

Procesadores de Lenguaje
Ingeniera en Informtica R.12
Ejemplos de autmatas finitos

0 e1 [0-9]
eo e2
[1-9] e2
0 [0-9]
Nmeros naturales +,-
eo e1 e3
[1-9]

Nmeros naturales con signo

[a-z],[A-Z],[0-9]
eo e1
[a-z],[A-Z]
Identificadores (bsicos)
Procesadores de Lenguaje
Ingeniera en Informtica R.13
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

Procesadores de Lenguaje
Ingeniera en Informtica R.14
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.15
Gramticas incontextuales

 Las gramticas incontextuales tienen producciones


n donde n N y (T N)*
 Ejemplo: El lenguaje de los nmeros binarios
Gbin
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.16
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:
 on1
 o01
 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.17
Ejemplo de derivacin

Gbin
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.18
Ms sobre gramticas formales (incontextuales)

 El lenguaje generado por una gramtica G es L(G)


L(G) = { tal que T* y n0 *G }
(Todas las posibles sentencias derivables del axioma de la gramtica n0)

 Si G* puede haber slo una secuencia de


derivacin inmediata (derivacin de desde ) o
varias posibles
 Cada una se representa as: G o, oG1, , 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.19
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 n0 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.20
Ejemplo de rbol de derivacin (estructura)

Gbin
bits

bits bit

bits bit 1

bit 0

Procesadores de Lenguaje
Ingeniera en Informtica R.21
Ejemplo de gramtica incontextual ambigua

 Ejemplo: El lenguaje de las frmulas bien formadas (fbf) de la


lgica de primer orden
 p representa cualquier predicado booleano

Gfbf
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.22
Ejemplo de gramtica incontextual ambigua

p p p
fbf
fbf

fbf fbf
fbf fbf

p fbf fbf
fbf fbf p

p p p p

Basta con encontrar dos estructuras distintas para una misma sentencia
de un lenguaje para demostrar que su gramtica es ambigua

Procesadores de Lenguaje
Ingeniera en Informtica R.23
Autmatas a pila (APs)

 Los autmatas a pila se definen con una tupla


<A, P, E, po, eo, 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
 po P, el smbolo inicial de la pila
 eo 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

Procesadores de Lenguaje
Ingeniera en Informtica R.24
Ejemplo de autmata a pila

APbin(equivalente a Gbin)
A = {0, 1}
P = {0, 1, bits, bit, $}
E = {x0, x1, x2}
p0 = $
e0 = x0
Definicin parcial de t:
t(<xo,,$>)= {<x1,$ bits>}
t(<x1,,bits>)= {<x1,bit>, <x1,bit bits>}
t(<x1,,bit>)= {<x1,0>, <x1,1>}
t(<x1,0,0>)= {<x1,>}
t(<x1,1,1>)= {<x1,>}
t(<x1,,$>)= {<x2,$>}
F = {x2}

Procesadores de Lenguaje
Ingeniera en Informtica R.25
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.26
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.27
Ejemplo en notacin BNF

 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> ::=

Procesadores de Lenguaje
Ingeniera en Informtica R.28
Notacin EBNF

 Aade metasmbolos nuevos y cambia la forma de presentar


las cosas

BNF EBNF

TERMINAL terminal

<no terminal> No-terminal

Metasmbolo Metasmbolo
::= Equivalencia ::= Equivalencia
| Alternativa | Alternativa
(...) Agrupacin
[...] Aparicin opcional
{...} Aparicin 0, 1 o ms veces
(son ERs a la derecha de cada produccin)

Recursividad permitida 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 R.29
Ejemplo en notacin EBNF

 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

Procesadores de Lenguaje
Ingeniera en Informtica R.30
Diagramas sintcticos

TERMINAL No Terminal
*En las reglas de produccin el no terminal
de la izquierda se deja sin recuadro

Alternativa

Aparicin 0, 1 o ms veces Aparicin opcional

Procesadores de Lenguaje
Ingeniera en Informtica R.31
Ejemplo con diagramas sintcticos

 Sintaxis de los nmeros enteros positivos en notacin de


diagramas sintcticos

N entero positivo
Dgito
Dgito
+

0
Dgito
1

9

Procesadores de Lenguaje
Ingeniera en Informtica R.32
Crticas, dudas, sugerencias

Federico Peinado
www.federicopeinado.es

Procesadores de Lenguaje
Ingeniera en Informtica R.33
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 non1
n t
siendo t T y n, no, n1 N

 Forma normal de Greibach


 Gramtica incontextual G con todas sus producciones
expresadas segn esta frmula:
n t
siendo t T y N*

Procesadores de Lenguaje
Ingeniera en Informtica R.34

También podría gustarte