Temario Lenguajes Automata

Descargar como doc, pdf o txt
Descargar como doc, pdf o txt
Está en la página 1de 60

Tecnolgico Nacional de Mxico

Instituto Tecnolgico de Acapulco


Educacin tecnolgica con compromiso social

Carrera: ingeniera en sistemas computacionales


Lenguajes y autmatas I
Asignatura

Apuntes

Profesor:

Silvestre Bedolla Solano.

Equipo: 1
Alumnos:
1.
2.
3.
4.
5.
6.

Jos Luis Bautista Gmez


Giovanni Rojo Guzmn
Leobardo Rmulo Hernndez
Adiel Bentez Flores
Julio Cesar Gatica Leyva
Omar Racial Camacho Mariche

Acapulco, Guerrero Noviembre del 201


Pgina 1 de 60

NDICE
Introduccin............................................................................................................. 4
1.1

Alfabeto.......................................................................................................... 5

1.2

Cadena........................................................................................................... 6

1.3. Lenguajes Formales.......................................................................................... 7


1.4 Tipos de Lenguajes formales............................................................................12
1.5 Herramientas computacionales ligadas con lenguajes....................................13
1.6 Estructura de un traductor...............................................................................15
1.7 Fases de un Compilador................................................................................... 16
Bibliografa............................................................................................................. 16
2.1. Definicin formal de una ER............................................................................18
2.2. Operaciones.................................................................................................... 19
2.3 Aplicaciones en problemas reales....................................................................20
Bibliografa............................................................................................................. 20
3.1 Definicin Normal............................................................................................ 22
3.2 Clasificacin de AF........................................................................................... 24
3.3 Conversin de un AFND a AFD........................................................................25
3.4 Representacin de ER usando AFND................................................................27
3.5 Minimizacin de estados en un AF...................................................................28
3.6 Aplicaciones (definicin de un caso de estudio)..............................................30
Bibliografa............................................................................................................. 31
4.1 Definicin formal MT........................................................................................ 33
4.2 Construccin modular de una MT.....................................................................35
4.3 Lenguajes aceptados por la MT........................................................................36
Pgina 2 de 60

Bibliografa............................................................................................................. 38
5.1 Funciones del analizador lxico........................................................................40
5.2 Componentes lxicos, patrones y lexemas......................................................43
5.3 Creacin de Tabla de tokens............................................................................ 44
5.4 Errores lxicos.................................................................................................. 45
5.5 Generadores de analizadores Lxicos..............................................................46
Bibliografa............................................................................................................. 47
6.1

GLC............................................................................................................... 49

6.2 rbol de derivacin.......................................................................................... 50


6.3 Formas normales de Chomsky..........................................................................52
6.4 Diagramas de sintaxis..................................................................................... 53
6.5 Eliminacin de la ambigedad.........................................................................53
6.6

Generacin de matriz predictiva (clculo first y follow)................................55

6.7 Tipos de analizadores sintcticos.....................................................................56


6.8 Manejo de errores............................................................................................ 57
6.9 Generadores de analizadores sintcticos.........................................................58
Bibliografa............................................................................................................. 59
COLUSIN.............................................................................................................. 60

Introduccin

Pgina 3 de 60

En matemticas, lgica, y ciencias de la computacin, un lenguaje formal es un


lenguaje cuyos smbolos primitivos y reglas para unir esos smbolos estn
formalmente especificados.1 2 Al conjunto de los smbolos primitivos se le llama
el alfabeto (o vocabulario) del lenguaje, y al conjunto de las reglas se lo llama la
gramtica formal (o sintaxis). A una cadena de smbolos formada de acuerdo a la
gramtica se la llama una frmula bien formada (o palabra) del lenguaje.
Estrictamente hablando, un lenguaje formal es idntico al conjunto de todas sus
frmulas bien formadas. A diferencia de lo que ocurre con el alfabeto (que debe
ser un conjunto finito) y con cada frmula bien formada (que debe tener una
longitud tambin finita), un lenguaje formal puede estar compuesto por un nmero
infinito de frmulas bien formadas.
Por ejemplo, un alfabeto podra ser el conjunto {a,b}, y una gramtica podra definir a
las frmulas bien formadas como aquellas que tienen el mismo nmero de
smbolos a que b. Entonces, algunas frmulas bien formadas del lenguaje seran:
ab, ba, abab, ababba, etc.; y el lenguaje formal sera el conjunto de todas esas
frmulas bien formadas.
Para algunos lenguajes formales existe una semntica formal que puede interpretar y
dar significado a las frmulas bien formadas del lenguaje. Sin embargo, una
semntica formal no es condicin necesaria para definir un lenguaje formal, y eso
es una diferencia esencial con los lenguajes naturales.
En algunos lenguajes formales, la palabra vaca (esto es, la cadena de smbolos de
longitud cero) est permitida, notndose frecuentemente mediante \epsilon \,, e\,
o \lambda \,.

Pgina 4 de 60

UNIDAD 1:
INTRODUCCIN A LA TEORA DE LENGUAJES FORMALES.

1.1 Alfabeto
ALFABETO Se llama alfabeto a un conjunto finito, no vaco, cuyos elementos se
denominan letras o smbolos. Se denomina palabra a toda secuencia finita de
letras formada con los smbolos de un alfabeto. Se definen los alfabetos por la
enumeracin de los smbolos que contiene.
Pgina 5 de 60

Smbolos:
Es una entidad abstracta que no se puede definir, ya que se dejara como una
axioma. Igual que se define un punto en la geometra.
La cual normalmente los smbolos son letras (a, b, c,. z), dgitos (0,1,9,
caracteres (+, -, *, /,>,< ..). los smbolos pueden estar formados por varias letras o
caracteres.
Alfabeto:
El alfabeto o abecedario es un conjunto de letras, con un determinado orden.
Podramos precisamente decir que el alfabeto es un conjunto de letras (caracteres o
grafemas) de un sistema de escritura, cada una representa aproximadamente un
fonema (consonante o vocal).
1.2 Cadena
Una cadena o palabra es una secuencia finita de smbolos yuxtapuestos. Por ejemplo
a, b, c son smbolos y casa es una cadena.
LONGITUD DE CADENA
La longitud de una cadena w, es el nmero de smbolos que componen una cadena.
Por ejemplo: CASA tiene una longitud 4.
Habitualmente, se emplean las letras minsculas del principio del alfabeto (o dgitos)
para designar a los smbolos y las letras minsculas del final del alfabeto,
normalmente w, x, y y z, para designar cadenas.
CADENA VACIA
La cadena vaca, denotada por E es aquella que presenta cero apariciones de
smbolos, es una cadena que puede construirse en cualquier alfabeto.
CONCATENACIN DE CADENAS
La concatenacin de dos cadenas, es la cadena que se forma al escribir la primera
seguida de la segunda, sin que haya espacio entre ellas.
Por ejemplo la concatenacin de padre y madre es: padremadre.
En la concatenacin de dos cadenas u y v, es pegar las dos cadenas para formar
una nueva.
Ejemplo: sea u= ab, v= ca, w= bb.
Pgina 6 de 60

Entonces:
Uv= abca.
Vw= cabb.
(uv)w= abcabb.
U(vw)= abcabb.
El resultado de la concatenacin de u, v, y w es independiente del orden en que las
operaciones son ejecutadas. Matemticamente esta propiedad es conocida como
asociatividad.
1.3. Lenguajes Formales

En matemticas, lgica, y ciencias de la computacin, un lenguaje formal es


un lenguaje cuyos smbolos primitivos y reglas para unir esos smbolos estn
formalmente especificados. Al conjunto de los smbolos primitivos se le llama
el alfabeto (o vocabulario) del lenguaje, y al conjunto de las reglas se lo llama
la gramtica formal (o sintaxis).
A una cadena de smbolos formada de acuerdo a la gramtica se la llama una frmula
bien formada (o palabra) del lenguaje. Estrictamente hablando, un lenguaje formal es
idntico al conjunto de todas sus frmulas bien formadas.
A diferencia de lo que ocurre con el alfabeto (que debe ser un conjunto finito) y con
cada frmula bien formada (que debe tener una longitud tambin finita), un lenguaje
formal puede estar compuesto por un nmero infinito de frmulas bien formadas.

Por ejemplo, un alfabeto podra ser el conjunto {a,b}, y una gramtica podra definir a
las frmulas bien formadas como aquellas que tienen el mismo nmero de smbolos a
Pgina 7 de 60

que b. Entonces, algunas frmulas bien formadas del lenguaje seran: ab, ba, abab,
ababba, etc.; y el lenguaje formal sera el conjunto de todas esas frmulas bien
formadas.
Para algunos lenguajes formales existe una semntica formal que puede interpretar y
dar significado a las frmulas bien formadas del lenguaje. Sin embargo, una
semntica formal no es condicin necesaria para definir un lenguaje formal, y eso es
una diferencia esencial con los lenguajes naturales.
En algunos lenguajes formales, la palabra vaca (esto es, la cadena de smbolos de
longitud cero) est permitida, notndose frecuentemente mediante, o.
Ejemplos de lenguajes formales
Un conjunto de todas las palabras sobre {a,b}.
El conjunto {an : n} es un nmero primo.
El conjunto de todos los programas
determinado lenguaje de programacin.

sintcticamente

vlidos

en

un

El conjunto de todas las frmulas bien formadas en la lgica de primer orden.


Especificacin de lenguajes formales
Los lenguajes formales se pueden especificar de una amplia variedad de formas,
como por ejemplo:
Cadenas producidas por una gramtica formal
Cadenas producidas por una expresin regular.
Cadenas aceptadas por un autmata, tal como una mquina de Turing.
Las cadenas estn formadas por un conjunto de smbolos que pertenecen a un
mismo lenguaje, existen dos formas de componer una sentencia o funcin con los
smbolos:

Sintaxis
Semntica
Operaciones

Pgina 8 de 60

Se pueden utilizar varias operaciones para producir nuevos lenguajes a partir de otros
dados. Supngase que L1 y L2 son lenguajes sobre un alfabeto comn. Entonces:
La concatenacin L1L2 consiste de todas aquellas palabras de la forma vw donde v
es una palabra de L1 y w es una palabra de L2
La interseccin L1&L2 consiste en todas aquellas palabras que estn contenidas
tanto en L1 como en L2
La unin L1L2 consiste en todas aquellas palabras que estn contenidas ya sea en
L1 o en L2
El complemento ~L1 consiste en todas aquellas palabras producibles sobre el
alfabeto de L1 que no estn ya contenidas en L1
El cociente L1/L2 consiste de todas aquellas palabras v para las cuales existe una
palabra w en L2 tales que vw se encuentra en L1
La estrella L1* consiste de todas aquellas palabras que pueden ser escritas de la
forma W1W2...Wn donde todo Wi se encuentra en L1 y n 0. (Ntese que esta
definicin incluye a en cualquier L*)
La intercalacin L1*L2 consiste de todas aquellas palabras que pueden ser escritas
de la forma v1w1v2w2...vnwn; son palabras tales que la concatenacin v1...vn est
en L1, y la concatenacin w1...wn est en L2
Una pregunta que se hace tpicamente sobre un determinado lenguaje formal L es
cun difcil es decidir si incluye o no una determinada palabra v. Este tema es del
dominio de la teora de la computabilidad y la teora de la complejidad computacional.
Por contraposicin al lenguaje propio de los seres vivos y en especial el lenguaje
humano, considerados lenguajes naturales, se denomina lenguaje formal a los
lenguajes artificiales propios de las matemticas o la informtica, los lenguajes
artificiales son llamados lenguajes formales (incluyendo lenguajes de programacin).
Sin embargo, el lenguaje humano tiene una caracterstica que no se encuentra en los
lenguajes de programacin: la diversidad.

Lenguajes
Se considera el conjunto S* que consta de todas las cadenas finitas de elementos del
conjunto S. Existen muchas interpretaciones posibles de los elementos de S*, segn
la naturaleza de S. Si se piensa en S como un conjunto de palabras, entonces S* se
puede considerar como la coleccin de todas las oraciones posibles formadas con
palabras de S. Por supuesto, tales oraciones no necesariamente tienen sentido ni
Pgina 9 de 60

una estructura evidente. Se puede pensar un lenguaje como una especificacin


completa, al menos en principio, de tres cosas. En primer lugar, debe existir un
conjunto S con todas las palabras que se consideran parte del lenguaje. En
segundo lugar, hay que designar un subconjunto de S como el conjunto de las
oraciones con construccin adecuada en el lenguaje.
Supngase, a manera de ejemplo, que S consta de todas las palabras del espaol.
La especificacin de una oracin con construccin adecuada implica todas las reglas
de la gramtica espaola; el significado de una oracin queda determinado por esta
construccin y por el significado de las palabras.
La oracin Iba a la tienda Juan Jorge a cantar
Es una cadena en S pero no una oracin con una construccin adecuada. La
disposicin de los sustantivos y los verbos no es vlida.
Por otro lado, la oracin Los sonidos azules se sientan y cruzan la pierna bajo la
cima de la montaa tiene una construccin adecuada pero carece completamente de
sentido.
Para otro ejemplo, S podra constar de los enteros, los smbolos +, , X y , as
como los parntesis izquierdo y derecho. Se obtendr un lenguaje si se designa como
adecuadas las cadenas en S que representen sin ambigedades expresiones
algebraicas con parntesis.
As, ((3 2) + (4 X 7)) 9 y (7 (8 (9 10))); son oraciones con construccin
adecuada en este lenguaje.
Por otro lado, (2 3)) + 4, 4 3 2 y)2 + (3 ) X 4 no tienen una construccin
adecuada. La primera tiene demasiados parntesis, la segunda, pocos (no se sabe
cul resta se debe realizar primero) y la tercera tiene parntesis y nmeros
completamente fuera de lugar.
Todas las expresiones con construccin adecuada tienen sentido, excepto las que
implican la divisin entre cero.
El significado de una expresin es el nmero racional que representa. As, el
significado de ((2 1) 3) + (4 X 6) es 73/3, mientras que 2 + (3 0) y (4 + 2) (0
0) no tienen sentido.
La disciplina que regula la construccin adecuada de las oraciones es la sintaxis de
un lenguaje. La que se encarga del significado de las oraciones es la semntica de un
lenguaje.
Gramticas

Pgina 10 de 60

Una gramtica para estructura de expresiones G es una 4-ada (V,S,vo,a ), donde V


es un conjunto finito, S es un subconjunto de V,v0 V S y a es una relacin finita en
V*.
La idea es que S es, como ya se ha analizado, el conjunto de todas las palabras
permitidas en el lenguaje, y V consta de S adems de algunos otros smbolos. El
elemento v0 de V es un punto de partida para las sustituciones, que sern analizadas
en breve. Por ltimo la relacin a sobre V* especifica los reemplazos permisibles, en
el sentido de que, si wa w se puede reemplazar w con w siempre que aparezca la
cadena w, ya sea sola o como subcadena de alguna otra cadena. Tradicionalmente, a
la proposicin wa w se le llama produccin de G.
Entonces, w y w son los lados izquierdos y derecho de la produccin,
respectivamente. Supngase que ninguna produccin de G tiene a la cadena vaca
como lado izquierdo. Es la a relacin de produccin de G.
Esto parecera complicado, pero en realidad es una idea sencilla, como muestran los
siguientes ejemplos.
Si G = (V,S,vo,a ) es una gramtica para la estructura de oraciones, S es el conjunto
de smbolos terminales y N = V S es el conjunto de smbolos no termina obsrvese
que V = S N.
Ejemplo 1. Sea S = {Juan, Julia, maneja, corre, descuidadamente, rpido,
frecuentemente),
N = {oracin, sujeto, predicado, verbo, adverbio) y sea V=S
N. Sea v0=oracin, y supngase que la relacin a en V* queda descrita enumerando
todas las producciones como sigue.
Oracin a sujeto predicado Sujeto a Juan sujeto a Julia predicado a verbo adverbio
verbo a maneja verbo a correr adverbio a descuidadamente adverbio a rpido
adverbio a frecuentemente.

1.4 Tipos de Lenguajes formales


En matemticas, lgica, y ciencias de la computacin, un lenguaje formal es
un lenguaje cuyos smbolos primitivos y reglas para unir esos smbolos estn
formalmente especificados. Al conjunto de los smbolos primitivos se le llama
el alfabeto (o vocabulario) del lenguaje, y al conjunto de las reglas se lo llama
Pgina 11 de 60

la gramtica formal (o sintaxis). A una cadena de smbolos formada de acuerdo a la


gramtica se la llama una frmula bien formada (o palabra) del lenguaje.
Estrictamente hablando, un lenguaje formal es idntico al conjunto de todas sus
frmulas bien formadas. A diferencia de lo que ocurre con el alfabeto (que debe ser
un conjunto finito) y con cada frmula bien formada (que debe tener una longitud
tambin finita), un lenguaje formal puede estar compuesto por un nmero infinito de
frmulas bien formadas.
Por ejemplo, un alfabeto podra ser el conjunto {a,b}, y una gramtica podra definir a
las frmulas bien formadas como aquellas que tienen el mismo nmero de
smbolos a que b. Entonces, algunas frmulas bien formadas del lenguaje
seran: ab, ba, abab, ababba, etc.; y el lenguaje formal sera el conjunto de todas
esas frmulas bien formadas.
Para algunos lenguajes formales existe una semntica formal que puede interpretar y
dar significado a las frmulas bien formadas del lenguaje. Sin embargo, una
semntica formal no es condicin necesaria para definir un lenguaje formal, y eso es
una diferencia esencial con los lenguajes naturales.
En algunos lenguajes formales, la palabra vaca (esto es, la cadena de smbolos de
longitud cero) est permitida, notndose frecuentemente mediante , o .
Ejemplos de Lenguajes Formales.
Un conjunto de todas las palabras sobre {a,b}.
La Numeracin de Gdel {an : a es un nmero primo y n un nmero de Gdel}.
El conjunto de todos los programas sintcticamente vlidos en
determinado lenguaje de programacin.
El conjunto de todas las frmulas bien formadas en la lgica de primer orden.

un

Especificacin de los Lenguajes Formales.


Los lenguajes formales se pueden especificar de una amplia variedad de formas,
como por ejemplo:
(Si el lenguaje es regular)
Cadenas producidas por una gramtica formal (vase la jerarqua de Chomsky).
Cadenas descriptas por una expresin regular.
Cadenas aceptadas por un autmata, tal como una mquina de Turing.Las cadenas
estn formadas por un conjunto de smbolos que pertenecen a un mismo lenguaje,
existen dos formas de componer una sentencia o funcin con los smbolos:
Sintaxis
Semntica
1.5 Herramientas computacionales ligadas con lenguajes.
Pgina 12 de 60

Editores de estructuras
Un editor de estructuras toma como entrada una secuencia de rdenes para construir
un programa fuente. El editor de estructuras no solo realiza las fuentes de creacin y
modificacin de textos de un editor de textos ordinarios, sino que tambin analiza el
texto del programa, imponiendo al programa fuente
Ejemplos:
Editores de C, Pascal, Visual Studio (Fox Pro, Basic, etc.).
Gandalf es un conjunto de varios subproyectos. Su objetivo principal fue crear un
entorno completo de desarrollo de software, y no slo un entorno de programacin.
Doxygen: Genera documentacin de cdigo C/C++ en forma de pginas web,
incluyendo diversos ndices, el cdigo fuente coloreado e indexado, e incluso
diagramas de dependencia entre mdulos.
Javadoc: Para lenguaje Java. Usa un formato prefijado de comentario para las
descripciones, incluyendo marcas HTML embebidas y palabras clave introducidas con
el smbolo @. Se generan documentos en forma de pginas web.

Impresoras estticas
Una impresora esttica analiza un programa y lo imprime de forma que la estructura
del programa resulte claramente visible.
Por ejemplo los comentarios pueden aparecer con un tipo de letra especial, y las
proposiciones pueden aparecer con una indentacin proporcional a la profundidad de
su anidamiento en la organizacin jerrquica de las proposiciones.
EJEMPLOS: Word, Excel,
Power Point, Photoshop, etc.

Pgina 13 de 60

Intrpretes: Un intrprete realiza las operaciones que implica el programa fuente.


Para una proposicin de asignacin, por ejemplo, un intrprete podra construir un
rbol y despus efectuar las operaciones de los nodos con forme recorre el rbol.
Ejemplos:
Los intrpretes (para lenguajes como Lisp o Basic, o para programas con sus propios
lenguajes interpretados como Derive o Mathematica) Shells de sistemas operativos o
de alguna aplicacin como un SMBD.

1.6 Estructura de un traductor.

Un traductor se define como un programa que traduce o convierte desde un texto o


programa escrito en un lenguaje fuente hasta un texto o programa equivalente escrito
en un lenguaje destino produciendo, si cabe, mensajes de error.

Pgina 14 de 60

*Esquema de un traductor

Tipos de traductores.
Compiladores
Es aquel traductor que tiene como entrada una sentencia en lenguaje formal y como
salida tiene un fichero ejecutable, es decir, realiza una traduccin de un cdigo de alto
nivel a cdigo mquina (tambin se entiende por compilador aquel programa que
proporciona un fichero objeto en lugar del ejecutable final).
Intrpretes
Es como un compilador, solo que la salida es una ejecucin. El programa de entrada
se reconoce y ejecuta a la vez. No se produce un resultado fsico (cdigo mquina)
sino lgico (una ejecucin). Su principal ventaja es que permiten una fcil depuracin.
Entre los inconvenientes podemos citar, en primer lugar, la lentitud de ejecucin, ya
que al ejecutar a la vez que se traduce no puede aplicarse un alto grado de
optimizacin.
1.7 Fases de un Compilador

Anlisis Lxico: Esta fase se encarga de verificar si todas las cadenas pertenecen o
no al lenguaje. Es decir realiza un anlisis smbolo por smbolo indicando el token por
cada uno de los elementos reconocidos o el error en caso de no reconocer. Este
anlisis no logra detectar muchos errores por su caracterstica.
Anlisis Sintctico: En esta fase se analiza la estructura de las expresiones en base a
Pgina 15 de 60

gramticas. Aqu ya se puede determinar si una estructura por ejemplo una expresin
matemtica mal formada. El anlisis que se realiza es jerrquico es decir en base a
rboles de derivacin que se obtienen de las mismas gramticas.
Anlisis Semntico: Este anlisis es ms difcil de formalizar, determina el tipo de los
resultados intermedios, comprobar que los argumentos que tienen un operador
pertenecen al conjunto de operadores posible, y si son compatibles entre s.
Generacin de Cdigo Intermedio: El cdigo intermedio es una representacin en
base a elementos de 3 y 4 direcciones. Lo que nos permite llegar a la fase de
optimizacin de cdigo.
Optimizacin de Cdigo: Consiste en realizar una mejora en el cdigo intermedio,
para reducir el nmero de lneas y hacer que la ejecucin sea ms rpida
Generacin de Cdigo: Llegamos a la generacin de cdigo ensamblador o cdigo
mquina del procesador que nos interese

Bibliografa

galeon. (s.f.). http://10380054.galeon.com/u6.htm Unidad: 1.

Pgina 16 de 60

UNIDAD 2: EXPRESIONES REGULARES.

2.1. Definicin formal de una ER.


Es un equivalente algebraico para un autmata.
-Utilizado en muchos lugares como un lenguaje para describir patrones en texto que
son sencillos pero muy tiles.
-Pueden definir exactamente los mismos lenguajes que los autmatas pueden
describir: Lenguajes regulares.
-Ofrecen algo que los autmatas no: Manera declarativa de expresar las cadenas que
queremos aceptar.
Dado un alfabeto Dado un alfabeto , una, expresin regular sobre expresin regular
sobre se define de forma recursiva:
Pgina 17 de 60

ER primitivas: , , {a | a }
Si y son ER, entonces son tambin ER: + (unin), (concatenacin), *
(cierre), ().
No existen otras reglas para la construccin de ER sobre .
Ejemplos de usos.
-Comandos de bsqueda, e.g., grep de UNIX.
-Sistema de formato de texto: Usan notacin de tipo expresin regular para describir
patrones.
-Convierte la expresin regular a un DFA o un NFA y simula el autmata en el archivo
de bsqueda.
-Generadores de analizadores - Lxicos. Como Lex o Flex.
-Los analizadores lxicos son parte de un compilador. Dividen el programa fuente en
unidades lgicas (tokens) divide el programa fuente en unidades.
-Produce un DFA que reconoce el token.
Las expresiones regulares denotan lenguajes.
Por ejemplo, la expresin regular: 01* + 10* denota todas las cadenas que son o un 0
seguido de cualquier cantidad 1's o un 1 seguida de cualquier cantidad de 0's.
Operaciones de los lenguajes:
-Unin: Si L y M son dos lenguajes, su unin se denota por L U M.
-Concatenacin: La concatenacin es: LM o L.M.
-Cerradura (o cerradura de Kleene): Si L es un lenguaje su cerradura se denota por L
*.
Si E es una expresin regular, entonces L(E) denota el lenguaje que define E. Las
expresiones se construyen de la manera siguiente:
Las contantes y son expresiones regulares que representan a los lenguajes L (Q) =
{Q} y L () L = respectivamente.
-Si a es un smbolo, entonces es una expresin regular que representan al lenguaje: L
(a) = {a}.

2.2. Operaciones
Unin o Alternativa: Consideremos dos lenguajes diferentes definidos sobre el mismo
alfabeto L1 W() y L2 W(). Se denomina unin de ambos lenguajes al lenguaje
formado por las palabras de ambos lenguajes:
L1 U L2={ x | x L1 x L2}
Pgina 18 de 60

Concatenacin: Consideremos dos lenguajes definidos sobre el mismo alfabeto, L1 y


L2. La concatenacin o producto de estos lenguajes es el lenguaje L1 L2= { xy /
x L1 y x L2} Las palabras de este lenguaje estarn formadas al concatenar cada
una palabra del primero de los lenguajes con otra del segundo.
La concatenacin de lenguajes con el lenguaje vaci es L = L =
Potencia de un lenguaje: Se define la potencia i-sima de un lenguaje a la operacin
de concatenarlo consigo mismo i veces.
Li= LLL ....L
|------------|
i
Clausura positiva de un lenguaje: Se define la clausura positiva de un lenguaje L:

L+=ULi
i=1
Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles excepto L.
Si L no contiene la palabra vaca, la clausura positiva tampoco
Cierre o Clausura de un lenguaje: Se define el cierre o clausura de un lenguaje L
como:

L* = U Li
i=0
Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles, incluso L.
Todas las clausuras contienen la palabra vaca.
Existen tres operaciones bsicas que se pueden realizar sobre las ER:
-Seleccin de alternativas: Se indica con el operador |(barra vertical). Si r y s son
ER, entonces r | s es una ER que define a cualquier cadena que concuerde con una r
o una s, tambin se dice que r | s , es la unin de los lenguajes de r y s y lo podemos
definir: L( r | s ) = L( r ) U L( s ). Esta operacin se puede extender a ms de dos ER.
-Concatenacin: Se indica con la yuxtaposicin de las ER. Si r y s son ER, entonces
rs es una ER que define a cualquier cadena que concuerde con la concatenacin de r
Pgina 19 de 60

y s , esta operacin la podemos definir: L(rs) = L(r)L(s).Esta operacin se puede


extender a ms de dos ER.
Repeticin o Cerradura: Tambin se conoce con el nombre de cerradura de Kleene.
Se indica con el operador *. Si r es una ER, entonces r* es una ER que define a las
cadenas de caracteres representadas por la concatenacin repetida de r en n veces,
o sea que lo podemos definir como: L(r*) = L(r)*o tambin lo podemos definir como la
unin infinita de conjuntos r :r* n = r 0 r 1 r 2...r n.

2.3 Aplicaciones en problemas reales.


Una de las principales aplicaciones de los hermanos Deitel, son las expresiones
regulares que facilitan la construccin de un compilador. A menudo se utiliza una
expresin regular larga y compleja para validar la sintaxis de un programa. Si el
cdigo del programa no concuerda con la expresin regular, el compilador sabe que
hay un error de sintaxis dentro del cdigo.
Generalmente convierten la expresin regular a un autmata finito no determinista y
despus construyen el autmata finito determinista.
Otra aplicacin del mismo libro es en los editores de texto. Tambin encontramos a
las expresiones regulares en la biologa molecular. Tambin hay esfuerzos
importantes para tratar de representar cadenas como generadas por expresiones
regulares o por lenguajes regulares.

Bibliografa
http://10380054.galeon.com/u2.htm. (s.f.).

Pgina 20 de 60

UNIDAD 3: AUTMATAS FINITOS.

3.1 Definicin Normal

Formalmente, un autmata finito es una 5-tupla (Q, , q0, , F) donde:

es un conjunto finito de estados;

es un alfabeto finito;
Pgina 21 de 60

es el estado inicial;
es una funcin de transicin;
es un conjunto de estados finales o de aceptacin.

Representacin como diagramas de estados

Este autmata finito est definido sobre el alfabeto ={0,1}, posee dos estados s1 y s2,
y sus transiciones son (s1,0)=s2, (s1,1)=s1, (s2,0)=s1 y (s2,1)=s2. Su estado inicial
ess1, que es tambin su nico estado final.
Los autmatas finitos se pueden representar mediante grafos particulares, tambin
llamados diagramas de estados finitos, de la siguiente manera:

Los estados Q se representan como vrtices, etiquetados con su nombre en el


interior.

Una transicin desde un estado a otro, dependiente de un smbolo del


alfabeto, se representa mediante una arista dirigida que une a estos vrtices, y
que est etiquetada con dicho smbolo.

El estado inicial q0 se caracteriza por tener una arista que llega a l,


proveniente de ningn otro vrtice.

El o los estados finales F se representan mediante vrtices que estn


encerrados a su vez por otra circunferencia.

Representacin como tabla de transiciones


Pgina 22 de 60

Otra manera de describir el funcionamiento de un autmata finito es mediante el uso


de tablas de transiciones o matrices de estados. Dos posibles tablas para el ejemplo
de la imagen anterior podran ser las siguientes:

salida
smbolo llegada
q
(q,) Q
Q
s1

s2

s1

s1

s2

s1

s2

s2

0 1
*s1 s2 s1
s2

s1 s2

La primera representa explcitamente los parmetros y el valor que toma cada


ocurrencia de la funcin de transicin. La segunda es ms compacta, y marca con
una flecha el estado inicial, y con un asterisco los estados finales.

3.2 Clasificacin de AF
Un autmata finito determinista (abreviado AFD) es un autmata finito que adems es
un sistema determinista; es decir, para cada estado en que se encuentre el autmata,
y con cualquier smbolo del alfabeto ledo, existe siempre a lo ms una transicin
posible desde ese estado y con ese smbolo.
Un autmata finito (AF) o mquina de estado finito es un modelo computacional que
realiza cmputos en forma automtica sobre una entrada para producir una salida.
Este modelo est conformado por un alfabeto, un conjunto de estados finitos, una
funcin de transicin, un estado inicial y un conjunto de estados finales. Su
funcionamiento se basa en una funcin de transicin, que recibe a partir de un estado
inicial una cadena de caracteres pertenecientes al alfabeto (la entrada), y que va
Pgina 23 de 60

leyendo dicha cadena a medida que el autmata se desplaza de un estado a otro,


para finalmente detenerse en un estado final o de aceptacin, que representa la
salida.
La finalidad de los autmatas finitos es la de reconocer lenguajes regulares, que
corresponden a los lenguajes formales ms simples segn la Jerarqua de Chomsky.

3.3 Conversin de un AFND a AFD

A continuacin veremos dos diagramas de transicin de autmatas finitos no


determinista:

1,2,3

S1

1
1,2,3
start

1,2,3
2

S0

S2

Sf

1,2,3
3

S3

Pgina 24 de 60

Este autmata reconoce el lenguaje de las cadenas sobre {1, 2, 3} que terminan en
un smbolo que haya aparecido previamente.

4
start

8
6

Mientras que este reconoce el lenguaje definido por la expresin regular a*. ( a | b).
En ambos casos podemos ver que existen estados para los cuales hay ms de una
transicin ante un mismo smbolo de entrada:

S0

S1

(S0, 1) = {S0, S1}


Pgina 25 de 60

(0,) = {1,3}
Desde el punto de vista de programacin, esta situacin es importante que no
suceda, debido a que se dificulta la representacin del AF y disminuye sensiblemente
la eficiencia del reconocedor. Por tal motivo es conveniente poder transformar un
AFND en un AFD equivalente, o sea, que reconozca el mismo lenguaje. Por otra
parte, los AF que se obtienen a partir de expresiones regulares son no deterministas
con -transiciones.

3.4 Representacin de ER usando AFND

Tenemos dos maneras de representar un AFD

Con una tabla:


Se ponen tantas filas como estados, y tantas columnas como smbolos forman el
alfabeto. Marcamos el estado inicial con una flecha de entrada y cada uno de los
estados finales con un asterisco. En el cruce de la fila marcada con el estado q y
la columna marcada con el smbolo a del alfabeto ponemos el estado (q,a).

Pgina 26 de 60

Con un diagrama:
Cada estado no final se representa con un crculo; cada estado final se representa
con un doble crculo; se seala el estado inicial con una flecha entrando, sin etiqueta;
por cada transicin (q,a)=t se dibuja una flecha dirigida del estado departida q al de
llegada t etiquetada.

Ejemplos:
La mquina M1 del ejemplo se representa con una tabla
ab
p q r
qpq
*r r r

3.5 Minimizacin de estados en un AF

Determinsticos
Para cada estado y para cada smbolo se determina uncamente un solo estado:

a, c

b
e

e
0

a, c

1
Pgina 27 de 60

Dada una cadena w existe slo una forma recorrer el diagrama de transicin de
estados del AF

No Determinsticos
Para algunos estados, dado un smbolo a, existe un conjunto de estados siguientes
para elegir

a, b, c
b
e0

e1

Desde e0 con b podemos quedarnos en e0 pasar a e1


Autmatas Finitos No Determinsticos
Formalmente, un AF reconocedor no determinstico (AFND) se define como una
quntupla:
M = <E, A, , ei, F>
E es un conjunto finito de estados; E
A es el alfabeto de entrada
es la funcin de transicin de estados;

: E x A P(E)

P(E) conjunto potencia de E


En general
Pgina 28 de 60

(ej, a) = {ek, es, et, }


El AF puede pasar del estado e j al ek al estado es al estado et despus de leer el
smbolo a en la cinta (ej, ek,es, et, E; a A)
F es el conjunto de estados finales o de aceptacin; F E
Ejemplo:
AFND que reconoce el lenguaje
L = {x / x {a, b}* y x contiene la subcadena ab }

a,
b

a,
b

AFND = <{e0, e1 , e2}, {a, b}, , e0, {e2}>


Las cadenas aaba y baa, pertenecen o no a L(AFND)?

Aceptacin de cadena por AFND


Un AFND acepta una cadena si existe alguna secuencia de transiciones que a partir
del primer smbolo de la cadena y empezando en el estado inicial, permite alcanzar
un estado final luego de leer todos los smbolos de la cadena.
Determinismo y No determinismo
Determinismo trmino importante en muchas reas de Teora de la Computacin.
Determinismo existe una alternativa vlida, o no hay alternativa.
Pgina 29 de 60

No Determinismo puede haber varias alternativas vlidas.


Importante distinguir si el no determinismo agrega o no poder computacional.
En los Autmatas Finitos, todo se puede resolver con un Autmata Finito
Determinstico

3.6 Aplicaciones (definicin de un caso de estudio)


- Aplicacin ms importante: construccin de compiladores (analizadores lxicos).
ANLISIS LXICO
-Token: elemento del lenguaje (palabra reservada, nombre de variable, punto y coma,
constante, etc.).
- Marcas de fin de cadena: delimitan los tokens.
Diagrama de transicin de estados
- Coleccin finita de crculos conectados por arcos.
Crculos: estados.
Estado inicial: marcado con un puntero.
Estados finales o de aceptacin: marcados por crculos dobles.
Estados intermedios.
Arcos dirigidos: transiciones.
Etiquetados con smbolos o categoras de smbolos.
Se transita de un estado a otro tras recibir a la entrada el smbolo de la etiqueta.
- Ejemplo:

Pgina 30 de 60

- Proceso de reconocimiento de una cadena:


Se parte del estado inicial (actual).
Se lee la cadena smbolo a smbolo de izquierda a derecha.
Por cada smbolo ledo se produce una transicin desde el estado actual a otro a
travs de la flecha cuya etiqueta coincide con el smbolo ledo.
La cadena es reconocida si tras realizar las transiciones correspondientes a la
cadena completa se alcanza un estado de aceptacin.

Bibliografa
http://www.itescam.edu.mx/portal/asignatura.php?clave_asig=SCD1015&carrera=ISIC-2010-224&id_d=170 Unidad: 3. (s.f.).

Pgina 31 de 60

UNIDAD 4: MQUINAS DE TURING

4.1 Definicin formal MT


La Mquina de Turing (MT) fue introducida por Alan M. Turing en 1936, y puede
considerarse como un modelo abstracto que formaliza la idea Intuitiva de algoritmo.

Pgina 32 de 60

(MT) Es un modelo computacional que realiza una lectura/escritura de manera


automtica sobre una entrada llamada cinta, generando una salida en esta misma.
Este modelo est conformado por un alfabeto de entrada y uno de salida, un smbolo
especial llamado blanco (normalmente b, o 0), un conjunto de estados finitos y un
conjunto de transiciones entre dichos estados.
Su funcionamiento se basa en una funcin de transicin, que recibe un estado inicial
y una cadena de caracteres (la cinta, la cual es finita por la izquierda) pertenecientes
al alfabeto de entrada. Luego va leyendo una celda de la cinta, borrando el smbolo,
escribir el nuevo smbolo perteneciente al alfabeto de salida y finalmente avanza a la
izquierda o a la derecha (solo una celda a la vez), repitiendo esto segn se indique en
la funcin de transicin, para finalmente detenerse en un estado final o de aceptacin,
representando as la salida.
Est constituida por los siguientes elementos:
MT = (E, A, B, e0, F, f)
E = Conjunto de estados, no vaco.
A = Conjunto de smbolos de entrada.
B = Conjunto de smbolos auxiliares.
e0 = Estado inicial.
F = Conjunto de estados finales.
f = Funcin de control, definida:
Pgina 33 de 60

Dnde: f: (E - F) x (A B) E x (A B) x (I, O, D)
I = movimiento del cabezal a la izquierda.
O = movimiento nulo.
D = movimiento a la derecha.
La mquina de Turing consta de un cabezal lector/escritor y una cinta infinita en la
que el cabezal lee el contenido, borra el contenido anterior y escribe un nuevo valor.
Las operaciones que se pueden realizar en esta mquina se limitan a:
Avanzar el cabezal lector/escritor para la derecha.
Avanzar el cabezal lector/escritor para la izquierda.

4.2 Construccin modular de una MT.

El objetivo de la creacin modular de una mquina de Turing es poder desarrollar


mquinas complejas a partir de bloques elementales, a partir de mquinas ms
Pgina 34 de 60

pequeas, mediante diagramas de transiciones. La construccin de mquinas de


Turing se lleva a cabo mediante los diagramas de transicin y combinarlos de manera
parecida a lo que se realiza en la formacin de la unin y concatenacin de los
autmatas finitos.
Pasos para la construccin de una mquina de Turing: Elimine las caractersticas de
inicio de los estados iniciales de las mquinas, excepto la de aquel donde iniciara
la maquina compuesta.
-Elimine las caractersticas de detencin de los estados de parada de todas la
maquinas e introduzca un nuevo estado de parada que no se encuentre en ninguno
de los diagramas que se combinan.
-Para cada uno de los antiguos estados de parada p y cada x en y.

Una mquina de Turing es un autmata que se mueve sobre una secuencia lineal de
datos. En cada instante la mquina puede leer un solo dato de la secuencia
(generalmente un carcter) y realiza ciertas acciones en base a una tabla que tiene
en cuenta su "estado" actual (interno) y el ltimo dato ledo.
Entre las acciones est la posibilidad de escribir nuevos datos en la secuencia;
recorrer la secuencia en ambos sentidos y cambiar de "estado" dentro de un conjunto
finito de estados posibles.

4.3 Lenguajes aceptados por la MT.


Una mquina de Turing se puede comportar como un aceptador de un lenguaje. Si
colocamos una cadena w en la cinta, situamos la cabeza de lectura/escritura sobre el
smbolo del extremo izquierdo de la cadena w y ponemos en marcha la mquina a
partir de su estado inicial. Entonces w es aceptada si, despus de una secuencia de
Pgina 35 de 60

movimientos, la mquina de Turing llega a un estado final y para. Por tanto w es


aceptada. Si qw * w1pw2 para algn estado final p y unas cadenas w1 y w2.
Entonces, se obtiene la siguiente definicin:
Sea M = (Q, S, G, q0=q1, B, F, d) una mquina de Turing. Entonces el lenguaje
aceptado por M es: L(M) = {w S*q1w * w1pw2 para pF y wiG*}.
Los lenguajes formales que son aceptados por una mquina de Turing son
exactamente aquellos que pueden ser generados por una gramtica formal. El clculo
Lambda es una forma de definir funciones. Las funciones que pueden se computadas
con el clculo Lambda son exactamente aquellas que pueden ser computadas con
una mquina de Turing.
Estos tres formalismos, las mquinas de Turing, los lenguajes formales y el clculo
Lambda son formalismos muy dismiles y fueron desarrollados por diferentes
personas. Sin embargo, ellos son todos equivalentes y tienen el mismo poder de
expresin. Generalmente se toma esta notable coincidencia como evidencia de que la
tesis de Church-Turing es cierta, que la afirmacin de que la nocin intuitiva de
algoritmo o procedimiento efectivo de cmputo corresponde a la nocin de cmputo
en una mquina de Turing.
Gramticas estructuradas por frases:
Parte izquierda de las reglas: combinacin de smbolos terminales y no
terminales, con al menos un no terminal.
Parte derecha de las reglas: combinacin de smbolos terminales y no terminales de
cualquier longitud (incluso 0).
Las mquinas de Turing aceptan lenguajes estructurados por frases.
La M.T. como generadora de lenguajes.
L={an b2n an, con n mayor o igual a 0}
Entrada:
Cinta1: ...BBB...
Cinta2: ...BBB...
Salida:
Cinta1: ...0000...
Cinta2: ...$abba$aabbbbaa$...
Proceso:
Pgina 36 de 60

El proceso de la maquina es sencillo, consiste en generar 0's en la primera cinta y su


correspondiente lenguaje en la segunda cinta. Este proceso ser cclico y sin fin, ya
que estamos tratando con un generador.
Para ello utilizamos multicinta porque nos facilita de manera considerable el trabajo.

Ejemplifiques el funcionamiento de una Mquina de Turing.


Supongamos que tenemos ={a,b} y q_f y que representamos los enteros positivos
mediante cadenas solo de as. As el entero n estara representado por a^n.
Se puede construir la MT que calcule la funcin f(n,m) = n+m, implementando la
transformacin a^n ba^m en a^(n+m) b
Solucin:
Se recorren desde la izquierda todas las as hasta encontrar una b, esta se
reemplaza por una a, cambiando de estado, en este mismo estado se recorren
todas las as a la derecha y cuando se llega a un blanco se reemplaza por el mismo
blanco se deja la cabecera a la izquierda y se reemplaza la a por un blanco para
restarle la que adiciono y se mueve hacia la derecha y se cambia al estado final q3.
M= (Q, , , q_0,q_3,B,)

Donde la funcin se define as:

Pgina 37 de 60

Bibliografa
http://10380054.galeon.com/u4.htm . (s.f.).

Pgina 38 de 60

UNIDAD 5: ANLISIS LXICO

5.1 Funciones del analizador lxico.


Pgina 39 de 60

Un analizador lxico asla el analizador sintctico de la representacin de lexemas de


los componentes lxicos.

El analizador lxico opera bajo peticin del analizador sintctico devolviendo un


componente lxico conforme el analizador sintctico lo va necesitando para avanzar
en la gramtica. Los componentes lxicos son los smbolos terminales de la
gramtica.
Suele implementarse como una subrutina del analizador sintctico. Cuando recibe la
orden obtn el siguiente componente lxico, el analizador lxico lee los caracteres de
entrada hasta identificar el siguiente componente lxico.

Definiciones.
Tokens:
Pgina 40 de 60

-Smbolos terminales de una gramtica o Identificadores, palabras reservadas,


operadores,... o Varios signos pueden forman el mismo token
Atributos:
Informacin adicional que tiene el token, de utilidad para el anlisis sintctico y
semntico.
Componentes lxicos (tokens):
Unidad mnima de informacin que significa algo a la hora de compilar; concepto de
palabra; las fases de un lenguaje constan de cadenas de componentes lxicos.
Lexema:
Una secuencia de caracteres de entrada que comprenden un solo componente lxico
se llama lexema; cadena de caracteres que extrae el componente abstracto del
componente lxico.
Patrn:
Descripcin de la forma que han de tomarlos lexemas para ajustarse a un
componente lxico.
Ejemplo:

Otras Funciones:
-Manejo del fichero de entrada del programa fuente: abrirlo, leer sus caracteres,
cerrarlo y gestionar posibles errores de lectura.
Pgina 41 de 60

-Eliminar comentarios, espacios en blanco, tabuladores y saltos de lnea (caracteres


no vlidos para formar un token).
-Inclusin de ficheros: # include...
-La expansin de macros y funciones in line: # define...
-Contabilizar el nmero de lneas y columnas para emitir mensajes de error.
-Reconocimiento y ejecucin de las directivas de compilacin (por ejemplo, para
depurar u optimizar el cdigo fuente).
Aspectos del Anlisis Lxico.
Diseo ms sencillo:
-Los smbolos que trata el scanner se describe con una gramtica ms simple que la
del parser, gramtica regular
Mejora la eficiencia:
-Gran parte del tiempo de compilacin se consume en la lectura y exploracin de
caracteres
Mejora la portabilidad:
-Se pueden tener varias versiones del scanner una para distintos cdigos (EBCDID,
ASCII,...), con el mismo parser
Descarga el anlisis sintctico:
Ejemplo:
No puedo distinguir en FORTRAN hasta despus del 1 o
I=1,25.

DO 5 I=1.25 o

DO 5

5.2 Componentes lxicos, patrones y lexemas.

Pgina 42 de 60

Componente lxico (token).


Son las unidades lgicas que genera el analizador lxico. Formar caracteres en
tokens es muy parecido a formar palabras en un lenguaje natural
Es el conjunto de cadenas de entrada que produce como salida el mismo
componente lxico. Cada token es una secuencia de caracteres que representa una
unidad de informacin en el programa fuente. Los componentes lxicos ms comunes
son los siguientes: palabras clave o reservadas:

operadores aritmticos
operadores

relacionales

operadores lgicos

operador de asignacin

identificadores

constantes

cadenas

literales

signos de puntuacin

libreras

Lexema: Representan cadenas de caracteres en el programa fuente que se pueden


tratar juntos como una unidad lxica. Un lexema es una secuencia de caracteres en
el programa fuente con la que concuerda el patrn para un componente lxico.
Patrn: Regla que describe el conjunto de lexemas que pueden representar a un
determinado componente lxico en los programas fuente. En otras palabras, es la
descripcin del componente lxico mediante una regla.
Pgina 43 de 60

Atributos de los componentes lxicos: El analizador lxico recoge informacin sobre


los componentes lxicos en sus atributos asociados. Los componentes lxicos
influyen en las decisiones del anlisis sintctico y los atributos en la traduccin de los
componentes lxicos:
-Apuntador a la entrada de la Tabla de smbolos donde se guarda la informacin
sobre el componente lxico.
-El lexema para un identificador.
-El nmero de lnea en que se encontr por primera vez.

5.3 Creacin de Tabla de tokens.


Tabla: conjunto de pares clave-valor, llamados elementos de la tabla. La tabla de
smbolos es una componente necesaria de un compilador. Al declarar un identificador
(normalmente una sola vez), ste es insertado en la tabla. Cada vez que se utilice el
identificador se realizar una bsqueda en la tabla para obtener la informacin
asociada (el valor).
Bsqueda: dada la clave de un elemento, encontrar su valor.
Insercin: Dado un par clave-valor, aadir un elemento nuevo a la tabla.
Cambio de valor: Buscar el elemento y cambiar su valor.
Borrado: Eliminar un elemento de la tabla.
Longitud de bsqueda (o tiempo de acceso)
De una clave: Li = nmero de comparaciones con elementos de la tabla para
encontrar esa clave. Mxima: LM = nmero mximo de comparaciones para
encontrar cualquier clave. Media (esperada): Lm = nmero medio de comparaciones
para encontrar un valor. Si la frecuencia de todas las claves es la misma:
Lm = (S Li)/N
Si la frecuencia de todas las claves no es la misma:
Lm = S pi.Li
Grado de ocupacin:
s = n/N donde n=nmero de elementos en la tabla y N=capacidad mxima de la
tabla.
Pgina 44 de 60

Funcin de bsqueda: B: KE asocia a cada clave k un elemento B (k).


Valor asociado a una clave k: v(B(k)). Puede ser mltiple, en cuyo caso normalmente
se convierte en un puntero. Si est en la tabla puede almacenarse consecutivamente
o en subtablas paralelas. Tablas de smbolos (identificadores) La clave es el
identificador.
El valor est formado por:
Atributos del identificador. Puntero a la posicin de memoria asignada. La clave
puede sustituirse por un puntero. Los identificadores pueden estar empaquetados. La
longitud del identificador puede especificarse en la tabla o delante del nombre, o ser
implcita.
Tablas consecutivas: Todos los elementos ocupan posiciones de memoria
adyacentes. Tablas ligadas: cada elemento apunta al siguiente. Tablas doblemente
ligadas: cada elemento apunta al siguiente y al anterior. Tablas no ordenadas
Insercin: en el primer lugar vaco.
5.4 Errores lxicos
El anlisis lxico constituye la primera fase, aqu se lee el programa fuente de
izquierda a derecha y se agrupa en componentes lxicos (tokens), que son
secuencias de caracteres que tienen un significado. Adems, todos los espacios en
blanco, lneas en blanco, comentarios y dems informacin innecesaria se elimina del
programa fuente. Tambin se comprueba que los smbolos del lenguaje (palabras
clave, operadores,...) se han escrito correctamente.
Como la tarea que realiza el analizador lxico es un caso especial de coincidencia de
patrones, se necesitan los mtodos de especificacin y reconocimiento de patrones, y
estos mtodos son principalmente las expresiones regulares y los autmatas finitos.
Sin embargo, un analizador lxico tambin es la parte del traductor que maneja la
entrada del cdigo fuente, y puesto que esta entrada a menudo involucra un
importante gasto de tiempo, el analizador lxico debe funcionar de manera tan
eficiente como sea posible.
Son pocos los errores simplemente en el nivel lxico ya que tiene una visin muy
restringida de un programa fuente. El analizador lxico debe devolver el componente
lxico de un identificador y dejar a otra fase se ocupe de los errores.
Suponga que una situacin en la cual el analizador lxico no puede continuar porque
ninguno de los patrones concuerda con un prefijo de la entrada.
Pgina 45 de 60

Tal vez la estrategia de recuperacin ms sencilla sea recuperacin EN MODO


PANICO (este mtodo de recuperacin es donde se borra caracteres sucesivos de la
entrada hasta que el analizador lxico pueda encontrar un componente lxico bien
formado). Los programas no siempre son correctos!!
El compilador tiene que:
1. Reportar clara y exactamente la presencia de errores
2. Recuperarse de cada error lo suficientemente rpido para poder detectar
errores subsiguientes:
Tratar de evitar mensajes falsos de error
Un error que produce un token errneo
Errores lxicos posibles
Un token o componente lxico es una cadena de caracteres que tiene un significado
coherente en cierto lenguaje de programacin. Ejemplos de tokens, podran ser
palabras clave (if, while, int), identificadores, nmeros, signos, o un operador de
varios caracteres. Son los elementos ms bsicos sobre los cuales se desarrolla toda
traduccin de un programa, surgen en la primera fase, llamada anlisis lxico.

5.5 Generadores de analizadores Lxicos


El corazn del generador del analizador lxico es su algoritmo para producir una
mquina de estados finitos.
El algoritmo que se presenta est basado en un mtodo para generar un autmata
finito determinstico (AFD) de estados mnimos
Un AFD es de estados mnimos si tiene tan pocos estados como sea posible
El algoritmo etiqueta cada estado con el conjunto de cadenas que la mquina
aceptara si ese estado fuese el estado inicial
Es fcil examinar esas etiquetas de estado para determinar:
Las transiciones de salida de cada estado
El estado objetivo de cada transicin
Los estados que son estados finales
Supngase que un estado est etiquetado con el conjunto de cadenas {a, an, and, in,
into, to}
Este estado debe tener transiciones para los caracteres a, i y t
Pgina 46 de 60

La transicin para a debe llevar a un estado etiquetado con el conjunto {l, n, nd},
(Siendo l la cadena vaca),
La transicin para i a un estado etiquetado {n, nto}
La transicin para n a un estado etiquetado {l,to}
La transicin para t a un estado etiquetado {o}
Una etiqueta de estado L que etiquete a un estado objetivo de una transicin para un
smbolo a se denomina etiqueta derivativa L con transicin a
Un estado es estado final si y slo si su etiqueta contiene la cadena vaca l
Crear un estado inicial q0 y
Etiquetarlo con el conjunto de entrada L0;
Situar q0 en una cola de estados Q;
Mientras Q no est vaca hacer:
{
Eliminar de Q el estado qi ;
Generar las etiquetas derivativas a partir de la etiqueta Li del estado qi ;
Para cada etiqueta derivativa Lj con transicin a hacer:
{
Si no existe un estado qj etiquetado Lj entonces:
Crear qj y ponerlo en Q ;
Crear un arco etiquetado a desde qi a qj ;
}
}
Marcar como estados finales a todos aquellos que contienen en su etiqueta a l
Se pueden usar varias tcnicas para acelerar el algoritmo y ahorrar espacio
Las etiquetas pueden guardarse mediante dispersin para producir un sistema de
firmas que acelere sus bsquedas.
Como las tablas de transiciones son muy escasas, se pueden guardar en una lista
corta que se consulte cada vez que se necesite hacer una transicin a partir de un
estado.
Estas listas no suelen tener ms de tres o cuatro elementos, as que su bsqueda
ser razonablemente rpida.

Bibliografa
http://www.gedlc.ulpgc.es/docencia/seminarios/rit/Analisis_lexico/sld046.htm Tema de
la unidad 5. (s.f.).

Pgina 47 de 60

UNIDAD 6: ANLISIS SINTCTICO.

6.1 GLC.
Pgina 48 de 60

Gramticas Libres de Contexto (GLC), o de tipo 2: las reglas son de la forma X ,


donde X es una variable y es una cadena que puede contener variables y
constantes. Estas gramticas producen los lenguajes Libres de Contexto (abreviado
LLC)

Capturan la nocin de constituyente sintctico y la nocin de orden.

Herramienta formal que puede ser vista tanto desde un punto de vista
generador como estructurador.

Propiedades computacionales interesantes: se puede reconocer en tiempo


polinmico.

Una Gramtica Libre de Contexto es una tupla con 4 parmetros:

G = (V, T, P, S)

V conjunto de smbolos variables

T conjunto de smbolos terminales

S V, smbolo inicial

P conjunto de reglas de produccin: A , con sucesin de smbolos de V

U T, eventualmente vaca ( = )

Una GLC es un dispositivo generador.


Definimos el lenguaje LG generado por una gramtica G del siguiente modo: G = {w /
S * w}, siendo * una especie de clausura transitiva de y w una tira de
terminales.

6.2 rbol de derivacin.

Pgina 49 de 60

Es una representacin grfica (en forma de rbol invertido) de un proceso de


derivacin en una gramtica. Se define el rbol de derivacin como sigue:

la raz del rbol ser el smbolo inicial de la gramtica

los nodo interiores del rbol estn etiquetados por los smbolos no terminales

las hojas estn etiquetadas por smbolos terminales

si un nodo interior etiquetado por A, posee como hijos los nodos etiquetados
por X1, X2,Xn , entonces A X1,X2, Xn es una produccin de la
gramtica, en donde Xi , representa smbolo terminal o no terminal.

Sea la siguiente gramtica:


G=( ={a, b}, N={S,A,B},S P ) P: SaABAa , A |aA , B|bB la construccin de un
rbol de derivacin en el proceso de la generacin de la palabra aa es el siguiente:

Propiedades de un rbol de derivacin.


Sea G = (N, T, S, P) una gramtica libre de contexto, sea A N una variable. Diremos
que un rbol TA= (N, E) etiquetado es un rbol de derivacin asociado a G si verifica
las propiedades siguientes:

La raz del rbol es un smbolo no terminal

Cada hoja corresponde a un smbolo terminal o .

Cada nodo interior corresponde a un smbolo no terminal.

Pgina 50 de 60

Para cada cadena del lenguaje generado por una gramtica es posible construir (al
menos) un rbol de derivacin, en el cual cada hoja tiene como rtulo uno de los
smbolos de la cadena.

rbol de derivacin.
Ejemplo:
Sea G=(N, T, S, P) una GLC con P: S ab|aSb
La derivacin de la cadena aaabbb ser: S aSb aaSbb aaabbb y el rbol de
derivacin:

6.3 Formas normales de Chomsky.


Pgina 51 de 60

Una gramtica formal est en Forma normal de Chomsky si todas sus reglas de
produccin son de alguna de las siguientes formas:
A BC o

A a o

donde A, B y C son smbolos no terminales (o variables) y es un smbolo terminal.


Todo lenguaje independiente del contexto que no posee a la cadena vaca, es
expresable por medio de una gramtica en forma normal de Chomsky (GFNCH) y
recprocamente. Adems, dada una gramtica independiente del contexto, es posible
algortmicamente producir una GFNCH equivalente, es decir, que genera el mismo
lenguaje.
Sea G = ( N, T, P, $) una gramtica con P N X (N U T)* y X N un
smbolo no-terminal (o una variable). Podemos clasificar tales smbolos X en tres
clases:
Variables accesibles:

Si existe una derivacin desde el smbolo inicial que contiene X, es decir,


existe $ * X donde , *

Variables generativas:

Si existe una derivacin desde el la variable que produce una sentencia, es


decir, existe X * donde *T.

Variables tiles:

Si existe una derivacin desde el smbolo inicial usando que produce una
sentencia , es decir, existe $ * X * donde , * y *T.

6.4 Diagramas de sintaxis

Pgina 52 de 60

Los diagramas sintcticos, de sintaxis o diagramas del ferrocarril son una forma de
representar una gramtica libre de contexto. Representan una alternativa grfica para
la Forma de Backus-Naur (BNF, por sus siglas en ingls) o la Forma Extendida de
Backus-Naur (EBNF, por sus siglas en ingles).
Los diagramas de ferrocarril son ms comprensibles para la mayora de la gente.
Alguna parte de la popularidad del formato de intercambio de datos JSON se debe a
su representacin en los diagramas de ferrocarril.
Un segundo mtodo alternativo para desplegar las producciones de ciertas
gramticas de tipo 2 es el diagrama de sintaxis. sta es una imagen de las
producciones que permite al usuario ver las sustituciones en forma dinmica, es decir,
verlas como un movimiento a travs del diagrama. En la figura 10.5 se ilustrar los
diagramas que resultan de la traduccin de conjuntos de producciones tpicos, que
son, por lo general, todas las producciones que aparecen en el lado derecho de algn
enunciado BNF.

6.5 Eliminacin de la ambigedad


Una GLC es ambigua si existe una cadena w L(G) que tiene ms de una derivacin
por la izquierda o ms de una derivacin por la derecha o si tiene dos o ms rboles
de derivacin .
En casi de y que toda cadena w L (G) tenga un nico rbol de derivacin no es
ambigua.
Ejemplo: La gramtica S aS| Sa | a es ambigua porque aa tiene dos derivaciones
por la izquierda S aS aa S Sa aa.

Pgina 53 de 60

Tipos de Ambigedad
Dentro del estudio de gramticas existen dos tipos fundamentales de ambigedad,
los cuales son:
Ambigedad Inherente:
Las gramticas que presentan este tipo de ambigedad no pueden utilizarse para
lenguajes de programacin, ya que por ms transformaciones que se realicen sobre
ellas, nunca se podr eliminar completamente la ambigedad que presentan:
Un lenguaje L es inherentemente ambiguo si todas sus gramticas; si existe cuando
menos una gramtica no ambigua para L, L no es ambiguo.

El lenguaje de las expresiones no es Ambiguo

Las expresiones regulares no son ambiguas

Ejemplo de un lenguaje inherentemente ambiguo:

La gramtica es ambigua: hay cadenas con ms de una derivacin ms izquierda:

Pgina 54 de 60

6.6 Generacin de matriz predictiva (clculo first y follow)

FIRST: Sea G:= (V; ; Q0; P) una gramtica libre de contexto. Para cada forma
sentencial (V U )* y para cada k N definiremos la funcin.

En otras palabras, el operador F IRST k asocia a cada forma sentencial los primeros k
smbolos de cualquier forma terminal alcanzable desde mediante derivaciones
masa la izquierda".

FOLLOW: Con las mismas notaciones anteriores, para cada forma sentencial (V
U )* definiremos la funcin FOLLOWG GK () del modo siguiente.

De nuevo nos ocuparemos solamente de FOLLOW: = FOLLOW1. Obsrvese que


FOLLOW k () * y que para cada x FOLLOW (), Ixl k. Obsrvese que para
cada variable A V, FOLLOW(A) son todos los smbolos terminales que pueden
aparecer a la derecha de A en alguna forma sentencial de la gramtica.

Pgina 55 de 60

6.7 Tipos de analizadores sintcticos

Analizador Descendente:
Se construye el rbol de anlisis sinttico partiendo del smbolo inicial y aplicando las
producciones mediante derivaciones por la izquierda, el smbolo a expandir es el que
est ms a la izquierda.
Analizador Ascendente:
Se construye el rbol de anlisis sinttico partiendo de la frase a reconocer y
aplicando las producciones mediante reducciones hasta llegar al smbolo inicial de la
gramtica.
Ejemplo:
G= ({+,*, ID, (,)}, {E, T, P},E, P)P={E:=E+T | T; T:=T*P | P; P:= ID | (E) }FraseID + ( ID *
ID )
Ejemplo:
G= ({+,*, ID, (,)}, {E, T, P},E, P)P={E:=E+T | T; T:=T*P | P; P:= ID | (E) }FraseID + ( ID *
ID )

6.8 Manejo de errores.


Pgina 56 de 60

Un compilador es un sistema que en la mayora de los casos tiene que manejar una
entrada incorrecta. Sobre todo en las primeras etapas de la creacin de un programa,
es probable que el compilador se utilice para efectuar las caractersticas que debera
proporcionar un buen sistema de edicin dirigido por la sintaxis, es decir, para
determinar si las variables han sido declaradas antes de usarla, o si faltan corchetes o
algo as.
Por lo tanto, el manejo de errores es parte importante de un compilador y el escritor
del compilador siempre debe tener esto presente durante su diseo.
Hay que sealar que los posibles errores ya deben estar considerados al disear un
lenguaje de programacin. Por ejemplo, considerar si cada proposicin del lenguaje
de programacin comienza con una palabra clave diferente (excepto la proposicin
de asignacin, por supuesto). Sin embargo, es indispensable lo siguiente:
El compilador debe ser capaz de detectar errores en la entrada;
El compilador debe recuperarse de los errores sin perder demasiada
informacin;
Y sobre todo, el compilador debe producir un mensaje de error que permita al
programador encontrar y corregir fcilmente los elementos (sintcticamente)
incorrectos de su programa.
Errores Sintcticos.
Muchos errores de naturaleza sintctica Recuperacin: Al producirse un error el
compilador debe ser capaz de informar del error y seguir compilando. (Ideal).
El manejo de errores de sintaxis es el ms complicado desde el punto de vista de la
creacin de compiladores. Nos interesa que cuando el compilador encuentre un error,
se recupere y siga buscando errores. Por lo tanto el manejador de errores de un
analizador sintctico debe tener como objetivos:
Indicar los errores de forma clara y precisa. Aclarar el tipo de error y su
localizacin.
Recuperarse del error, para poder seguir examinando la entrada.

No ralentizar significativamente la compilacin.

Un buen compilador debe hacerse siempre teniendo tambin en mente los errores
que se pueden producir; con ello se consigue:

Simplificar la estructura del compilador.


Mejorar la respuesta ante los errores.

Errores semnticos.

Pgina 57 de 60

Un lenguaje con comprobacin fuerte de tipos es capaz de garantizar que los


programas se pueden ejecutar sin errores de tipo, por lo que los errores de tipo se
detectarn siempre en tiempo de compilacin.
Como mnimo, ante un error, un comprobador de tipos debe informar de la naturaleza
y posicin del error y recuperarse para continuar con la comprobacin del resto del
programa a analizar.
Veamos algunas de las operaciones a tener en cuenta en una comprobacin de tipos:
Conversin de tipos: A veces es necesario transformar el tipo de una expresin
para utilizar correctamente un operador o para pasar de forma adecuada un
parmetro a una funcin.
Coercin: Es una conversin de tipos que realiza de forma implcita el propio
compilador. Si es el programador el que realiza la conversin se tratar
entonces de una conversin explcita.

Sobrecarga de operadores: La sobrecarga se resuelve determinando el tipo de


cada una de las expresiones intervinientes en la sobrecarga.

Funciones polimrficas: Son aquellas que trabajan con argumentos cuyo tipo
puede cambiaren distintas llamadas a la funcin.

6.9 Generadores de analizadores sintcticos


ANTLR:
(ANother Tool for Language Recognition; en espaol "otra herramienta para
reconocimiento de lenguajes") es una herramienta creada principalmente por Terence
Parr, que opera sobre lenguajes, proporcionando un marco para construir
reconocedores (parsers), intrpretes, compiladores y traductores de lenguajes a partir
de las descripciones gramaticales de los mismos (conteniendo acciones semnticas a
realizarse en varios lenguajes de programacin).

GNU bison:
Es un programa generador de analizadores sintcticos de propsito general
perteneciente al proyecto GNU disponible para prcticamente todos los sistemas
operativos, se usa normalmente acompaado de flex aunque los analizadores lxicos
se pueden tambin obtener de otras formas.
Grammatica:
Pgina 58 de 60

Es un generador de analizadores sintcticos de C# y Java libre. Es similar a otras


herramientas como Yacc o ANTLR. Grammatica soporta el algoritmo LL(k) para
gramticas con un nmero ilimitado de tokens de anticipacin. Est bastante bien
probado, y ha sido auto compilado desde la versin 0.1. La documentacin contiene
una lista completa de caractersticas, as como una comparacin con otros
generadores de analizadores.
JavaCC:
(Java Compiler Compiler) es un generador de analizadores sintcticos de cdigo
abierto para el lenguaje de programacin Java. JavaCC es similar a Yacc en que
genera un parser para una gramtica presentada en notacin BNF, con la diferencia
de que la salida es en cdigo Java. A diferencia de Yacc, JavaCC genera
analizadores descendentes (top-down), lo que lo limita a la clase de gramticas LL (K)
(en particular, la recursin desde izquierda no se puede usar). El constructor de
rboles que lo acompaa, JJTree, construye rboles de abajo hacia arriba (bottomup).
Yacc:
Es un programa para generar analizadores sintcticos. Las siglas del nombre
significan Yet Another Compiler-Compiler, es decir, "Otro generador de compiladores
ms". Genera un analizador sintctico (la parte de un compilador que comprueba que
la estructura del cdigo fuente se ajusta a la especificacin sintctica del lenguaje)
basado en una gramtica analticaescrita en una notacin similar a la BNF. Yacc
genera el cdigo para el analizador sintctico en el Lenguaje de programacin C.

Bibliografa
http://10380054.galeon.com/u6.htm . (s.f.).

COLUSIN
Pgina 59 de 60

La mquina de Turing es un modelo computacional introducido por Alan Turing en el


trabajo On computable numbers, with an application to the Entscheidungsproblem,
publicado por la Sociedad Matemtica de Londres, en el cual se estudiaba la cuestin
planteada por David Hilbert sobre si las matemticas son decidibles, es decir, si hay
un mtodo definido que pueda aplicarse a cualquier sentencia matemtica y que nos
diga si esa sentencia es cierta o no. Turing construy un modelo formal de
computador, la mquina de Turing, y demostr que existan problemas que una
mquina no poda resolver. La mquina de Turing es un modelo matemtico abstracto
que formaliza el concepto de algoritmo.
El autmata es la primera mquina con lenguaje, es decir, un calculador lgico cuyo
juego de instrucciones se orienta hacia los sistemas de evolucin secuencial.
La aparicin de los ordenadores a mediados de los 50's inaugur el campo de la
lgica programada para el control de procesos industriales. No obstante, aunque
estos ordenadores resolvan los inconvenientes de la lgica cableada, presentaban
nuevos problemas:

* Mala adaptacin al entorno industrial.


* Coste elevado de los equipos.
* Necesidad de personal informtico para la realizacin de los programas.
* Necesidad de personal especializado para el mantenimiento.

Estos problemas se solucionaran con la aparicin del autmata programable o PLC


(Controlador Lgico Programable; en ingls Programable.

Pgina 60 de 60

También podría gustarte