Академический Документы
Профессиональный Документы
Культура Документы
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.
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
-
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.
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.
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
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
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.
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) :
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.
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.
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
es un alfabeto finito, # .
s K es el estado inicial
,
Es la funcin de transicin.
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.
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:
-
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.
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:
-
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:
-
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).
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).
ELIMINACIN DE LA AMBIGEDAD.
-
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 )
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.