Вы находитесь на странице: 1из 31

UNIDAD 1 INTRODUCCIN A LA TEORA DE LENGUAJES FORMALES.

1.1 ALFABETO
Un alfabeto es un conjunto finito y no vaco de elementos llamados smbolos o letras.
Una palabra o cadena sobre un alfabeto V es una cadena finita de smbolos del alfabeto.
Notaciones:
- || denota la longitud de la cadena .
- denota a una cadena de longitud 0, tambin conocida como palabra vaca.
- Vn denota al conjunto de todas las palabras de longitud n sobre V
- V0 denota al conjunto cuyo nico elemento es la palabra vaca, es decir, V0 = {}.
- V denota al conjunto de todas las cadenas de cualquier longitud sobre V.
- V+ denota al conjunto de todas las cadenas de cualquier longitud sobre V, excepto la vaca.
- Un elemento de Vn es una cadena del tipo a1a2... an donde cada ai V.
1.2 CADENAS.
Las principales ideas matemticas necesarias para la compresin a la Teora de Autmatas son conceptos que incluyen
grafos, rboles, conjuntos, relaciones, cadenas, lenguajes abstractos e induccin matemtica. Un "smbolo" es una entidad
abstracta. Las letras y los dgitos son ejemplos de smbolos usados con frecuencia. Una cadena (o palabra) es una secuencia
finita de smbolos Yuxtapuestos. Por ejemplo a, b y c son smbolos y casa es una cadena. La longitud de una cadena w que se
denota como |w|, es el nmero de smbolos que componen la cadena.
Por ejemplo casa tiene una longitud.
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.
La cadena vaca, denotada por E es aquella que presenta cero apariciones de smbolos, es una cadena que puede
construirse en cualquier alfabeto.
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. La yuxtaposicin se utiliza como el
operador de concatenacin. Esto es si w y x son cadenas, entonces wx es la concatenacin de estas dos cadenas. La cadena
vaca es la identidad para el operador de concatenacin, es decir Ew=wE para cada cadena de w.
Un alfabeto es un conjunto de smbolos finito y no vaco. Convencionalmente se utiliza el smbolo S para designar un
alfabeto.
Un lenguaje es un conjunto de cadenas, todas ellas seleccionadas de un S* donde S es un determinado alfabeto
El conjunto vaco y el conjunto formado por la cadena vaca {E} son lenguajes.
El conjunto de palndromos (cadenas que se leen igual de izquierda a derecha y viceversa) sobre el alfabeto {0,1} es un
lenguaje infinito. Algunos elementos de este lenguaje son E 0,1,00,01,010, y 1101011.
Por consiguiente vemos que el conjunto de todos los palndromos sobre una coleccin finita de smbolos no es,
tcnicamente hablando, un lenguaje, porque sus cadenas no se construyen colectivamente a partir de un alfabeto.
Otro lenguaje es el conjunto de cadenas sobre un alfabeto fijo S Denotamos a este lenguaje como S*
Por ejemplo:
SiS={a},entoncesS*={E,a,aa,aaa,...}.SiS={0,1},entoncesS*={E,0,1,00,01,10,11,000,...}
SiS={a},entoncesS*={E,a,aa,aaa,...}.SiS={0,1},entoncesS*={E,0,1,00,01,10,11,000,...}

Como comentamos anteriormente el asterisco (*) representa cualquier nmero de apariciones de la expresin anterior.
En la teora de autmatas, un problema es la cuestin de decidir si una determinada cadena es un elemento de un
determinado lenguaje. Cualquier cosa que coloquialmente denominamos "problema" podemos expresarlo como lenguaje. De
manera precisa, si S es un alfabeto y L es un lenguaje de S, entonces el problema de L es:
Data una cadena w de S*, decidir si w pertenece o no a L
1.3 LENGUAJES
En matemticas, lgica, y las ciencias computacionales, un lenguaje formal es un conjunto de palabras (cadenas de
caracteres) de longitud finita formadas a partir de un alfabeto (conjunto de caracteres) finito. Informalmente, el trmino
lenguaje formal se utiliza en muchos contextos (en las ciencias, en derecho, etc.) para referirse a un modo de expresin ms
cuidadoso y preciso que el habla cotidiana. Hasta finales de la dcada de 1990, el consenso general era que un lenguaje
formal, era en cierto modo la versin lmite de este uso antes mencionado: un lenguaje tan formalizado que poda ser usado
en forma escrita para describir mtodos computacionales. Sin embargo, hoy en da, el punto de vista de que la naturaleza
esencial de los lenguajes naturales (sin importar su grado de formalidad en el sentido informal antes descrito) difiere de
manera importante de aquella de los verdaderos lenguajes formales, gana cada vez ms adeptos.
1.4 TIPOS DE LENGUAJES
Llamamos lenguaje sobre el alfabeto V a cualquier subconjunto de V.
Especificacin de lenguajes:
Extensin (lenguajes finitos)
L = fa; aa; aaages un lenguaje sobre el alfabeto V = fag
L = faba; cab; aaabcges un lenguaje sobre el alfabeto V = fa; b; cg
Comprensin (lenguajes infinitos)
L = fa(bc)njn>= 1g
Chomsky clasificar los lenguajes formales de acuerdo a una jerarqua de cuatro niveles, conteniendo cada uno de todos
los siguientes.
El lenguaje ms general ser, pues, de tipo 0,y no posee restriccin alguna. Este conjunto engloba el conjunto de todos los
lenguajes posibles.
En el segundo nivel aparecen los lenguajes de tipo1, tambin llamados lenguajes sensibles al contexto, al permitir que el
papel de las palabras dependa de la posicin en que aparezcan(es decir, del contexto).La mayor parte de los lenguajes de
ordenador pertenecen a este tipo.
En tercer lugar aparecen los lenguajes de tipo 2, o lenguajes independientes del contexto. En ellas el significado de una
palabra es independiente del lugar que ocupa en la frase.
Finalmente, los lenguajes de tipo 3, o lenguajes regulares, son los que presentan una estructura ms sencilla.
Resulta curioso observar como paralelamente a la jerarqua de lenguajes aparece otra de mquinas abstractas
equivalentes, como se observa en el esquema siguiente:

Cada uno de estos tipos de mquinas es capaz de resolver problemas cada vez ms complicados, hasta llegar a las
mquinas de Turing. Como descubri Turing, existen una serie de problemas que no son computacionalmente abordables y
que reciben el nombre de problemas no e numerables.
La relacin estrecha entre la Teora de Lenguajes Formales y la Teora de Autmatas se pone de manifiesto en este tema.
Se establece un isomorfismo entre ambas, estableciendo una conexin entre la clase de lenguajes generados por ciertos tipos
de gramticas y la clase de lenguajes reconocibles por ciertas mquinas.
-

Los lenguajes del tipo 0 con los lenguajes reconocidos por una mquina de Turing,
Los lenguajes de tipo 1 con los Autmatas Linealmente Acotados,
Los lenguajes de tipo 2 con los Autmatas a Pila
Los lenguajes de tipo 3 con los Autmatas Finitos, los Autmatas Probabilsticos y los Autmatas de Clulas de
McCulloch-Pitts.

Cada uno de estos tipos/mquinas aade restricciones al tipo/mquina del nivel superior.

1.5 HERRAMIENTAS COMPUTACIONALES LIGADAS CON LENGUAJES.


Bsicamente son las siguientes:
1-Diagramas Funcionales.
2-Interpretacin de Datos.
3-Bases de Datos.
4-Algoritmos.
5-Seudo-cdigos.
1.6 ESTRUCTURA DE UN TRADUCTOR.
Qu es un Traductor?
Un traductor es un mediador entre dos entidades: emisoras y receptoras, los mediadores en mascaran la complejidad y
heterogeneidad de los lenguajes.
Un traductor convierte un lenguaje de entrada (cdigo fuente) a una de salida (cdigo objeto).
Ensambladores
Ensamblador se refiere a un tipo de programa, informtico que se encarga de traducir un fichero fuente escrito en un
lenguaje ensamblador, a un fichero objeto que contiene cdigo mquina ejecutable directamente por la mquina para la que se
ha generado.

Ejemplos: MASM

Funcin De Un Ensamblador:
La tarea fundamental de un ensamblador es traducir un programa en lenguaje de ensamblador al cdigo correspondiente
en lenguaje de mquina.
.
MOTIVOS PARA USAR ENSAMBLADOR
-

Mayor control de la computadora.


Independencia de lenguaje.
La mayora de las computadoras pueden ensamblar.
Losprogramashechosenlenguajeensambladorsongeneralmentemsrpidosyconsumenmenosrecursosdelsistema.

MOTIVOS PARA NO UTILIZAR


-

Demasiado complejo.
Comprensin ms profunda de la computadora.
Errores ms frecuentes en el programa.
Mayor tiempo de codificacin.
Difcilmente portable, es decir, un cdigo escrito para un microprocesador en particular necesita ser modificado
muchas veces en su totalidad para poder ser usado en otro microprocesador.

Tipos de Ensambladores
ENSAMBLADORESCRUZADOS: Se denominan as a los ensambladores que se utilizan en una computadora que posee el
procesador diferente al que tendrn las computadoras donde se va a ejecutar el programa objeto producido.
ENSAMBLADORESRESIDENTES: Son aquellas que permanecen en la memoria principal de la computadora y cargar para su
ejecucin al programa objeto producido.
MICROENSAMBLADORES: Al programa que indica al intrprete de instrucciones de la CPU como debe actuar se le denomina
microprograma. El programa que ayuda a realizar este microprograma se llama micro ensamblador.
MACROENSAMBLADORES: Son ensambladores que permiten el uso de macroinstrucciones.
ENSAMBLADORES DE UNA FASE: leen una lnea y la traducen directamente para producir una instruccin de lenguaje
maquina o la ejecuta si se trata de una pseudosinstruccin. Se construye la tabla de smbolos a medida que aparecen las
definiciones de variables, etiquetas, etc.
ENSAMBLADORES DE DOS FASES: Realiza la traduccin en dos etapas: 1fase leen el programa fuente y construyen la
tabla de smbolos, 2fase vuelve a leer el programa fuente y pueden ir traduciendo totalmente pues reconocen la totalidad de
los smbolos.
Compiladores
Un compilador es querer traducir un programa de un lenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamente
lenguaje mquina).
Los compiladores son programas o herramientas encargadas de compilar. Un compilador toma un texto (cdigo fuente)
escrito en un lenguaje de alto nivel y lo traduce a un lenguaje comprensible por las computadoras (cdigo objeto).
Interpretes
Un intrprete es un programa capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel. Los
intrpretes suelen contraponerse a los compiladores, ya que mientras que los segundos se encargan de traducir un programa
desde su descripcin en un lenguaje de programacin al cdigo mquina del sistema destino, los primeros slo realizan la
traduccin a medida que sea necesario y normalmente, no guardan el resultado de dicha traduccin.

JavaScript, BASIC, LISP, Smalltalk y Python son ejemplos de lenguajes que son normalmente interpretados en vez de
compilados.
El intrprete tiene estas caractersticas
- Traduce y ejecuta una lnea del programa a la vez.
- Si hay error, detiene ejecucin del programa
- Programas ms lentos pero ms portables y flexibles
1.7 FASES DE UN COMPILADOR.

CLASIFICACIN DE COMPILADORES
DEUNAPASADA: Examina el cdigo fuente una vez, generando el cdigo o programa objeto.
PASADASMLTIPLES: Requiere pasos intermedios para producir cdigo en otro lenguaje y una pasada final para producir y
optimizar el cdigo producido durante pasos anteriores.
COMPILADORESINCREMENTALES: Generan un cdigo objeto, instruccin por instruccin cuando el usuario teclea cada
orden individual.
COMPILADORCRUZADO: Se genera cdigo en lenguaje objeto para una maquina diferente a la que se esta utilizando para
compilar.
COMPILADORCONMONTADOR: Compila distintos mdulos de forma independiente y despus es capaz de aplazarlos.
AUTOCOMPILADORES: Compilador que est escrito en el mismo lenguaje que va a compilar.
METACOMPILADOR: Es programa que recibe como entrada las especificaciones del lenguaje para el que se desea obtener
un compilador y genera como salida el compilador para ese lenguaje.
DESCOMPILADOR: Es un programa que acepta como entrada cdigo maquina y la traduce a un lenguaje de alto nivel
realizando el proceso inverso a la compilacin.

UNIDAD 2 EXPRESINES REGULARES.


2.1 DEFINICIN FORMAL DE UNA ER
Una expresin regular, a menudo llamada tambin patrn, es una expresin que describe un conjunto de cadenas sin
enumerar sus elementos. Por ejemplo, el grupo formado por las cadenas Handel, Hndel y Haendel se describe mediante el
patrn "H (a||ae) ndel". La mayora de las formalizaciones proporcionan los siguientes constructores: una expresin regular
es una forma de representar a los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto
sobre el cual se define el lenguaje.

En informtica, las expresiones regulares proveen una manera muy flexible de buscar o reconocer cadenas
Una expresin regular (ER) sobre un alfabeto finito se define recursivamente como sigue:
1. Para todo c , c es una ER
2. es una ER
3. Si E1 y E2 son ERs, E1 | E2 es una ER
4. Si E1 y E2 son ERs, E1 E2 es una ER
5. Si E1 es una ER, E1 es una ER
6. Si E1 es una ER, (E1) es una ER
Cuando se lee una expresin regular, hay que saber qu operador debe leerse primero.
Esto se llama precedencia. Por ejemplo, la expresin a | b c , debe entenderse como (1) la aplicada al resto? (2)
la | aplicada al resto? (3) la aplicada al resto? La respuesta es que, primero que nada se aplican los , segundo los ,
y finalmente los |.
Esto se expresa diciendo que el orden de precedencia es , , |. Los parntesis sirven para alterar la precedencia. Por
ejemplo, la expresin anterior, dado el orden de precedencia que establecimos, es equivalente a a | (b (c )). Se puede forzar
otro orden de lectura de la ER cambiando los parntesis, por ejemplo (a | b) c .
Asimismo, debe aclararse cmo se lee algo como a|b|c, es decir cul de los dos | se lee primero? Convengamos que en
ambos operadores binarios se lee primero el de ms a la izquierda (se dice que el operador asocia a la izquierda), pero
realmente no es importante, por razones que veremos enseguida.
Observar que an no hemos dicho qu significa una ER, slo hemos dado su sintaxis pero no su semntica.
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}
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 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.
1.- Las expresiones regulares en programacin
En el rea de la programacin las expresiones regulares son un mtodo por medio del cual se pueden realizar bsquedas
dentro de cadenas de caracteres. Sin importar si la bsqueda requerida es de dos caracteres en una cadena de 10 o si es
necesario encontrar todas las apariciones de un patrn definido de caracteres en un archivo de millones de caracteres, las
expresiones regulares proporcionan una solucin para el problema. Adicionalmente, un uso derivado de la bsqueda de
patrones es la validacin de un formato especfico en una cadena de caracteres dada, como por ejemplo fechas o
identificadores.
Para poder utilizar las expresiones regulares al programar es necesario tener acceso a un motor de bsqueda con la
capacidad de utilizarlas. Es posible clasificar los motores disponibles en dos tipos: Motores para el programador y Motores
para el usuario final.
Motores para el usuario final
Son programas que permiten realizar bsquedas sobre el contenido de un archivo o sobre un texto extrado y colocado en
el programa. Estn diseados para permitir al usuario realizar bsquedas avanzadas usando este mecanismo, sin embargo es
necesario aprender a redactar expresiones regulares adecuadas para poder utilizarlos eficientemente. Estos son algunos de
los programas disponibles:
Grep: programa de los sistemas operativos Unix/Linux.
Sed: programa de los sistemas operativos Unix/Linux que permite la modificacin de la salida.
PowerGrep: versin de grep para los sistemas operativos Windows.
RegexBuddy: ayuda a crear las expresiones regulares en forma interactiva y luego le permite al usuario usarlas y guardarlas.
EditPad Pro: permite realizar bsquedas con expresiones regulares sobre archivos y las muestra por medio de cdigo de
colores para facilitar su lectura y comprensin.
Motores para el programador

Permiten automatizar el proceso de bsqueda de modo que sea posible utilizarlo muchas veces para un propsito
especfico. Estas son algunas de las herramientas de programacin disponibles que ofrecen motores de bsqueda con soporte
a expresiones regulares:
AWK: Forma una parte esencial del lenguaje y por extensin de la herramienta awk de Unix/Linux
Java: existen varias bibliotecas hechas para java que permiten el uso de RegEx, y Sun planea dar soporte a estas desde el
SDK
JavaScript: a partir de la versin 1.2 (ie4+, ns4+) JavaScript tiene soporte integrado para expresiones regulares.
Perl: es el lenguaje que hizo crecer a las expresiones regulares en el mbito de la programacin hasta llegar a lo que son hoy
en da.
PCRE: biblioteca de ExReg para C, C++ y otros lenguajes que puedan utilizar bibliotecas dll (Visual Basic 6 por ejemplo).
PHP: tiene dos tipos diferentes de expresiones regulares disponibles para el programador, aunque la variante POSIX (ereg) va
a ser desechada en PHP 6.
Python: lenguaje de "scripting" popular con soporte a Expresiones Regulares.
.Net Framework: provee un conjunto de clases mediante las cuales es posible utilizar expresiones regulares para hacer
bsquedas, reemplazar cadenas y validar patrones.
Nota: de las herramientas mencionadas con anterioridad se utilizan el EditPad Pro y el .Net Framework para dar ejemplos,
aunque es posible utilizar las expresiones regulares con cualquier combinacin de las herramientas mencionadas. Aunque en
general las Expresiones Regulares utilizan un lenguaje comn en todas las herramientas, las explicaciones prcticas acerca
de la utilizacin de las herramientas y los ejemplos de cdigo deben ser interpretados de forma diferente. Tambin es
necesario hacer notar que existen algunos detalles de sintaxis de las expresiones regulares que son propios del .Net
Framework que se utilizan en forma diferente en las dems herramientas de programacin. Cuando estos casos se den se
har notar en forma explcita para que el lector pueda buscar informacin respecto a estos detalles en fuentes adicionales. En
el futuro se incluirn adicionalmente ejemplos de otras herramientas y lenguajes de programacin.
2.- Expresiones regulares como motor de bsqueda.
Las expresiones regulares permiten encontrar porciones especficas de texto dentro de una cadena ms grande de caracteres.
As, si es necesario encontrar el texto "lote" en la expresin" el ocelote salt al lote contiguo" cualquier motor de bsqueda
sera capaz de efectuar esta labor. Sin embargo, la mayora de los motores de bsqueda encontraran tambin el fragmento
"lote" de la palabra "ocelote", lo cual podra no ser el resultado esperado.
Algunos motores de bsqueda permiten adicionalmente especificar que se desea encontrar solamente palabras completas,
solucionando este problema. Las expresiones regulares permiten especificar todas estas opciones adicionales y muchas otras
sin necesidad de configurar opciones adicionales, sino utilizando el mismo texto de bsqueda como un lenguaje que permite
enviarle al motor de bsqueda exactamente lo que deseamos encontrar en todos los casos, sin necesidad de activar opciones
adicionales al realizar la bsqueda.
3.- Expresiones regulares como lenguaje.
Para especificar opciones dentro del texto a buscar se utiliza un lenguaje o convencin mediante el cual se le transmite al
motor de bsqueda el resultado que se desea obtener. Este lenguaje le da un significado especial a una serie de caracteres.
Por lo tanto cuando el motor de bsqueda de expresiones regulares encuentre estos caracteres no los buscar en el texto en
forma literal, sino que buscar lo que los caracteres significan. A estos caracteres se les llama algunas veces "metacaracteres". A continuacin se listan los principales meta-caracteres y su funcin y cmo los interpreta el motor de expresiones
regulares.

UNIDAD 3. AUTOMATAS FINITOS.


Partiendo del conocimiento de sus comportamientos, aspectos y caractersticas ms relevantes de estos autmatas. Los
autmatas son esencialmente importantes en las actividades sociales, ya que se encuentran dentro de todo tipo de maquinaria
y aplicaciones desarrolladas, donde estas tienen las funcionalidades especficas con las que realizan sus operaciones y
actividades; adems de sus comportamientos, caractersticas y funcionalidad que tienden los autmatas se detallara cmo
influyen en la vida social y real de los ser humanos.
Los autmatas finitos, son antes de todos logsticas matemticas, en las que se realizan operaciones en cada estado de los
eventos, estos eventos pueden ser de un solo estado o varios; al tener acciones con estados de dos o ms eventos, los
autmatas finitos tienden a cambiar de finitos determinsticos a no determinsticos.

Dentro de estas hojas se denotan las esquematizaciones de los nuevos autmatas finitos:
Determinsticos
No Determinsticos
Se conocern su estructuras, funcionalidades y comportamientos entre estos dos tipos de autmatas, dentro de ello se
abarcara las conversiones o transformaciones entre estos autmatas.
Como breve definicin un autmata finito o mquina de estado finito: es un modelo matemtico de un sistema que recibe
una cadena constituida por smbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autmata
reconoce.
En la seccin de la MT, se conocer deforma formal que es una mquina de Turing y sus componentes; adems de ello se
detallara de forma explcita algunos conceptos sobre su desarrollo y formacin.
La mquina de Turing es un dispositivo capaz de establecer los problemas intratables, para conocer si es resolutorio o no.
Tales confirmaciones se deben y se detallan de cada proceso u problemas matemticos de la vida real.
Al igual que los AF la mquina de Turing utiliza estructuras, transiciones y formas de conformacin para la representacin
de los modelos matemticos, de situacin en las que se desea conocer si estos tienen soluciones, ya que un computador no
puede definir dicha confirmacin, ya que es un proceso tardado.
3.1 DEFINICIN FORMAL
Definicin 1
El Autmata Finito es la mquina ms restrictiva de todas y desde luego que se puede definir como un caso particular de una
MT. Tambin podemos verla como un AP sin pila. Obviamente que al sacarle la pila lo nico que queda es la cinta finita de
entrada. Este modelo matemtico abstracto representa la solucin del problema de aceptacin de lenguajes de tipo 3 o LR.
Definicin 2
Son mquinas formales que se usan para reconocer lenguajes regulares. Lenguajes ms sencillos, los lenguajes que son
generados por gramticas regulares.
Con ello se deduce que un autmata finito es; una mquina con un nmero finito de estados que lee smbolos de una cinta de
entrada infinita. El comportamiento de la mquina est determinado nicamente por el estado en que se encuentra y el
smbolo en la cinta de entrada. Al leer un smbolo de la cinta de entrada cambia de estado y avanza en la cinta de entrada.
Cuando ya no quedan smbolos por leer, se detiene. Aun cuando la cinta es infinita, la cadena que gua el comportamiento del
autmata no lo es. Esta cadena puede ser tan larga como se quiera, pero siempre finita.
Definicin 3
Un autmata finito tiene un conjunto de estados y su control pasa de un estado a otro en respuesta a las entradas externas.
Una de las diferencias fundamentales entre las clases de autmatas finitos es si dicho control es determinista, lo que quiere
decir que el autmata no puede encontrarse en ms de un estado a un mismo tiempo, o no determinista, lo que significa que
s puede estar en varios estados a la vez.
Un autmata finito es un vector de tres elementos M = (I,S,, F)donde I es el conjunto finito de entradas, S es el conjunto finito
de estados (no vaco), es la funcin de transicin de estados y F es el conjunto finito de estados finales (incluidos en S).
Un autmata es una representacin grfica que muestra el proceso de reconocimiento de una cadena de entrada. La
simbologa utilizada es simple:
Diagrama
n

Descripcin
Un crculo representa un estado n, donde n es un nmero natural o bien una letra, generalmente.
Un arco representa la lectura de un smbolo a en la entrada. Transicin entre estados.
Estado de inicio s. Es generalmente 0 (cero)

Estado de aceptacin f.
3.2 CLASIFICACIN DE AF
Un AF tiene un conjunto de estados y su control se mueve de estado en estado, en respuesta a entradas externas. Estas
entradas forman las cadenas a ser analizadas. Los estados de un AF, son de tres tipos: estado inicial, que permite empezar la
ejecucin del autmata; estados finales o estados de aceptacin que permiten realizar la salida de aceptacin de la cadena
de entrada en el caso de que no haya ms smbolos en la entrada, y estados intermedios, que son los que permiten pasar del
estado inicial a algn estado final.
Los AF se dividen en diversas clases, dependiendo de si su control es determinista (lo que significa que el autmata no
puede estar en ms de un estado simultneamente) o no determinista (lo que significa que el autmata puede estar en varios
estados al mismo tiempo).
Los autmatas finitos se pueden clasificar en funcin del tipo de control como:
Deterministas, el autmata nicamente puede estar en un estado en un momento determinado.
No Deterministas, el autmata puede estar en varios estados simultneamente.
Ambos definen los mismos lenguajes (regulares), sin embargo los No deterministas permiten describir ms eficientemente
determinados problemas.
Para conocer ms afondo sobre los autmatas finitos determinsticos y no determinsticos, a continuacin se detallara de
forma breve cada uno de estos autmatas; ya que es necesario para poder entender y comprender el siguiente tema de
conversiones de un autmata finito no determinstico a un autmata finito determinstico.
Definiciones de autmatas finitos no determinsticos y determinsticos.
Autmata finito determinstico (AFD); es aquel que siempre est en un solo estado despus de leer cualquier secuencia
de entradas; la palabra determinista nos dice que para cada entrada existe un nico estado al que el autmata puede llegar
partiendo del estado actual; comencemos dando la definicin formal. El autmata finito determinista. El trmino determinista
hace referencia al hecho de que, para cada entrada, existe un nico estado al que el autmata pueda llegar partiendo del
estado actual.
Un AFD genera un solo tipo de salida: acepta o no una secuencia de smbolos de entrada. Esa aceptacin est
representada si el autmata se encuentra en algn estado del conjunto F. El comportamiento de un AFD, comienza en el
estado inicial (q0), y segn se van recibiendo los smbolos de la entrada transita entre los estados (del conjunto Q), de acuerdo
a la funcin de transicin f. Si en un determinado momento se encuentra en un estado de aceptacin (del conjunto F),
reconoce como vlida la cadena formada por los smbolos de entrada ledos hasta el momento. Si no, no es aceptada. Fig. 1.
AFD. Representacin de un autmata finito determinstico

Definicin Un Autmata Finito Determinstico (AFD) es una quntupla: M = (Q;; q 0; f; F ), donde


Q Es un conjunto nito no vaco (los elementos de Q son llamados estados)
es un conjunto de smbolos de entrada al que llamaremos alfabeto.
q1 Q, es un estado al que llamaremos estado inicial.
f Es una funcin Q x Q que se llama funcin de transicin; esta recibe como argumentos un estado y una entrada y
devuelve un estado.
q F Q es un conjunto de estados a los cuales llamaremos estados finales o de aceptacin.
Existen dos notaciones preferibles para describir los autmatas:

1. Un diagrama de transiciones, que es un grafo.


2. Una tabla de transiciones, que es una enumeracin tabular (tabla) de la funcin f, que a la vez describe el conjunto de
estados, y el alfabeto de entrada.
Diagramas de transiciones
Un diagrama de transiciones para un AFD A = (, Q, q0, f, F), es un grafo definido de la siguiente forma:
a) Hay un nodo para cada estado de Q.
b) El nodo correspondiente al estado inicial q0, tendr una flecha sin origen (o arco entrante) no etiquetado.
c) Los nodos correspondientes a los estados de aceptacin (los que pertenecen a F) estn marcados con un doble crculo. Los
que no pertenecen a F tienen un crculo simple.
d) Habr un arco etiquetado con a entre el nodo p y el nodo q, si f(p,a) = q. Si existen varios smbolos de entrada que provocan
una transicin del estado p a q, entonces el arco entre p y q puede estar etiquetado con la lista de esos smbolos.
Un autmata puede ser representado mediante un grafo dirigido (digrafo) el cual se conoce como diagrama de
transiciones, donde los vrtices del mismo corresponden a los estados del autmata, en el caso del estado inicial este tendr
una flecha que apunta hacia l, y los estados finales se representaran mediante un circulo con lnea doble; si existe una
transicin del estado q al p sobre la entrada a entonces existe un arco con etiqueta a que va del estado q al estado p en el
diagrama de transicin. El autmata acepta una cadena si la secuencia de transiciones correspondientes a los smbolos de
conducen del estado inicial a un estado final.
Si se modifica el modelo del autmata finito, para permitirle ninguna, una o ms transiciones de un estado sobre el mismo
smbolo de entrada, al nuevo modelo lo conoceremos como autmata finito no determinstico. Tiene la capacidad de estar
en varios estados simultneamente. La diferencia entre AFD y un AFN est en la funcin de transicin. Para el AFN, f es una
funcin que toma como argumentos un estado y un smbolo de entrada, pero devuelve un conjunto de cero, uno o ms
estados (en vez de devolver un estado, como en el caso del AFD).
Definicin: Un Autmata Finito No Determinstico (AFND) es una quntupla M = (Q; ; I; R; F ), donde
Q es un conjunto de estados
es un alfabeto.
I Q es un conjunto de estados a los cuales llamaremos estados iniciales.
R es una relacin sobre Q Q que se llama relacin de transicin.
F Q es un conjunto de estados a los cuales llamaremos estados finales.

Fig. 2 AFND: representacin de autmatas finitos no determinsticos

Tabla de transiciones
Una tabla de transiciones es una representacin tabular convencional de una funcin como f, que recibe dos argumentos y
devuelve un valor. Esta tabla tendr las siguientes caractersticas:
a) En las filas estarn los estados q Q
b) El estado inicial se preceder del smbolo ->
c) Cada estado final se preceder del smbolo *
d) En las columnas estarn los smbolos de entrada a

e) El valor correspondiente a la fila del estado qy a la entrada aes el estado que determine

Fig. 3 Ejemplo de tabla de transiciones


3.3 CONVERSIN DE UN AFND A AFD
Se observa que el AFN de la Figura 1, tiene dos transiciones desde el estado 0 con la entrada a; es decir, puede ir al
estado 0 o al 1.
Ahora se introduce un algoritmo para construir a partir de un AFND un AFD que reconozca el mismo lenguaje. Este
algoritmo se le conoce como construccin de subconjuntos, es til para simular un AFND por medio de un programa de
computador.

Fig. 4 autmata finito no determinista


Construccin de subconjuntos. Construccin de un AFD a partir de un AFN.
Entrada. Un AFN N.
Salida. Un AFD D que acepta el mismo lenguaje.

Mtodo. El algoritmo construye una tabla de transiciones tranD para D. Cada estado del AFD es un conjunto de estados del
AFN y se construye tranD de modo que D simular en paralelo todos los posibles movimientos que N puede realizar con
una determinada cadena de entrada.
Se utilizan las operaciones del Cuadro 2, para localizar los conjuntos de los estados del AFN (s representa un estado del
AFN, y T, un conjunto de estados del AFN). Antes de detectar el primer smbolo de entrada, N se puede encontrar en
cualquiera de los estados del conjunto cerradura-?(s0), donde s0 es el estado de inicio de K. Supngase que exactamente los
estados del conjunto T son alcanzables desde s0 con una secuencia dada de smbolos de entrada, y sea a el siguiente
smbolo de entrada. Al ver a, N puede trasladarse a cualquiera de los estados del conjunto mover (T, a). Cuando se permiten
transiciones- ? , N puede encontrarse en cualquiera de los estados de cerradura-? (T, a), despus de ver la a. Se construyen
estados D; el conjunto de estados de D; y tranD, la tabla de transiciones de D, de la siguiente forma. Cada estado de D
corresponde a un conjunto de estados de AFN en los que podra estar N despus de leer alguna secuencia de smbolos de
entrada, incluidas todas las posibles transiciones- ? anteriores o posteriores a la lectura de smbolos. El estado de inicio de
Des cerradura-? (s0). Se aaden los estados y las transiciones a D. Un estado de D es un estado de aceptacin si es un
conjunto de estados de AFN que contenga al menos un estado de aceptacin de N.
El clculo de cerradura-? (T) es un proceso tpico de bsqueda en un grafo de nodos alcanzables desde un conjunto dado
de nodos. En este caso, los estados de T son el conjunto dado de nodos, y el grafo est compuesto solamente por las aristas

del AFN etiquetadas por ? . Un algoritmo sencillo para calcular cerradura-? (T) utiliza una estructura de datos tipo pila para
guardar estados en cuyas aristas no se hayan buscado transiciones etiquetadas con ? .
Implementacin de los algoritmos para convertir un AFN en un AFD
Para la implementacin de estos algoritmos se utiliza el AFN N. Que acepta el lenguaje (a|b)*abb. Se aplica el Algoritmo
2. Construccin de subconjuntos a N. El estado de inicio del AFD equivalente es cerradura-? (0), que es A = {0,1,2,4,7},
puesto que estos son alcanzados desde el estado 0 por un camino en que todas las aristas estn etiquetadas por ? . El
alfabeto de smbolos de entrada es {a, b}. Ahora el algoritmo indica que debe marcarse A y despus calcular cerradura- ?
(mover(A, a)).
Calculando primero mover(A, a), el conjunto de estados de N que tiene transiciones en a desde miembros de A. Entre
los estados 0,1,2,4 y 7 slo 2 y 7 tienen dichas transiciones, a 3 y a 8, de modo que:
cerradura- ? (mover({0,1,2,4,7}, a)) =cerradura- ? (3,8) = {1,2,3,4,6,7,8}
Este conjunto se denominar B. As, tranD[A, a] = B. Se presenta el clculo de la cerradura-? . Entre los estados de A,
slo 4 tienen una transicin en b a 5, de modo que el AFD tiene una transicin en b desde A a.
cerradura- ? (A, b)
cerradura- ? (mover(A, b)) =cerradura- ? ({5})
cerradura- ? ({5}) = {1,2,4,5,6,7}
Por lo que, tranD[A, b] = C. Es decir; C = {1,2,4,5,6,7} Se contina este proceso con los conjuntos B y C, ahora sin marcar,
finalmente se llegar al punto en que todos los conjuntos que son del estado AFD estn marcados.
3.4 REPRESENTACIN DE ER USANDO AFND
ERs, AFDs y AFNDs son mecanismos equivalentes para denotar los lenguajes regulares. En estas tres secciones
demostraremos esto mediante convertir ER AFND AFD ER. Las dos primeras conversiones son muy relevantes en la
prctica, pues permiten construir verificadores o buscadores eficientes a partir de ERs.
Definicin: La funcin Th convierte ERs en AFNDs segn las siguientes reglas.

Prueba: Es fcil verificarlo por inspeccin y aplicando induccin estructural. La nica parte que puede causar problemas es la
clausura de Kleene, donde otros esquemas alternativos que podran sugerirse (por ejemplo M = (K1, , 1 {(f1, , s1), (s1, ,
f1)}, s1, {f1}) tienen el problema de permitir terminar un recorrido de Th(E1) antes de tiempo. Por ejemplo el ejemplo que
acabamos de dar, aplicado sobre E1 = a b, reconocera la cadena x = aa.

Representacin de la expresin regular


Existen algoritmos que relacionan la especificacin de tokens -expresiones regulares-, con el reconocimiento de stos
-autmatas finitos-. Es posible dada una expresin regular obtener el AFD que reconozca las cadenas del lenguaje denotado
por la expresin regular. Tambin es posible obtener el AFND que reconozca el lenguaje representado por dicha expresin
regular.
El algoritmo que permite construir el autmata finito determinstico est fuera del alcance de estas notas ( el alumno no
tiene los prerrequisitos para su estudio en este curso). Sin embargo, el algoritmo utilizado para la construccin del autmata
finito no determinstico AFND, es relativamente sencillo de aplicar, ya que se basa en reglas simples. Existen muchas variantes
de este algoritmo denominado Algoritmo de Thompson.

Este algoritmo es dirigido por sintaxis, es decir, usa la estructura sintctica de la expresin regular para guiar el proceso de
construccin del autmata AFND.
Supongamos que N(s)y N(t)son AFNDs para las expresiones regulares sy t, respectivamente.
a) Para la expresin regular s | t(alternancia), construir el siguiente AFND, N(s|t) :

b) Para la expresin regular st(concatenacin), construir el AFND, N(st) :

c) Para la expresin regular s*, construir el AFND, N(s*) :

3.5 MINIMIZACIN DE ESTADOS EN UN AF


Dos estados de un autmata finito determinista son estados equivalentes si al unirse en un slo estado, pueden reconocer
el mismo lenguaje regular que si estuviesen separados. Esta unin de estados implica la unin tanto de sus transiciones de

entrada como de salida. Si dos estados n o son equivalentes, se di ce que son estados distinguibles. Un estado final con un
estado no- final nunca sern equivalentes.
Un AFD est minimizado, si todos sus estados son distinguibles y alcanzables. Un algoritmo de minimizacin de AFD es el
siguiente:
1. Eliminar los estados inaccesibles es del autmata.
2. Construir una tabla con todos los pares (p, q) de estados restantes.
3. Marcar en la tabla aquellas entradas donde un estado es final y el otro es no-final, es decir, aquellos pares de estados que
son claramente distinguibles.
4. Para cada par (p, q) y cada smbolo a del alfabeto, tal que r = (p,a) y s = (q,a):
1. Si (r, s) ya ha sido marcado, entonces p y q tambin son distinguibles, por lo tanto marcar la entrada (p, q).
2. De lo contrario, colocar (p, q) en una lista asociada a la entrada (r, s).
5. Agrupar los pares de estados no marcados.
Luego del tercer paso, si la tabla creada queda completamente marcada, entonces el AFD inicial ya era mnimo. La
complejidad computacional del problema de minimizar u n AFD es polinomio. De hecho, existen algoritmos ms eficientes an
que el mostrado en este artculo (aunque menos intuitivos). Sin embargo, el problema de minimizar un autmata finito no
determinista es NP- completo y PSPACE- completo.
3.6 APLICACIONES (DEFINICIN DE UN CASO DE ESTUDIO)
Construccin del vehculo evasor de obstculos
Uno de los primeros trabajos que comenzaron a formalizar la dinmica de robots mviles es (Crowley, 1989) en el que se
utilizan dispositivos ultrasnicos en el vehculo para su posicionamiento y orientacin. En (Maes, 1990) se muestra un estudio
del comportamiento de robots autnomos y se divide en construccin de mapas, exploracin, transitar y evasin de
obstculos. En (Seng, 1997) se plantea como una de las mayores problemticas de la navegacin robtica la localizacin y se
proponen los pasos claves para el diseo, calibracin y modelado de autmatas. Hay otros autores que refuerzan la evasin
de objetos o desarrollo de trayectorias mediante tcnicas de navegacin como son: navegacin inercial, compases magnticos
y triangulacin. (Borenstein, 1997).
(Betke, 1997) considera que el autmata puede reconocer marcas especificas en el medio por el cual se desplaza usando
reconocimiento de patrones visuales. La localizacin robtica as como la evasin de obstculos del autmata, ha llegado a
ser uno de los problemas fundamentales en los robots mviles, y por ello, en (Fox, 1999) se presenta una versin de la
localizacin Markov, en donde la idea principal es mantener una densidad de probabilidad sobre el espacio de todas las
localizaciones posibles de un robot en su entorno.
El Vehculo Evasor de Obstculos (VEO de aqu en adelante) obtiene informacin del medio por el cual transita a travs de
unos fotodiodos y unas fotorresistencias que actan como sensores, estos sensores arrojan como resultado niveles de voltaje
que varan en proporcin directa con la proximidad al obstculo, los niveles de voltaje despus de pasar por un comparador de
niveles se convierten en niveles digitales, los cuales determinan una direccin especifica al actuar como entradas en el bus de
direcciones de una memoria RAM, la cual se ha cargado con un programa, que contiene instrucciones precisas para lograr la
evasin de obstculos, estas instrucciones que provienen del bus de datos de la memoria RAM, controlan directamente 2
dispositivos transistorizados conocidos como puentes H, los cuales interactan directamente con los motores de direccin del
vehculo, indicndoles la accin de giro y por tanto ejecutando los diferentes movimientos para los cuales se diseo VEO.
Es necesario por tal motivo presentar el programa que se cargo en la memoria RAM segn (Catlogo,2010), lo cual
representa el punto de partida para definir el alfabeto que se emplea para la descripcin de la dinmica de VEO a travs de
autmatas finitos.
En la figura 5 se puede observar la apariencia fsica del vehculo evasor de obstculos.

La forma en que se encuentran distribuidos los cuatro sensores en el vehculo se puede apreciar en la figura 2, donde cada
uno de los sensores establece un bit en el bus de direcciones de la memoria RAM, teniendo por consecuencia 24direcciones
definidas en la memoria. El sensor 4 establece el primer bit de izquierda a derecha en el bus de direcciones, es decir el bit
menos significativo, el sensor 3 establece el segundo bit, el sensor 2 el tercer bit, y el sensor 1 el cuarto bit, es decir el ms
significativo. Cabe mencionar que bajo ninguna presencia de obstculo los sensores arrojan de manera permanente un bit en
estado 0 hacia el bus de direcciones de la memoria, pero con la presencia de un obstculo, estos arrojan un bit en estado 1.
La presencia de un obstculo en el sensor 1 arrojara como resultado la secuencia de bits 1000 por ejemplo (ver figura 5).
En cada una de las direcciones de la memoria RAM determinadas por los sensores, existe una instruccin cargada que
establece la direccin de giro del motor, despus de haber interactuado con el puente H transistorizado, el cual requiere de 2
bits de control (teniendo por tanto 4 posibles entradas) para realizar 3 acciones bsicas que son: giro del motor hacia un
sentido, giro hacia el lado contrario y permanencia esttica del motor. Estas acciones se ejemplifican con mayor claridad en la
tabla 1.
Tabla 1. Operacin del puente H y direcciones de giro de los motores.

El VEO cuenta con 2 motores de direccin, cada uno de los cuales est controlado por un puente H de manera
independiente. En la figura 6 se aprecia la distribucin de los motores en el vehculo, de donde se estableci el siguiente
lineamiento de operacin: el motor derecho ser controlado por el puente H nmero 1, y el motor izquierdo ser controlado por
el puente H nmero 2.

Teniendo por consecuencia la distribucin de bits provenientes del bus de datos de la memoria RAM, segn lo muestra la tabla
2.

Las acciones evasoras mencionadas en la tabla 2, se describen en la tabla 3.

En la accin evasora A, la entrada para el autmata finito estar definida por y donde y puede tomar cualquiera de las dos
posibles entradas que originan el estado A en el vehculo y que son: a y d. Mientras que en la accin evasora G, la entrada

para el autmata finito estar definida por z donde z puede tomar cualquiera de las 9 posibles entradas que provienen de los
sensores y que originan el estado G en el vehculo, que son: f, g, h, j, k, l, n, , o. Las estrategias C y D estn diseadas para
evadir obstculos que se presenten en la parte trasera del vehculo, es decir cuando se presentan obstculos en los sensores
3 y 4. Las estrategias evasivas E y F estn diseadas para evitar obstculos que se presenten en la parte delantera del
vehculo, es decir cuando se presentan obstculos en los sensores 1 y 2. En la figura 4(a) se resumen los movimientos
anteriormente descritos.

Antes de presentar el diagrama de transiciones que caracteriza la dinmica de VEO, es necesario establecer el conjunto
de trayectorias posibles, lo cual lo hacemos con ayuda de una pequea retcula, que representa un plano bidimensional, la
cual tiene un conjunto de obstculos a evadir, estos ltimos estn representados por cuadros negros en la figura 4(b); de
donde se observa que el conjunto de acciones evasivas seran en forma ordenada: C, D, C, D, y que las entradas al sistema
(VEO) que haran posible una trayectoria valida seran: b, c, b, c. Ntese que la permanencia en un estado no est definida
como una trayectoria valida, por tanto dicho de otra forma una cadena definida por y,y,y b,b,b c,c,c d,d,d, etc. no es
permitida por el autmata, pues en el diagrama de transicin presentado en una seccin posterior ni siquiera permite una
transicin de estados.
Un anlisis detallado a los estados posibles del vehculo y las trayectorias validas, y considerando lo establecido en la
descripcin de las acciones evasoras, nos permite denotar de manera formal el autmata finito no determinstico
correspondiente como sigue:
M = (Q, , , q0, F)
Donde Q = {q0, q1, q2, q3, q4, q5, q6,}.
= {b, c, e, i, m, y, z}.
F = {}.
Donde se define a F como un elemento nulo, ya que como se aprecia en la tabla 3 el vehculo no tiene definido estados
finales. De una observacin directa al autmata anteriormente planteado se distingue que el modelado descriptivo del vehculo
se pudo realizar utilizando siete estados, despus de haber redefinido el alfabeto del autmata, este se compone de cinco
entradas y finalmente el estado inicial se encuentra definido por un solo estado que es q0.
Resultados
El modelado de la trayectoria del vehculo VEO presentado en este artculo por medio de autmatas finitos no
determinsticos result ser una valiosa herramienta para describir de manera formal su dinmica, lo cual no representaba una
tarea tan sencilla, pues VEO tiene bien definidos 7 posibles estados, lo cual complica un poco su entendimiento. Se puede
notar por inspeccin directa por parte del lector a travs de un anlisis al diagrama de transicin y a la funcin de transicin
presentados en este trabajo en las figuras 7 y 8 respectivamente, que el siguiente estado del vehculo, con siete estados finitos
y siete entradas conocidas, se puede estimar de una forma muy sencilla y concisa, lo cual represent uno de los retos
primordiales de este trabajo.

UNIDAD 4 MAQUINA DE TURING.


Adentrndose a la Historia de la MT
Poco de historia
A finales del siglo XIX, el matemtico David Hilbert se pregunt si era posible encontrar un algoritmo para determinar la
verdad o falsedad de cualquier proposicin matemtica. En particular, se preguntaba si existira un modo de determinar si
cualquier frmula del clculo de predicados de primer orden, aplicado a enteros, es verdadera. Dado que el clculo de
predicados de primer orden sobre los enteros es suficientemente potente como para expresar frases como esta gramtica es
ambigua, si Hilbert hubiera tenido xito, existiran algoritmos para dichos problemas, que ahora sabemos que no existen esta
proposicin se conoce con el nombre de problema de Hilbert.
En 1963, Alan Mathinson Turing propuso la mquina que lleva su nombre como modelo de cualquier computacin posible.
Este modelo se parece ms a una computadora que a un programa, aunque las verdaderas computadoras electrnicas, o
incluso los electromecnicas, tardaron varios aos en ser construidas. La mquina de Turing consta de una unidad de control,
que pueda estar en cualquier estado tomado de un conjunto infinito. Hay una cinta dividida en cuadrados o casillas, y cada
casilla puede contener un smbolo, tomado de otro conjunto infinito. Inicialmente, se sita en la cinta de entrada, que es una
cadena de smbolos de longitud infinita, elegidos del alfabeto de entrada. El resto de las casillas de la cinta, que se extiende
infinitamente hacia la derecha y hacia la izquierda, contiene, inicialmente, un smbolo denominado espacio en blanco. El
espacio en blanco es un smbolo de cinta, pero no un smbolo de entrada, y puede haber tambin otros smbolos de cinta
adems de los smbolos de entrada y del espacio en blanco. Existe una cabeza de la cinta que siempre est situada sobre una
de las casillas de la cinta. Se dice que la mquina de Turing est sealando dicha casilla. Al principio, la cabeza de la cinta se
encuentra en la casilla de la entrada situada ms a la izquierda. Un movimiento de la mquina de Turing es una funcin del
estado de la unidad de control y del smbolo de la cinta al que seala la cabeza.
4.1 DEFINICIN FORMAL MT
Definicin 1:
Una Mquina de Turing es un modelo matemtico que consiste en un autmata capaz de implementar cualquier problema
matemtico expresado por medio de un algoritmo. Alan Turing; fue un matemtico ingls que vivi durante la primera mitad del
siglo XX. Aunque fue un matemtico brillante en muchos campos, destacando especialmente en criptografa, su principal
inters se centraba en la lgica, que en aquellos momentos se encontraba en plena ebullicin gracias al intento de David
Hilbert de hallar una formulacin de las matemticas sobre una base estricta de lgica formal. La Mquina de Turing, o
Mquina de Computacin Lgica como la llamaba l, fue quizs la mayor aportacin de Alan Turing a esta tarea y con
seguridad su descubrimiento de mayor transcendencia, ya que abri el camino de la ciencia de la Computacin, que a su vez
nos lleva al computador que en estos momentos estoy utilizando para escribir esto, o al que usted est usando para leerlo. En
definitiva, Alan Turing fue uno de los cientficos ms importantes de la primera mitad del siglo XX y, sin duda, una de las
mentes que ms influy en la manera actual que tenemos de ver el mundo e interactuar con l.
Una Mquina de Turing es un modelo matemtico

Modelo matemtico es una expresin de esas que se utilizan con cierta frecuencia pero que pocas veces nos paramos a
pensar qu significa. Y aunque parezca algo complicado, en realidad se trata de un concepto bastante sencillo.
Es un conjunto de reglas que encajan en la explicacin y resolucin de un problema, es decir, que modelizan una
situacin concreta para poder explicarla y encontrar el modo de resolverla. Ms an, se podra decir que un modelo
matemtico es un conjunto de reglas capaces de generalizar y resolver un problema matemtico concreto y cualquier otro de
su misma naturaleza que se pueda plantear.
Una mquina de Turing es un autmata
En matemticas, un autmata es lo que se conoce como una mquina terica, es decir, un dispositivo cuyo funcionamiento se
estudia sin necesidad de construirlo realmente. En concreto un autmata es una mquina terica que lee unas instrucciones
en forma de smbolos y cambia de estado segn stas.
Una mquina de Turing es un autmata que consta de una cabeza lectora y una cinta infinita en la que la cabeza puede leer
smbolos, borrarlos, escribirlos y moverse a la derecha o a la izquierda. Por supuesto tambin consta de una funcin de estado
que determinar los cambios de un estado a otro que se deben producir en funcin de las instrucciones que reciba.

Definicin 2
La Mquina de Turing (MT) es el modelo de autmata con mxima capacidad computacional: la unidad de control puede
desplazarse a izquierda o derecha y sobre escribir smbolos en la cinta de entrada.
Definicin formal:
Una Mquina de Turing MT es una sxtupla M =

donde

Q El conjunto finito de estados de la unidad de control.


El conjunto finito de smbolos de entrada.
El conjunto completo de smbolos de la cinta; siempre es un subconjunto de
La funcin de transicin. Los argumentos de (q; X ) son un estado q y un smbolo de la cinta X . El valor de (q; X ), si esta es
una tupla (p; Y; S ) donde
1. p es el estado siguiente de Q
2. Y es el smbolo de , que se escribe en la casilla sealada por la cabeza de la cinta y que sustituye al smbolo que se
encontraba en dicha casilla.
3. S es un sentido I o D (izquierda o derecha) que nos indica en qu sentido se mueve la cabeza q0
Es el estado inicial.
B Es el smbolo del espacio en blanco B , y aparecer inicialmente en todas las casillas de la cinta, menos en aquellas que
contienen los smbolos de entrada
F es el conjunto de estados finales o de aceptacin
Definicin formal:
Una Mquina de Turing (MT) es una tupla M = (K, , , s), donde
K es un conjunto finito de estados, h K.

es un alfabeto finito, # .
s K es el estado inicial
,

Es la funcin de transicin.

4.2 CONSTRUCCIN MODULAR DE UNA MT


Construccin definicin
Para describir formalmente lo que hace una mquina de Turing, es necesario desarrollar una notacin para describir sus
configuraciones o descripciones instantneas, parecida a la notacin que se desarrolla para los autmatas a pila. En principio
una mquina de Turing dispone de una cinta de longitud infinita, por lo cual podr suponerse que no es posible describir
espticamente su configuracin. Sin embargo, despus de un nmero finito de movimientos, la mquina de Turing solo habr
recorrido un nmero finito de casillas. Por tanto, para cualquier configuracin existe un prefijo y un sufijo infinito de casillas que
no se han recorrido nunca. El contenido de dichas casillas debe Ser espacios en blanco o smbolos del conjunto finito de
smbolos de entrada.
Por lo tanto, en una configuracin solo se muestran las casillas que se encuentren entre el smbolo ms a la izquierda y el
smbolo ms a la derecha de la cinta que no sean espacios en blanco, adems, habr que incluir un nmero finito de espacios
en blanco en la configuracin, si se da la condicin especial de que la cabeza de la cinta seale a uno de los espacios en
blanco situados antes o despus de la cadena de entrada.
Adems de la representacin de la cinta, debe ser posible representar el estado de la unidad de control, as como la
posicin de la cabeza de la cinta. Para ello, insertaremos el estado en la cinta, situndolo inmediatamente a la izquierda de la
casilla sealada por la cabeza. Para que la cadena que representa el contenido de la cinta junto con el estado de la unidad de
control no resulte ambigua, es necesario asegurarse de que no se utiliza como estado ningn smbolo que forme parte del
conjunto de smbolos de cinta. Sin embargo, es sencillo cambiar los nombres de los estados de forma que no tengan nada en
comn con los smbolos de la cinta, dado que la operacin de la mquina de Turing no depende de cmo se llamen sus
estados. Por tanto, utilizaremos la cadena x1x2 ...xi1qxixi+1 ...xn para representar una configuracin en la que:
1. q es el estado de la mquina de Turing.
2. La cabeza de la cinta seala al i-ensimo smbolo a partir de la izquierda.
3. x1x2...xn es la porcin de la cinta que se encuentra entre los smbolos no blancos situados ms a la izquierda y ms a la
derecha. Como excepcin, si la cabeza seala a alguna casilla a la izquierda del smbolo no blanco que se encuentre ms a la
izquierda, o a alguna casilla a la derecha del smbolo no blanco que se encuentre ms a la derecha, entonces algunos
caracteres prefijos o sufijos de x1x2 ...xn sern espacios en blanco, siendo i = 1 o i = n, respectivamente.
Los movimientos de una mquina de Turing se describen utilizando la notacin 7M.
Construccin definicin 2:
Mediante esta tcnica se puedan desarrollarse mquinas de Turing complejas a partir de bloques de elemental es a partir
de mquinas ms pequeas mediaste diagramas de transiciones .La construccin de mquinas de Turing se lleva a cabo
median te los diagramas de transicin y combinarlos de manera parecida a lo que se real i z a en la formacin de la unin y
concatenacin de los autmatas finitos.
- Construccin de mquinas de Turing complejas a partir de bloques elementales.
- Transferencia de control entre mquinas: M1 M2
- Transferencia de control con varios smbolos: M1 } M2 M3
Construccin definicin 3:
En la notacin modular de MTs una MT se ver como un grafo, donde los nodos sern acciones y las aristas condiciones.
En cada nodo se podr escribir una secuencia de acciones, que se ejecutan al llegar al nodo. Luego de ejecutarlas, se
consideran las aristas que salen del nodo. Estas son, en principio, flechas rotuladas con smbolos de . Si la flecha que sale
del nodo est rotulada con la letra que coincide con la que tenemos bajo el cabezal luego de ejecutar el nodo, entonces
seguimos la flecha y llegamos a otro nodo. Nunca debe haber ms de una flecha aplicable a cada nodo. Permitiremos rotular
las flechas con conjuntos de caracteres. Habr un nodo inicial, donde la MT comienza a operar, y cuando de un nodo no haya
otro nodo adonde ir, la MT se detendr.

Las acciones son realmente MTs. Comenzaremos con 2 + || acciones bsicas, que corresponden a las acciones que
pueden escribirse en , y luego podremos usar cualquier MT que definamos como accin para componer otras.
Las acciones bsicas de la notacin modular de MTs son:
Moverse hacia la izquierda (): Esta es una MT que, pase lo que pase, se mueve hacia la izquierda una casilla y se detiene. =
({s},,,s), donde.
(Notar que estamos sobrecargando el smbolo, pero no debera haber confusin.)
Moverse hacia la derecha (): Esta es una MT que, pase lo que pase, se mueve hacia la derecha una casilla y se detiene. =
({s},,,s), donde.
Escribir el smbolo b (b): Esta es una MT que, pase lo que pase, escribe b en la cinta y se detiene. b = ({s},,,s), donde
a , (s,a) = (h,b). Nuevamente, estamos sobrecargando el smbolo b para denotar una MT.
Construccin definicin 4:
Mediante esta tcnica se puedan desarrollarse mquinas de Turing complejas a partir de bloques de elementales a partir
de mquinas ms pequeas mediaste 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
a) Elimine las caractersticas de inicio de los estados iniciales de las mquinas, excepto la de aquel donde iniciara la maquina
compuesta.
b) 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.
c) Para cada uno de los antiguos estados de parada p y cada x en y.
4.3 LENGUAJES ACEPTADOS POR LA MT.
LAMT
Podremos decir que la forma en la que una mquina de Turing acepta una cadena es la siguiente: la cadena de entrada se
sita en la cinta y la cabeza comienza sealando el smbolo de entrada que se encuentra ms a la izquierda; si la mquina de
Turing llega a un estado de aceptacin al final del proceso, se considera que la cadena es reconocida, en caso contrario,
decimos que la cadena no fue aceptada.
De manera formal dada una mquina de Turing M = (Q,,,,q0,B,F), el lenguaje L(M) es el conjunto de cadenas de
tales que q0 7 p para algn estado p del conjunto de estado finales F, y cualesquiera dos cadenas de cinta y . Los
lenguajes que son pueden ser aceptados por la mquina de Turing reciben el nombre de lenguajes recursivamente
enumrales o lenguajes RE.
Sin embargo este no es el nico mtodo para la aceptacin de una cadena, existe otro que comnmente se le conoce con
el nombre de aceptacin por parada. Se dice que una mquina de Turing se para si alcanza un estado q cuando seala a un
smbolo de la cinta X, sin que se produzca ningn movimiento en dicha situacin; es decir (q,X) no est definida. Siempre se
puede suponer que una mquina de Turing se para si acepta, es decir sin introducir variaciones en el lenguaje aceptado, se
puede hacer que (q,X) se quede sin definir siempre que q sea un estado de aceptacin. En general a menos que se
especifique lo contrario, suponemos que una mquina de Turing siempre se para cundo esta en un estado de aceptacin,
aunque no en todos los casos ocurre esto. Los lenguajes reconocidos por mquinas de Turing que siempre se paran, acepten
o no, se les conoce con el nombre de recursivos. Las mquinas de Turing que siempre se paran con independencia de que
acepten o no, son un buen modelo de algoritmo. Si existe un algoritmo para resolver un problema dado, entonces se dice que
el problema es decidible, con lo cual se observa que las mquinas de Turing que siempre se paran, tienen un papel importante
en la teora de la dicisibilidad.
LAMT

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 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, , , q0=q1, B, F, ) una mquina de Turing. Entonces el lenguaje aceptado por M es: L(M) = {w * q1w *
w1pw2 para pF y wi*}.
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.

UNIDAD 5 ANLISIS LXICO.


La fase de rastreo (scanner), tiene las funciones de leer el programa fuente como un archivo de caracteres y dividirlo en
tokens. Los tokens son las palabras reservadas de un lenguaje, secuencia de caracteres que representa una unidad de
informacin en el programa fuente. En cada caso un token representa un cierto patrn de caracteres que el analizador lxico
reconoce, o ajusta desde el inicio de los caracteres de entrada. De tal manera es necesario generar un mecanismo
computacional que nos permita identificar el patrn de transicin entre los caracteres de entrada, generando tokens, que
posteriormente sern clasificados. Este mecanismo es posible crearlo a partir de un tipo especfico de mquina de estados
llamado autmata finito.
5.1 FUNCIONES DEL ANALIZADOR LXICO.
Las funciones de un analizador lxico pueden ser las siguientes:
-

Leer los caracteres de la entrada.


Generar una secuencia de componentes lxicos. (TOKENS).
Eliminar comentarios, delimitadores (espacios, smbolos de puntuacin, fin de la lnea).
Relacionar los mensajes de error con las lneas del programa fuente.
Introducir los identificadores en la tabla de smbolos.

Este lee la secuencia de caracteres del programa fuente, carcter a carcter, y los agrupa para formar unidades con
significado propio, los componentes lxicos. Estos componentes lxicos representan:
-

Palabras reservadas if, while, do,


Identificadores: asociados a variables, nombres de funciones, tipos definidos por el usuario, etiquetas, por ejemplo:
posicin, velocidad, tiempo,
Operadores: = * + - / == > < & =
Smbolos especiales: ; () [] {}
Constantes numricas: literales que representan valores enteros, en coma flotante, etc, 982, 0xf678, -83.2E+2
Constantes de caracteres: literales que representan cadenas concretas de caracteres, hola mundo,

Estas seran funciones secundarias de un analizador lxico:

Manejo del fichero de entrada del programa fuente: abrirlo, leer sus caracteres, cerrarlo y gestionar posibles errores de
lectura.
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 inline: # 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).
Ventajas de separar el anlisis lxico y el anlisis sintctico:
Facilita transportabilidad del traductor (por ejemplo, si decidimos en un momento dado cambiar las palabras
reservadas begin y end de inicio y fin de bloque, por f y g, solo hay que cambiar este mdulo.
Se simplifica el diseo: el analizador es un objeto con el que se interacta mediante ciertos mtodos. Se localiza en un
nico modulo la lectura fsica de los caracteres, por lo que facilita tratamientos especializados de E/S.

5.2 COMPONENTES LXICOS, PATRONES Y LEXEMAS


Componente lxico: es la secuencia lgica y de caracteres relativo a una categora: identificador, palabra reservada
(cadena/numrica), operador o carcter de puntuacin, el componente lxico puede tener uno o varios lexemas.
Patrn: regla que genera la secuencia de caracteres que puede representar a un determinado componente lxico.
Lexema: es una cadena de caracteres que concuerda con un patrn que describe un componente lxico.
El analizador lxico recoge informacin sobre componentes lxicos. Los tokens influyen en el anlisis sintctico, los
atributos en la traduccin de tokens. En prctica lxico suele tener solo un atributo. Para efectos de diagnstico, puede
considerarse tanto el lexema para un identificador como el nmero de lnea en el que se encontr por primera vez.
5.3 CREACIN DE TABLA DE TOKENS
Una tabla de smbolos puede conceptualizarse como una serie de renglones, cada uno de los cuales contiene una lista de
valores de atributos que son asociados con una variable en particular. Las clases de los atributos que aparecen en una tabla
de smbolos dependen en algn grado de la naturaleza del lenguaje de programacin para el cual se escribe el compilador. La
organizacin de la tabla variar dependiendo de las limitaciones de memoria y tiempo de acceso .
Una tabla de smbolo provee la siguiente informacin:
-

Da un identificador.
Que informacin es asociada con un nombre.
Como se asocia esa informacin con un nombre.
Como acceder esta informacin.

Pero las dos funciones importantes que realizan las tablas de smbolos (tambin llamadas tablas de identificadores y
tablas de nombres), en el proceso de traduccin son:
-

Verificar que la semntica sea correcta


Ayudar en la generacin apropiada de cdigo.

Cuando Construir La Tabla De Simbolos Y Cuando Interactuar Con Ella


El punto del procesador de traduccin en el cual son invocadas las rutinas de manejo de la tabla de smbolos depende
primeramente del nmero y la naturaleza de los pasos del compilador.
En un compilador multipasos, la tabla de smbolos es creada durante el paso de anlisis lxico. Por medio de un ndice se
entra a la tabla de smbolos para ubicar la variable, a partir del token generado por el scanner.
5.4 ERRORES LXICOS
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.
Suponiendo que una situacin en la cual el analizador lxico no puede continuar por que ninguno de los patrones
concuerda con un prefijo de la entrada. 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 realizar lo siguiente:
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

5.5 GENERADORES DE ANALIZADORES LXICOS.


Todos los analizadores lxicos realizan la misma funcin (se implementan de igual forma) excepto en los tokens que
reconocen, las expresiones regulares que los definen. Resulta entonces natural y una forma de ahorrar esfuerzo,
utilizargeneradores automticos de analizadores lxicos. Estos generadores solo necesitan conocer la especificacin de
tokens a reconocer.
5.6 Aplicaciones (Caso de estudio)

UNIDAD 6 ANLISIS SINTCTICO.


6.1 GLC.
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 T, eventualmente vaca ( = ).
Una GLC es un dispositivo generador.
Definimos el lenguaje LG generado por una gramtica G del siguiente modo:
LG = { w / S * w } , siendo * una especie de clausura transitiva de
y w una tira de terminales.
Reglas para oraciones aseverativas (esbozo)
O GN GV
O GV
GV V
GV V GN
GV V GAdj
GV V GAdv
GV GV GP [1]
6.2 RBOLES DE DERIVACIN.
Podemos decir:

Del mismo modo se puede decir


deriva en uno o ms pasos.
Una derivacin por la izquierda es aquella en la que se reemplaza el no terminal ms a la izquierda en cada paso de la
derivacin.
. anlogamente para la derecha
Una derivacin por la izquierda corresponde a la numeracin preorden de los nodos internos de su rbol de anlisis
gramatical asociado.
. derecha . postorden inversa.
Toda derivacin de las gramticas de tipo 1, 2 3 se puede representar mediante un rbol.
6.3 FORMAS NORMALES DE CHOMSKY.
Una gramtica formal est en Forma normal de Chomsky si todas sus reglas de produccin son de alguna de las
siguientes formas:

donde , y 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.
En algunos textos se puede encontrar una definicin de una GFNCH de forma que cualquier GFNCH produzca cualquier
lenguaje independiente del contexto y de la misma manera, que para cualquier lenguaje independiente del contexto exista una
GFNCH que lo defina. Esta definicin apenas se diferencia en permitir una regla de la siguiente forma:

donde es el smbolo distinguido (o inicial) de la gramtica, es un smbolo no terminal (o variable), y tambin son smbolos no
terminales pero distintos de , es un smbolo terminal, y es la cadena nula (o vaca).

a) <w> ::= <w1> <w2> <w3>

b) <w> ::= <w1><w2> | <w1>a | bc<w2>

c) <w> ::= ab<w>.

d) <w> ::= ab | ab<w>.

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 caso de que toda cadena w L(G) tenga un nico
rbol de derivacin, la gramtica no es ambigua.
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 son ambiguas; 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

Ambigedad Transitoria:
Este tipo de ambigedad puede llegar a ser eliminada realizando una serie de transformaciones sobre la gramtica
original. Una vez que se logra lo anterior, la gramtica queda lista para ser reconocida por la mayor parte de los analizadores
sintcticos. (Se le considera "ambigedad" porque existen mtodos para realizar anlisis sintctico que no aceptan gramticas
con estas caractersticas).
Dnde se presenta la Ambigedad Transitoria generalmente la ambigedad se presenta cuando existen producciones con
factores comunes (distintas alternativas para un smbolo no-terminal que inician de la misma forma); cuando existen
producciones que son recursivas izquierdas (producciones para unsmbolo no-terminal en las cuales el primer smbolo de su
forma sentencial es ese mismo smbolo no-terminal).

Cmo solucionar el problema de la Ambigedad Transitoria?


Para eliminar este tipo de ambigedad, es necesario, primero eliminar:
-

Factores comunes izquierdos inmediatos y No-inmediatos.


Recursividad izquierda inmediata y No-inmediata.

ELIMINACIN DE LA AMBIGEDAD.
-

No existe un algoritmo que nos indique si una GIC es ambigua


Existen LIC que slo tienen GIC ambiguas: inherentemente ambiguos
Para las construcciones de los lenguajes de programacin comunes existen tcnicas para la eliminacin de la
ambigedad

Ejemplo: causas de ambigedad en la siguiente gramtica


No se respeta la precedencia de operadores
Una secuencia de operadores idnticos puede agruparse desde la izquierda y desde la derecha. Lo convencional es
agrupar desde la izquierda.
6.6 GENERACIN DE MATRIZ PREDICTIVA (CLCULO FIRST Y FOLLOW)
FIRST
Si es cualquier cadena de smbolos gramaticales, se considera FIRST() como el conjunto de terminales que encabezan
las cadenas derivadas de . Si = * => , entonces tambin est en FIRST().
Para calcular FIRST(X) para algn smbolo X de la gramtica, se aplican las siguientes reglas hasta que no se pueda
aadir nada nuevo al conjunto FIRST:
1. Si X es terminal, entonces FIRST(X) es {X}.
2. Si X es no terminal y existe la produccin X , entonces aadir a FIRST(X).
3. Si X es no terminal y X Y1 Y2 .. . Yk es una produccin entonces, para todo i (con i variando desde 1 hasta k) tal que Y1 ,
Y2 , ..., Yi-1 sean todos no terminales y FIRST(Y1), FIRST(Y2), ..., FIRST(Yi-1) contengan todos , se aaden todos los
smbolos no nulos de FIRST(Yi ) a FIRST(X). Finalmente, si est en FIRST(Yj ) para j = 1, 2, ..., k (o sea, en todos), entonces
se aade a FIRST(X).
Dicho de otra forma, lo anterior significa que todos los elementos de FIRST (Y1), excepto , pertenecen tambin a
FIRST(X). Si Y1 no deriva , entonces ya ha terminado el clculo de FIRST(X), pero en caso contrario, es decir, si Y1 =*=> ,
entonces todos los elementos de FIRST(Y2) excepto pertenecen tambin a FIRST(X), y as sucesivamente. Finalmente, si
todos los Yi derivan , entonces se aade a FIRST(X).
FOLLOW
Se define FOLLOW(A), para el no terminal A, como el conjunto de terminales a que pueden aparecer inmediatamente a la
derecha de A en alguna forma sentencial, es decir, el conjunto de terminales a tal que haya una derivacin de la forma
S=*=>Aa para algn y . Si A puede ser el smbolo de ms a la derecha en alguna forma sentencial, entonces $ est en
FOLLOW(A).
Para calcular FOLLOW(A) para un smbolo no terminal A, se aplican las siguientes reglas hasta que no se pueda aadir nada
ms al conjunto FOLLOW.
1. $ est en FOLLOW(S), siendo S el axioma de G.
2. Si existe una produccin A B, entonces todo lo que est en FIRST(), excepto , est en FOLLOW(B).
3. Si existe la produccin A B y FIRST() contiene (es decir, =*=>), o bien si existe una produccin A B, entonces
todo lo que est en FOLLOW(A) est en FOLLOW(B).
6.7 TIPOS DE ANALIZADORES SINTCTICOS
Analizador Descendente:

Se construye el rbol de anlisis sintctico partiendo del smbolo inicial y aplicando las producciones mediante
derivaciones por la izquierda, el smbolo a expandir es el que este ms a la izquierda.
Ejemplo:
G=({+,*, ID, (, )}, {E, T, P}, E, P)
P={ E:=E+T | T; T:=T*P | P; P:= ID | ( E ) }
Frase
ID + ( ID * ID )
Analizador Ascendente:
Se construye el rbol de anlisis sintctico partiendo de la frase a reconocer y aplicando las producciones mediante
reducciones hasta llegar a 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 ) }
Frase
ID + ( ID * ID )

6.8 MANEJO DE ERRORES


Rutinas de Manejo de Errores
Ocupan gran parte de los compiladores
Objetivos
- Informar con claridad, exactitud
- Recuperacin rpida
- recuperacin no es correccin
- No debe retrasar el procesamiento de programas sin errores
- No generar errores en cascada (ej. eliminar identificador)
Acciones posibles
- Detectar errores
- Informar de los errores

Recuperar de los errores


Corregir errores

Necesidad actual de recuperacin?


Ms rpido re-compilar que leer siguiente erro
Tipos de errores
-

Lxicos: escribir mal un identificador, nmero.


Sintcticos: no poner un ; al final de una sentencia, estructura incorrecta.
Semnticos: multiplicar por una variable booleana
Lgicos: bucle infinito

Herramientas para disminuir el nmero de errores


- Lxicos
- Si se utiliza alguna herramienta que complete palabras
- Sintcticos
- Si se utiliza algn editor basado en sintaxis (colores)
- Semnticos
- Busca funciones/clases e indica tipos especificados
Modo de Pnico
Caractersticas
- Mtodo ms sencillo
- Lo pueden usar la mayora de los AS
- No entra en lazos infinitos
- Adecuado para lenguajes en los que son raros mltiples errores en la misma proposicin
Funcionamiento general
- El AS desecha smbolos de la entrada, uno por uno, hasta encontrar un token de sincronizacin para continuar
- Delimitadores (punto y coma, palabras clave como end) Inconvenientes
- Podran omitirse gran cantidad de smbolos sin analizar
A nivel de frase
Caractersticas
- Correcciones en la cadena de entrada
Funcionamiento
- Descubierto el error se corrige (localmente) la entrada por un prefijo que permite continuar el AS
- Sustituir una coma por un punto y coma, insertar un punto y coma, etc.
Inconvenientes.
- Dificultad para resolver situaciones en las que el error se produjo antes de la deteccin de ste
- Pueden producir lazos infinitos
- Evitar insertar smbolos antes del smbolo actual en la entrada
Producciones de error
Funcionamiento
- Conocidos los errores ms comunes, se extiende la gramtica con producciones de error
- Reconocido el error, se dan diagnsticos precisos de la construccin errnea
- Ej.:
- E->E op T | E->T
- E-> E T //falta operador
- T->id | num
-

Inconvenientes
- Dificultad para ir ms all de los casos particulares ms frecuentes
- Generacin ambigedades
6.9 GENERADORES DE ANALIZADORES SINTCTICOS
Hemos visto cmo el anlisis lxico facilita la tarea de reconocer los elementos de un lenguaje uno a uno. A partir de ahora,
vamos a centrarnos en el anlisis sintctico, que nos permitir averiguar si un fichero de entrada cualquiera respeta las reglas
de una gramtica concreta. Para el tema del anlisis sintctico vamos a utilizar la herramienta yacc (Yet Another Compiler
Compiler).
Funcionamiento de yacc
Igual que suceda con lex, yacc no es directamente un analizador sino un generador de analizadores. A partir de un fichero
fuente en yacc, se genera un fichero fuente en C que contiene el analizador sintctico. Sin embargo, un analizador sintctico
de yacc no puede funcionar por s solo, sino que necesita un analizador lxico externo para funcionar. Dicho de otra manera, el
fuente en C que genera yacc contiene llamadas a una funcin yylex() que debe estar definida y debe devolver el tipo de
lexema encontrado. Adems, es necesario incorporar tambin una funcin yyerror(), que ser invocada cuando el analizador
sintctico encuentre un smbolo que no encaja en la gramtica.

El lenguaje Yacc
Esquema general
Un programa fuente de Yacc se parece bastante a uno de lex. La diferencia principal est en la seccin de reglas, que en
vez de expresiones regulares contiene las reglas de la gramtica:

De estas tres secciones, slo la segunda es obligatoria, y no debe estar vaca (ntese que en lex, las tres secciones
pueden estar vacas). Esto quiere decir que el mnimo programa en yacc es:

%%
regla gramatical accin en C
La seccin de declaraciones puede incluir varias cosas, tal y como ocurra en lex, pero ahora su funcin principal no es
definir expresiones regulares, sino declarar los smbolos terminales de la gramtica mediante la directriz %token. Todo lo que
no sea un terminal, ser considerado un smbolo no terminal, y por tanto debe haber una regla para l:
%token IF,ELSE,LLAVE_AB,LLAVE_CE,IDENT

La seccin de reglas contiene la gramtica en s. Componentes es una combinacin de terminales y no terminales que
describe al no terminal de la izquierda de la regla:
no_terminal: componentes {acciones en C}

La seccin de rutinas tiene la misma funcin que la de lex, pero yacc (dependiendo de su variante) no define por
defecto las funciones main(), yylex() e yyerror(), as que hay que incluirlas aqu, o bien en otro fichero que se enlazar
en la fase final de la compilacin.

Yacc genera una funcin llamada yyparse() que contiene el analizador sintctico. Esta funcin se comporta como una
mquina de estados cuya misin es intentar reducir todo el fichero de entrada al smbolo inicial de la gramtica (el primero que
se haya definido). Si yacc lo consigue, el analizador sintctico volver sin error, y en caso contrario, se invocar a la funcin
yyerror(), que debe estar definida tambin en algn sitio.

Вам также может понравиться