Академический Документы
Профессиональный Документы
Культура Документы
The Author
The Date
ndice general
I
1. Introduccin
2. Objetivo
3. Justicacin
4. Fases de un Compilador
8
4.1. Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.2. Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.3. Compilacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5. Lenguajes Regulares y Autmatas Finitos
5.1. Introduccin . . . . . . . . . . . . . . . . . .
5.2. Autmatas Finitos . . . . . . . . . . . . . .
5.2.1. Autmatas . . . . . . . . . . . . . .
5.2.2. Autmatas Finitos . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
19
19
19
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
22
22
22
23
23
24
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
ndice de guras
ndice de cuadros
Parte I
Captulo 1
Introduccin
Esta investigacin fue planteada con el n de transmitir en fomra sencilla y concreta el proceso de
compilacin, y as como proporcionar las herramientas asociadas para llevarla a cabo exclusicamente.
Este documento trata del desarrollo de un compilador para el lenguaje de programacin LRC, el cual
evala expresiones aritmeticas simple, con variables de tipo entero.
el proceso de compilacin llevado a cavo en dos fases:
1. Analisis. Verica la correcta escritura de comandos, la estructura de instrucciones, la utilizacin
de variavles dadas de altta en el programa y la aignacin de valores a variables del mismo tipo.
Una vez terminada con exito la fase de analisis, se produce un codigo intermedio en que es la
entrada a la siguiente fase.
2. Sintesis. escribe el codigo intermedio, verica que procesos pueden ser sintetizados y los recodica de manera que el codigo sea optimizado, agrega los procesos externos que el codigo requiere
y, nalmente, proporciona el codigo ejecutable.
Para la explicacin de las fases antes mencionadas, este documento esta estructurado de la siguiente
forma:
a) Captulo 1 proporciona una visin general del proceso de compilacin.
b) Capitulo 2 describe la relacin existente entre los automatas nitos y los lenguajes regulares, con
el n de entender mejor el analisis lexicograco.
c) Captulo 3 & 4, explican en forma sencilla la relacin de las gramaticas libres de contexto y los
automatas tipo pila, mediante la descripcin de estos conceptos se pretende obtener una idea
mas clara acerca del analisis sintactico.
d) Captulo 5, 6 & 7, explican como se creo el compilador, utilizando todas las herramientas antes
mencionadas, adems como complemento al documento se muetra un conjunto de apendices en
los cuales se listan las diferentes etapas del desarrollo del compilador.
Captulo 2
Objetivo
Al terminar el presente trabajo, se pretende:
1. Describir que es un compilador y como funciona.
2. Conocer la relacin existente entre cada uno de las fases de compilacin.
3. Desarrollar un compilador para un lenguaje de programacin LRC, el cual evalua expresiones
aritmeticas simples con datos de tipo entero.
4. Obtener una obra de consulta con informacin suciente y conable acerca del proceso de
compilacin.
El logro de dichos objetivos se vera reejado al momento en que el compilador denomiando COMMIR (siglas de Compilador Mirna), se encuentre terminado. El compilador constara de 3 etapas:
Analisis Lexicograco.
Analisis Sintactico.
Generacin de Codigo.
Captulo 3
Justicacin
Como es bien sabido los libros del rea de la informtica son materiales que no siempre estn
al alcance econmico de las instituciones que imparten este tipo de conocimientos, aunado a esto
podramos decir que es imposible o casi imposible la adquisicin de estas obras por parte de los
estudiantes, lo cual nos lleva a un problema grave en el proceso de aprendizaje, que es la consulta
de fuentes bibliogrcas. Teniendo en cuenta lo anterior, la realizacin de esta investigacin genero la
recopilacin detallada del proceso de compilacin, logrndose las siguientes metas:
1. Obtener una obra con informacin conable y suciente para el estudio del tema.
2. Proporcionar la posibilidad a estudiantes de accesar a dicha obra.
3. Aportar la investigacin resultante al acervo bibliogrco del Centro Universitario.
Desde el punto de vista educativo, en el cual se engloba el presente estudio, el material proporcionara
la herramienta para obtener conocimientos bsicos acerca del tema antes mencionado (compiladores),
dicho estudio no pretende solamente procesar la informacin que otros autores presentan y transmitirla
en forma accesible para los lectores, es decir, se dar:
1. Un panorama general de lo que son los sistemas de compilacion.
2. Describir en terminos generales lo que es compilador.
3. Se describir e; funcionamiento del compilador en forma terica y prctica.
Al termino del estudio se pretende contar con la informacin suciente para poder sustentar que
se conoce el tema, es decir, lograr dominar los conceptos bsicos sobre compiladores, de esta forma se
podr transmitir desde un punto de vista personal.
Es necesario destacar que la presente obra servir como base para futuras investigaciones, ya sea
como material de consulta o como punto de partida.
Captulo 4
Fases de un Compilador
4.1.
Introduccin
Sistema Operativo
Es el encargado de dirigir las operaciones globales de la computadora, instruye a la computadora
para ejecutar otros programas, controla el almacenamiento y recuperacin de archivos. Los sistemas
operativos pueden ser monousuario (un solo usuario), multiusuario o tiempo compartido (diferentes
usuarios), monocarga (una sola tarea) o multitarea (mltiples tareas) [Tanenbaym88].
Lenguajes de Alto Nivel
Son aquellos cuyas instrucciones o sentencias son escritas con palabras similares al lenguaje del ser
humano, por lo general al lenguaje ingls, lo cual facilita la escritura y su comprensin. Este tipo de
lenguajes requieren ser traducidos a lenguaje mquina para que la computadora pueda ejecutarlo.
Lenguajes Procesadores
Como ya se mencion, estos tienen como principal funcin realizar la traduccin del programa
fuente o lenguaje maquina con el n de llevar a cabo la tarea para la cual fueron creados. El lenguaje
fuente de estos es un lenguaje de alto nivel, como por ejemplo C.
Estos lenguajes se clasican en:
Intrpretes: Es un lenguaje que acepta como entrada un programa escrito en un lenguaje fuente
y va ejecutando las instrucciones conforme las va leyendo.
Traductores: Aceptan igualmente programas en lenguaje fuente, la salida que producen es un
programa en lenguaje objeto, este programa realiza la misma tarea que el fuente.
Los lenguajes traductores se dividen en:
Ensambladores: Traduce programas escritos en lenguajes de bajo nivel a cdigo mquina. En un
lenguaje dependiente de la mquina, es decir, dependen del conjunto de instrucciones especcas
de la computadora. Las instrucciones en este lenguaje se escriben en cdigos alfabticos conocidos como mnenotecnicos, es decir, abreviaturas de palabras inglesas y espaolas, por ejemplo,
ADD=suma, SUB=resta, DIV=dividir, STO=almacenar, etc., que tienen una representacin
binaria y que estn relacionadas directamente a una operacin.
Compiladores: Traducen programas escritos en lenguajes de alto nivel a cdigo mquina. Es un
traductor cuyo lenguaje fuente es un lenguaje de alto nivel y cuyo lenguaje objeto es parecido al
lenguaje maquina {Terrence84].
4.2.
Compiladores
Denicin
Es un traductor de programas escritos en un lenguaje de alto nivel a una secuencia de instrucciones
de la maquina con el n de proporcionar la salida deseada. Parte del proceso de compilacin es la
identicacin de errores del programa fuente [Aho78].
Las tareas del compilador son llevadas mediante procesos que siguen diferentes estrategias dependiendo del lenguaje fuente del programa a compilar. Por lo tanto, existen compiladores para cada
lenguaje.
Un compilador puede utilizar un lenguaje ensamblador como un paso intermedio en la traduccin
o puede traducir de forma directa a lenguaje mquina.
Antecendentes
El primer lenguaje que se utiliz en la programacin de las computadoras digitales fue el lenguaje
mquina, que se expresa en trminos binarios. Debido a la dicultad para el programador se desarroll
el lenguaje ensamblador, que, aunque segn estando prximo a la estructura u diseo de la mquina,
sustitua el cdigo maquina por cdigos mnemotcnicos y smbolos.
A mediados de los aos cincuenta aparecen los lenguajes macroensambladores, con potentes instrucciones sustituyendo a los procesos de codicacin mnemotcnicos largos e incomodos (proceso de
traduccin a lenguaje maquina).
9
Siguiendo los principios de los macroensambladores, a inicios de los setenta se desarroll el FORTH
1, que dio lugar en los ochenta al FORTH utilizado en microoperaciones, as como al PLZ/ASM.
De forma paralela a los lenguajes macroensambladores se desarrollaron lenguajes que se alejaban
de la mquina, se aproximaban mucho ms al problema y proporcionaban una forma ms simple
de programar, dado que las instrucciones eran ms parecidas al lenguaje del ser humano. Los dos
lenguajes histricamente ms importantes son el FORTRAN y el COBOL. El primero dedicado al
campo cientco y el segundo ligado al campo comercial y de gestin [Lpez97].
Los primeros lenguajes dieron origen a un nuevo trmino Compilador. Se le atribuye a Gace
Murray Hopper la acuacin de este trmino y se refera al trabajo que estaba detrs de la programacin en aquellos tiempos exista una biblioteca de programas constituida de un conjunto de rutinas,
necesarias de esa biblioteca y se integraban para conformar el proceso que ejecutara la computadora.
Quien realizaba este trabajo de acopio de rutinas y de integracin sele denominaba compilador, de ah
que los nuevos lenguajes tuviesen sus propios compiladores.
El primer compilador fue el A-D, escrito por el Dr. Grace Murray Hopper para la UNIVAC en
1952. Este programa compilo subrutinas de una librera de cinta magntica dentro de programas de
computadora completos. Alrededor de 1957 el IT (Internal Traslator), lenguaje de A. J. Perlis, J.
W. Smith y H. R. Van Zoeren, estuvo disponible para la IBM 650 y la Burroughs 250 Datatrom,
el IT fue un lenguaje que ocurra en dos diferentes maquinas. Desde entonces, se han descubierto
tcnicas sistemticas para el manejo de las tareas de compilacin, se han desarrollado lenguajes de
implantacin, entornos de programacin y herramientas de software que permiten la construccin
de compiladores, como ejemplo Lex, para especicar los analizadores lxicos y YACC, generador de
analizadores sintcticos [Abo90].
En nuestros das, el termino an se conserva, aunque con un sentido ligeramente diferente al planteado por Hopper. Hoy en da, un compilador es un traductor que facilita la comunicacin entre el programador y la mquina, por medio de un proceso de transformacin.
Como antecedente al desarrollo de un compilador para un lenguaje cuyos programas tienen caractersticas especcas podemos nombrar el trabajo realizado por el M. C. Gabriel Alejandro Ruelas
ngeles, esta investigacin consiste en la construccin de un autmata que trabaja con aritmtica
racional en el lenguaje C para microcomputadoras, el cual tiene como objetivo crear un sistema que
transforme programas automticamente para que sean capaces de usar precisin arbitraria, lo cual
signica que un usuario de este sistema, despus de usarlo, tenga un programa equivalente al original
pero con la diferencia que el programa transformado trabajara con la precisin que el usuario le indique
[Ruelas90].
4.3.
Compilacin
Se denomina compilacin al proceso de traducir un programa fuente en condigo mquina, la compilacin es denida por los procesos de analizar y sintetizar un programa fuente, es decir, determinar
la estructura y el signicado de un cdigo fuente y traducirlo a cdigo mquina.
La parte de anlisis divide el programa fuente en sus componentes y crea una representacin
intermedia de dicho programa. En esta etapa el compilador trabaja directamente con el programa
fuente.
La parte de sntesis elabora el programa objeto tomando como base el resultado del anlisis {Aho90].
Si tomamos literalmente las deniciones de anlisis y sntesis del [Aho90] tenemos que el anlisis
se lleva a cabo mediante 4 etapas:
Anlisis Lexicogrco
Anlisis Sintctico
Anlisis Semntico
Generador de Cdigo Intermedio
La sntesis se lleva a cabo mediante 3 etapas:
Optimizacin de Cdigo
Enlazador
10
Generacin de Cdigo
Cabe sealar que el agrupamiento de las fases no afecta el proceso de compilacin ya que este,
como lo indica la denicin, termina al momento en que se tiene el cdigo mquina, sin embargo, es
necesario resaltar que solo hasta la fase de anlisis semntico el compilador trabaja directamente con
el programa fuente y posteriormente se trabaja con los resultados de la etapa de anlisis.
Interactuando directamente con el proceso de compilacin encontramos al administrador de la tabla
de smbolos y al manejador de errores, los cuales proporcionan una ayuda auxiliar al compilador para
llevar a cabo su tarea ( ver gura 1.1 ). A continuacin, se explica cada etapa del compilador.
Anlisis Lexicogrco
Recibe un patrn de bits como una cadena de caracteres, dicha cadena es dividida en entidades
llamadas lexemas, las cuales son mortferas que maniestan la unidad de signicado de una palabra
[Lara86}, esta entrada produce como salida un token equivalente al lexema, es decir, al entrar el lexema
el analizador lexicogrco produce un conjunto de smbolos equivalentes al lexema, este conjunto de
smbolos es llamado token. Se dice que la entrada es correcta si para cada lexema existe un token. Las
tareas bsicas que realiza el analizador lexicogrco son:
Descomponer el programa fuente en elementos bsicos llamados lexemas
11
Lexema
IF
x
=
3
THEN
Los espacios en blanco se encuentran en la estructura separando cada lexema son eliminados por el
analizador y cada lexema ser vericado, en cuanto a su correcta escritura. Por ejemplo, el analizador
tomar como correcto el primer lexema si se encuentra dentro de un token del lenguaje, de forma
contraria el lexema ser tomado como desconocido o incorrecto.
En general podemos decir que el analizador lexicogrco revive una palabra, verica la secuencia
correcta de caracteres, si la vericacin es positiva dar como resultado un token que ser la entrada
para el analizador.
Anlisis Sintctico
La sintaxis estudia la estructura de la oracin en un lenguaje especico el cual contiene reglas de
relaciones entre tokens, estas reglas que denen el orden de los tokens permitidos por el lenguaje es
llamado gramtica. Por lo tanto, el anlisis sintctico es el proceso que determina la sintaxis de acuerdo
a las reglas gramaticales del lenguaje.
El analizador sintctico es el encargado de reconocer la estructura del programa fuente, es decir,
determina si una oracin o sentencia respeta las reglas gramaticales preestablecidas en el lenguaje
1. El proceso de anlisis sintctico es llevado a cabo de la siguiente forma:
2. El analizador recibe la secuencia de tokens que enva el analizador lexicogrco.
3. Divide la secuencia de tojens en frases gramaticales, las cuales representan una instruccin del
programa fuente.
4. El analizador impone una estructura jerrquica a la frase gramatical por medio de un rbol
sintctico.
5. Verica que la frase cumpla con la gramatical que le rige.
Example 2 En un lenguaje x se tiene la siguiente regla:
IF variable simbolo_asignacion constante THEN
El analizador recibe el siguiente conjunto de tokens:
1. Palabra Reservada: IF
2. variable: x
3. simbolo_asignacion: =
4. constante: 3
5. Palabra Reservada: THEN
El analizador sintctico obtendr la frase
12
IF x=3 THEN
La cual se considera correcta, debido a que la utilizacin de la fase gramatical se encuentra tal
y como lo indica la regla, sin embargo, si se tuviera IF x THEN, el analizador sintctico marcaria
incorrecta esta frase ya que la secuencia de tokens no corresponde a la establecida como regla.
Anlisis Semntico
La funcin principal es la vericacin de tipos, es decir, si cada operador tiene los operandos
permitidos en el lenguaje fuente
Example 3 Se ha predenido que en un lenguaje x, existan dos tipos de datos: Entero y Real, sin
embargo, la divisin se dene como la siguiente regla
Real=Real/Real
Y se tiene el siguiente fragmento del programa
a: Real
b: Real
c :Real
a = 10
b= 2
c= a/b
Ntese que la divisin est respetando la regla original, por lo que el analizador semntico encontrara
correcto el fragmento del programa. Sin embargo, si el programa tuviera la siguiente forma:
a: Entero
b: Entero
c :Real
a = 10
b= 2
c= a/b
No importando que el valor en ambos casos es el mismo y que matemticamente sean enteros, el
tipo no corresponde al especicado en la regla, por lo que el analizador semntico encontrara la divisin
como incorrecta.
El analizador semntico, por consiguiente, est ntimamente relacionado con los tipos de datos
manejados en el lenguaje y el uso que se les d individualmente y en conjunto, es decir, en el Example
3 se maneja una divisin utilizando nicamente el tipo real, sin embargo, podra denirse tambin
como regla valida en una divisin a cualquiera de las siguientes formas:
a) Entero=Real/Entero
b) Entero=Entero/Real
c) Entero= Entero div Entero
En las reglas (a) y (b), el nmero real deber ser transformado a entero, debido a que la variable
donde se almacena el resultado de la divisin es entera. En la regla (c) se dene como operador la
cadena div en lugar del smbolo /, y ser denida como divisin entre entero. Cabe sealar que estas
reglas semnticas las dene el implementador del sistema.
Generacin de Cdigo Intermedio
Una vez que el programa fuente fue analizado lxica, sintctica y semnticamente se obtendr una
representacin intermedia del programa fuente, fcil de producir y de sencilla traduccin al programa
objeto.
Una forma de obtener el cdigo intermedio, es mediante la forma llamada cdigo de tres direcciones, esta consiste en una secuencia de instrucciones que tienen como mximo tres operandos.
La representacin intermedia tiene las siguientes propiedades:
13
14
15
Generador de Cdigo
Est relacionado con las frases construidas en el anlisis sintctico, debido a que es en este proceso
donde el compilador toma las equivalencias entre su lenguaje y el del programa, es decir, traduce el
programa fuente a programa objeto, cabe sealar que algunas veces la traduccin se realiza en la fase
de generacin de cdigo intermedio.
Example 6 [Aho90] Al momento en que la fase de generacin de cdigo comienza es por que el proceso
de compilacin esta en la etapa nal en la gura 1.2, se muestra como se lleva a cabo la compilacin
de una isntruccin para realizar una operacin matemtica.
Al momento de llevarse a cabo el anlisis lexicogrco, este reconocer cada lexema e indicar el
token correspondiente, as transformar
posicion := inicial = velocidad 60; en:
id1 := id2 + id3 60
Esta secuencia de tokens es la entrada para el anlisis sintctico, el cual checara que la expresin
cumpla con las caractersticas que indique el lenguaje para este tipo de operaciones posteriormente el
analizador semntico verica que se utilicen correctamente los tipos de datos. Una vez llevado acabo
estos anlisis se procede a la generacin de cdigo intermedio, el cual proporciona un cdigo que an
no maneja directamente las direcciones fsicas de memoria, el cdigo que genera contiene paso a paso
la realizacin de la instruccin segn la jerarqua de las operaciones de la instruccin original, una
vez obtenido el cdigo intermedio se realizara la optimizacin, es decir, se eliminaran y simplicaran
las instrucciones del cdigo intermedio y nalmente se codicaran utilizando instrucciones que no son
propias del lenguaje fuente, estas indican en qu posicin de memoria se almacenaran los datos y que
operacin se realizara en el presente ejemplo tenemos:
Instruccin
Movf id3 ,r2
Mulf #60.0,r2
Movf id2 ,r1
Addf r2 ,r1
Movf r1 ,id1
Accin
Asigna el valor de id3 al registro r2
Multiplica 60 por el valor de r2
Asigna el valor de id2 al registro r1
Suma el valor de r2 mas el valor r1 y el resultado en r1
Asigna el valor del registro r1 a la variable id1
Como puede observarse la jerarqua de operaciones se respeta y nalmente almacena el dato del
registro2 a la variable.
Ntese que en la generacin de cdigo se asigna un lugar en memoria para variables y se asigna
dicha variable en el registro, es decir, se realiza un direccionamiento fsico.
A la accin de leer el archivo fuente y producir un archivo de salida se le llama examen, esta se
lleva a cabo mediante la agrupacin de las etapas de compilacin, es decir, se realiza un examen en la
fase de anlisis y de esta forma se relacionan las etapas que la componen, posteriormente se realizaran
exmenes sobre la fase de sntesis, el nmero de exmenes depender bsicamente del lenguaje debido a
que en algunos casos se requiere que por ejemplo, el cdigo intermedio est terminado para desarrollar
el cdigo.
Administrador de la Tabla de Smbolos
La tabla de smbolos es una estructura que almacenan los identicadores y conforme se lleva a cabo
el proceso de compilacin se asignan atributos a los identicadores. La funcin del administrador de
la tabla de smbolos es:
1) Colocar los identicadores y sus atributos.
2) Permitir el acceso a la tabla y modicar, si es necesario, los valores de los identicadores.
Manejo de Errores
Durante las etapas de anlisis lexicogrco, anlisis sintctico y anlisis semntico puedan generarse
diversos errores propios de cada etapa, por lo que un compilador deber detectarlos y recuperarlos en
el programa fuente. Una vez que el error ha sido detectado, el compilador debe modicar la entrada
para la etapa de deteccin del error y continuar con el proceso, observando los errores subsecuentes.
16
Captulo 5
Introduccin
La base de todo lenguaje es el alfabeto, el cual es un conjunto nito de smbolos, (ver Example 7).
Un lenguaje en trminos de informtica es un conjunto de caracteres, smbolos y reglas utilizados para
escribir las instrucciones dadas a un ordenador [Garca88], los caracteres y smbolos deben pertenecer
al alfabeto del lenguaje,
P por lo tanto, tambin lo podemos denir como cualquier conjunto de cadenas
sobre un alfabeto ( ), [Papadimitriou81].
P
P
P
Example 7
1 = f0; 1g
2 = fa; b; c; ::::; zg
3 = f ; +; g
Los lenguajes aceptados por autmatas nitos son descritos fcilmente por expresiones regulares,
las cuales son notaciones importantes para especicar patrones, estos patrones representan series de
cadenas que el lenguaje y por lo tanto los autmatas nitos aceptan. Dentro de estos lenguajes existen
operadores bsicos, estos, segn su importancia son:
1 Kleene-Star
2 Concatenacin
3 Unin ([ j)
4 Cerradura Positiva
1 Kleene-Star de a se escribe a y denota cero a ms concatenaciones de a, tambien se puede representar como:
i
a = [1
i=0 L
esta en a y
2ay
2 b y se denota
esta en b}
2 a o a 2 b y se denota a j b ={ j esta
Expresiones Regulares
17
Una expresin regular est compuesta por expresiones regulares ms simples siguiendo un conjunto
de reglas denitorias, cada expresin regular x dene un lenguaje regular L(x). Las reglas de denitorias especican como se genera L(x)combinando varias formas de los lenguajes representador por las
sobrexpresiones x.
P
Una expresin regular sobre el alfabeto , son los caracteres sobre el alfabeto:
P
[f(; ); ; [; 1; ; +g
Por lo tanto las reglas que rigen las expresiones regilares son las siguientes:
P
Es una expresin regular y cada miembro de
es una expresin regular.
c Es una expresin regular que denota el lenguaje consistente de slo la cadena vacia (c).
Si
Si
Si
Toda expresin regular describe en forma concisa ciertos lenguajes innitos, sin embargo no puede
describir los lenguajes, por lo que un lenguaje es regular si y solo si se puede ser descrito por una
expresin regular.
El termino lenguaje es una expresin regular se reere a cualquier conjunto de cadenas de un alfabeto jo, a los lenguajes les puede aplicar operaciones de unin, concatenacin, Kleene-Star cerradura
positiva. Dichas operaciones funcionan de igual forma que en las expresiones regulares. Un lenguaje
denotado por el conjunto a (siendo a el conjunto de reglas o expresiones regulares que lo denen) se
representa como L(a):
L(a) es una funcin, por lo que a cada valor que pueda tomar a, le corresponde un valor denido
en la gramtica, la tarea de dicha funcin es la vericacin de una entrada que deber cumplir con las
reglas de la gramtica, es decir, si se tiene.
L(a) = [wjw contiene pares de bsg
La funcin L(a) deber vericar que toda cadena w que se reciba cumpla con contener pares de
bs, si esto es as el resultado ser positivo, de lo contrario el resultado es negativo.
Los lenguajes tienen las siguientes propiedades:
P
I L( ) = yL(a) = (a) para cada a 2
5.2.
5.2.1.
Autmatas Finitos
Autmatas
Los autmatas o maquinas reconocedoras son dispositivos formales que permiten la denicin de
un lenguaje por medio de la va de aceptacin o rechazo de cadenas que lo componen, deciden si una
cadena determinada pertenece o no a un lenguaje predenido.
Tipos de Autmatas
Existen varios tipos de autmatas en relacin con el tipo de lenguaje que aceptan.
1- Autmatas nitos: Reconocen lenguajes regulares.
2- Autmatas tipo pila: reconocen lenguajes de contexto libre.
3- Autmatas bidireccionales: Reconocen lenguajes dependientes del contexto.
4- Mquinas de Turing: Reconocen lenguajes del tipo 0 de la jerarqua de Chomsky, llamados tambin
lenguajes con estructura de frase.
En el presente estudio nos enfocaremos nicamente a los autmatas nitos y a los autmatas tipo
pila, que sern descritos a continuacin.
5.2.2.
Autmatas Finitos
Un autmata nito no tiene memoria para almacenar los datos que recibe, la forma en que funciona
es muy simple, recibe carcter por carcter y la salida que produce indica si la entrada es aceptada o
no.
Los autmatas nitos son reconocedores de lenguajes regulares, es decir, un programa que tenga
de entrada una cadena (w), deber vericar si pertenece o no al lenguaje, una forma de realizar tal
tarea es mediante la construccin de un diagrama de transiciones, el cual es una representacin grca
del autmata nito y cuya principal caracterstica es que para indicar si la cadena es una expresin
aceptada por el autmata nito se requiere realizar una transicin de un estado a otro hasta llegar
al estado de aceptacin, en otras palabras la entrada pasa por varios estados, comenzando del estado
cero hasta el estado de aceptacin, para producir salida.
Una expresin regular se compila en un reconocedor construyendo un diagrama de transiciones
generalizado al que se le llama autmata nito.
19
Example 9 Supongamos qie se toeme ;a [a;abra "bloque ", el autmata que reconoce dicha cadena de
caracteres es la que se muestra en la gura 2.3
ak
= (q; r)
donde:
q es el estado actual.
r es el caracter a leer.
es el estado al que se realiza la transicin.
Expresado en otros terminos:
0
(q; w) `M (q ; w0 )
donde:
` indica una relacion de transicin (pasa de un estado a otro).
P
Por o tanto un autmata nito es un quntuplo de la forma A = fK; ; ; S0 ; F g:
Por ejemplo. De acuerdo a la gura 2.3, tenemos con la letra b una transicin del estado 1 al 2,
para la entrada 1 una transicin al estado 3 y as hasta llegar al estado 7 que indica el nal. Dicho de
otra forma, estando en el estado 1 y con la entrada b, se cambia al estado 2.
Autmatas Finitos Determinsticos (AFD)
El autmata nito ms sencillo es el autmata nito determinstico, el cual contiene para cada
estado y carcter de entrada un solo estado de transicin al que puede pasar, en estos autmatas no
se permiten transiciones para la entrada vaca :
Example 10 Se tiene la expresin regular (a b(baja))
L(A1 ) = fwjw
P 2 fa; bg y w no contiene 3 bs consecutivas}.
A1 = fK; ; ; S0 ; F g
Donde:
K = (q0 ; q1 ; q2 g
P
= (a; b)
S0 = (q0 )
F =K
= (q; r) 2 K
Tabla 2.1 Tabla de Transiciones del Automata A1
Tabla (A)
q
r
q0 a q0
q0 b q1
q1 a q0
q1 b q2
q2 a q0
21
Captulo 6
Section
Use the Section tag for major sections, and the Subsection tag for subsections.
6.1.1.
Subsection
6.2.
Tags
LARGE
This is a Body Math paragraph. Each time you press the Enter key, Scientic WorkPlace switches
to mathematics mode. This is convenient for carrying out scratchpad computations.
Following is a group of paragraphs marked as Short Quote. This environment is appropriate for a
short quotation or a sequence of short quotations.
The buck stops here. Harry Truman
Ask not what your country can do for you; ask what you can do for your country. John F
Kennedy
I am not a crook. Richard Nixon
Its no exaggeration to say the undecideds could go one way or another. George Bush
I did not have sexual relations with that woman, Miss Lewinsky. Bill Clinton
The Long Quotation tag is used for quotations of more than one paragraph. Following is the
beginning of Alices Adventures in Wonderland by Lewis Carroll:
22
Alice was beginning to get very tired of sitting by her sister on the bank, and of having
nothing to do: once or twice she had peeped into the book her sister was reading, but it had
no pictures or conversations in it, and what is the use of a book,thought Alice without
pictures or conversation?
So she was considering in her own mind (as well as she could, for the hot day made her
feel very sleepy and stupid), whether the pleasure of making a daisy-chain would be worth
the trouble of getting up and picking the daisies, when suddenly a White Rabbit with pink
eyes ran close by her.
There was nothing so very remarkable in that; nor did Alice think it so very much out
of the way to hear the Rabbit say to itself, Oh dear! Oh dear! I shall be late!(when she
thought it over afterwards, it occurred to her that she ought to have wondered at this,
but at the time it all seemed quite natural); but when the Rabbit actually took a watch
out of its waistcoat-pocket, and looked at it, and then hurried on, Alice started to her
feet, for it ashed across her mind that she had never before seen a rabbit with either a
waistcoat-pocket, or a watch to take out of it, and burning with curiosity, she ran across
the eld after it, and fortunately was just in time to see it pop down a large rabbit-hole
under the hedge.
In another moment down went Alice after it, never once considering how in the world
she was to get out again.
Use the Verbatim tag when you want LATEX to preserve spacing, perhaps when including a fragment
from a program such as:
#include <iostream>
void main(void)
{
cout << "Hello World.";
}
6.3.
p 2
u + u5 + u juj
= 0 in R3
[0; 1[
(6.1)
6.4.
Lists Environments
You can create numbered, bulleted, and description lists using the Item Tag popup list on the Tag
toolbar.
1. List item 1
2. List item 2
a) A list item under a list item.
The typeset style for this level is dierent than the screen style. The screen shows a lower
case alphabetic character followed by a period while the typeset style uses a lower case
alphabetic character surrounded by parentheses.
b) Just another list item under a list item.
1) Third level list item under a list item.
a 0 Fourth and nal level of list items allowed.
Bullet item 1
23
Bullet item 2
Second level bullet item.
Third level bullet item.
Fourth (and nal) level bullet item.
Description List Each description list item has a term followed by the description of that term.
Double click the term box to enter the term, or to change it.
Bunyip Mythical beast of Australian Aboriginal legends.
6.5.
Theorem-Like Environments
The following theorem-like environments (in alphabetical order) are available in this style.
Acknowledgement 11 This is an acknowledgement
Algorithm 12 This is an algorithm
Axiom 13 This is an axiom
Case 14 This is a case
Claim 15 This is a claim
Conclusion 16 This is a conclusion
Condition 17 This is a condition
Conjecture 18 This is a conjecture
Corollary 19 This is a corollary
Criterion 20 This is a criterion
Denition 21 This is a denition
Example 22 This is an example
Exercise 23 This is an exercise
Lemma 24 This is a lemma
Proof. This is the proof of the lemma.
Notation 25 This is notation
Problem 26 This is a problem
Proposition 27 This is a proposition
Remark 28 This is a remark
Solution 29 This is a solution
Summary 30 This is a summary
Theorem 31 This is a theorem
Proof of the Main Theorem. This is the proof.
24
Apndice A
25