Sie sind auf Seite 1von 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) tEAE
(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 eo e1 x ei ej y 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 eo e1 b a e2 b

Si varias transiciones van de un mismo estado inicial a un mismo estado final, con distintos smbolos, se pueden juntar

a eo e1 a,b e2

a,b

Procesadores de Lenguaje Ingeniera en Informtica

R.12

Ejemplos de autmatas finitos

0 eo

e1 [1-9] e2

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

Nmeros naturales

[0-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 bits bit 1 bit 0 bit 1

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: Axioma: fbf Producciones: fbf p fbf 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

fbf

fbf

fbf

fbf

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)
R.27

Procesadores de Lenguaje Ingeniera en Informtica

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 TERMINAL <no terminal> Metasmbolo ::= Equivalencia | Alternativa 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 R.29

Recursividad permitida

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 + 0 Dgito 1 9 Dgito

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 nt siendo t T y n, no, n1 N

Forma normal de Greibach


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

Procesadores de Lenguaje Ingeniera en Informtica

R.34