Sunteți pe pagina 1din 26

The Title

The Author
The Date

ndice general
I

The First Part

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

6. Features of this Shell


6.1. Section . . . . . . . . . . . .
6.1.1. Subsection . . . . .
6.2. Tags . . . . . . . . . . . . .
6.3. Mathematics and Text . . .
6.4. Lists Environments . . . . .
6.5. Theorem-Like Environments

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

22
22
22
22
23
23
24

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

A. The First Appendix

.
.
.
.
.
.

25

ndice de guras

ndice de cuadros

Parte I

The First Part

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

La comunicacin entre el ser humano y las computadoras es posible gracias a un conjunto de


instrucciones equivalentes al lenguaje del primero, esto es, el ser humano preestablece comandos o
instrucciones que le indican a la computadora que hacer, a su vez esta traduce dichas instrucciones
pertenecientes a un lenguaje propio proporcionando los resultados necesarios para su funcionamiento.
Esta semblanza tan sencilla de lo que es la comunicacin entre las personas y la computadora en la
vida real se presentan en una forma ms compleja, por lo cual es importante tener ms conocimiento
sobre lo que se este proceso. En segunda se describen algunos conceptos importantes para el mejor
entendimiento del tema.
Lenguajes de Computadora
El conjunto de instrucciones preestablecido es denominado como lenguaje de computador y se
divide en [Lewis78]
Microprogramacin: controla en forma directa los dispositivos fsicos y ofrece una mejor interfaz
con el lenguaje maquina.
Instrucciones: para computadoras especicas conocidas como lenguaje maquina.
Tarjetas de control y comandos de lenguaje conocido como sistema operativo.
Lenguaje de alto nivel: estos no dependen del sistema operativo ni de una maquina en particular,
permiten que el ser humano realice programas que la computadora pueda traducir para ejecutarlos
posteriormente.
Lenguajes procesadores: hacen posible que la computadora comprenda los comandos provistos
por el ser humano.
Microprogramacin
Es una alternativa para el diseo de la unidad de control de una computadora digital. La funcin
control que especica una microoperacin es una variable binaria, cuando se encuentra en un estado
binario se ejecuta la microoperacin correspondiente.
Una unidad de control cuyas variables de control binario se almacenan en la memoria se llama
unidad de control microprogramada, cada palabra en la memoria de control contiene un microinstruccin, la cual especica una o ms microoperaciones para el sistema [Morris94]. A su vez una secuencia
de microinstrucciones construye un microprograma.
Lenguaje Maquina
Es aquel cuyas instrucciones son entendibles por la computadora sin necesidad de traducirlos. Las
instrucciones en lenguaje maquina se expresan en trminos de la unidad de memoria ms pequea, bit,
por ejemplo, una serie de instrucciones en lenguaje maquina se representan como 0100000111010011.

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

Vericar el lexema e identicarlo con el token correspondiente


Introducir en la tabla de smbolos los identicadores que an no estn dados de alta en esta
Example 1 El analizador lexicogrco recibe la cadena
IF x=3 THEN
El analizador divide la cadena en 5 tokens
Token
if
id
relacin
const.
Then

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

1) Cada instruccin tiene como mximo un operador, independiente de la asignacin.


2) El compilador debe generar un nombre temporal para guardar los valores calculados por cada
instruccin.
3) Algunas instrucciones tienen menos de tres operandos.
Example 4 Se tiene la siguiente frase proporcionada por el analizador sintctico.
a = b + c 30
El cdigo intermedio produciria:
(1)
var1 = 30
var2 = c var1
var3 = b + var2
a = var3
Donde var1, var2 y var3 son los nombres temporales que almacenan los clculos de la frase.
Muchos compiladores no generan directamente el cdigo intermedio, sin embargo, indirectamente
este es realizado cuando se ejecuta el anlisis sintctico.
Optimizacin de Cdigo
Un algoritmo optimizador realiza clculos sin alterar en nada el resultado nal checando el rbol
sintctico y eliminando lo que se puede sustituir por otra forma ms corta, es decir, si se reconoce una
frase como correcta, la frase de optimizacin de cdigo deber tratar de sustituirla con un procedimiento
ms ecaz, de esta forma los algoritmos de optimizacin permiten que el compilador trabaje con mayor
eciencia y rapidez [Aho90].
Example 5 Tomando el resultado del generador de cdigo intermedio (algoritmo 1), el optimizador
de cdigo sustituira la operacin por:
(2)
var1 = c 30
var2 = var1 = b
x = var2
Enlazador
Permite formar un solo programa a partir de varios archivos de cdigo maquina re-localizable. Estos
archivos pueden haber sido resultado de varias compilaciones distintas, y algunos de estos pueden ser
libreras del sistema que pueden utilizarse en programas fuente [Aho90]. Es necesario resaltar que
el enlazador o encadenador no se encuentra (al menos en la bibliografa consultada) como parte del
proceso de compilacin, sin embargo, atendiendo a la denicin de compilacin, se considera en el
presente texto como parte de la compilacin.

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

r1 ,r2 , registros en memoria


r2
id3
r2 =60*r2
r1
id2
r1 =r2 +r1
id1
r1

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

Lenguajes Regulares y Autmatas


Finitos
5.1.

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

2 Concatenacin de a y b se escribo ab e indica que si se tiene


ab ={

esta en a y

3 Or de a y b se escribe a j b e indica que si se tiene ;


en a o esta en b}

2ay

2 b y se denota

esta en b}
2 a o a 2 b y se denota a j b ={ j esta

4 Cerradura Positiva de a se escribe a+ y denota una o ms concatenaciones de a, tambien puede


representarse como
i
a+ = [1
i=1 L

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

son expresiones regulares, lo es tambin

Si

son expresiones regulares, lo es tambin j :

Si

es expresin regular, lo es tambin

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

II Si r es una expresin regular, entonces L(r) = (r)

III Si r y s son expresiones regulares, entonces L(rs) = L(r)L(s)


IV Si r y s son expresiones regulares, entonces L(rjs) = L(r)jL(s)
V Si r es una expresin regular, entonces L(r ) = L(r)
Las expresiones regulares cuentan con los smbolos Kleene-Star y cerradura positiva para indicar
que un smbolo o smbolos se repetirn, sin embargo, estas repeticiones son indeterminadas, la nica
restriccin que se podr indicar dentro de las expresiones regulares es si se quiere que al menos se
repita una vez (utilizando cerradura positiva) o dejar abierta la opcin utilizando Kleene-Star, es decir,
indicar que pueden
P o no existir repeticiones.
Alfabeto(
) Expresin Regular Lenguaje que
P
P dene
+
L = fw 2 P jw no tiene un asubcadena ac }
P = fa; b; cg ((c jb ) (a b) )
j w contiene al menos una b}
= fa; bg
a b(a jb )
L = fw 2
Figura 2.1 Expresiones Regulares
En la gura 2.1, se muestran ejemplos de repeticiones indeterminadas y con la utilizacion de los
simbolos * y + se indica si la cadena resultante (w) tendra la opcin de ser igual a c o debera cumplir
con la regla deP
w = c:
Alfabeto(
) Expresin Regular Lenguaje que
P
P dene
= fa; bg
an bb
L = fw 2
jan bn 2 w; donde n > 0}
18

Figura 2.2 Expresiones no Regulares


Un caso diferente se muestra en la gura 2.2, en la cual se cuenta con el smbolo n, donde n 2
Enteros positivos, el cual indica que el nmero de repeticiones, tanto de a como d b deben ser igual,
no importando el valor que tome a, es decir si n = 2, entonces:
an bn = a2 b2 = aabb
Caracteristicas que no tendria la expresin si fuera de la forma
a b = aabb; a; b; abbb; aaaab; c; etc:
a+ b+ = aabb; ab; abbb; aaaab; etc:
La nica forma de que una expresin regular fuera un poco semejante a an bn , seria (ab)n
Example 8 n = 1 : an bn = a1 b1 = ab
(ab)+ = ab, considerando que aleatoriamente solo existiera una repeticin de ab, ya que de no ser
asi se obtendran cadenas como ababab, que si bien es cierto cuenta con el mismo nmero de as y
bs es diferente a la cadena resultante de an bn , con n = 3, la cadena es aaabbb, por lo tanto aaabbb
6=ababab.

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

Ahora, si en vez de la palabra bloque, se introdujera la cadena bloqe, veramos que en la


transicin del estado 5 del autmata, se debera de reconocer una u pero lo que detecta es una e
por lo tanto, como el autmata no tiene indicado dicho carcter, la cadena no es aceptada.
Una razn importante para el estudio de autmatas nitos nos la da el ejemplo anterior ya que,
como se explica posteriormente, de esta forma se lleva a cabo el anlisis lexicogrco en un compilador.
Un autmata nito puede ser determinstico o no determinstico, la diferencia es que el primero
no cambia de estado cuando existe una cadena vaca y permite solo una transicin de estado por
cada carcter que pertenece el lenguaje. En cambio, el segundo acepta una cadena vaca, tambin una
transicin puede existir con la lectura de varios caracteres, adems se puede pasar de un estado a otro
en forma aleatoria ya que para el mismo carcter ledo pude existir ms de una posible transicin, en
la cual se elige el siguiente estado en forma aleatoria, esto se ilustran en la gura 2.4

En trminos generales un autmata nito se basa en los siguientes elementos:


Un conjunto de estados K nitos.
P
Alfabeto

Una funcin de transicin de estados , que establece la correspondencia k x


20

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

w = rq0, r0 es el carcter a leer y w0 es la cadena que resta por leer.


q0 = es el estado al cual se realiza la transicin.
Estado inicial S0 2 K:
Conjunto de estados nales F v K:

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

Features of this Shell


6.1.

Section

Use the Section tag for major sections, and the Subsection tag for subsections.

6.1.1.

Subsection

This is just some harmless text under a subsection.


Subsubsection
This is just some harmless text under a subsubsection.
Subsubsubsection This is just some harmless text under a subsubsubsection.
Subsubsubsubsection This is just some harmless text under a subsubsubsubsection.

6.2.

Tags

You can apply the logical markup tag Emphasized.


You can apply the visual markup tags Bold, Italics, Roman, Sans Serif, Slanted, Small Caps, and
Typewriter.
You can apply the special, mathematics only, tags BLACKBOARD BOLD, CALLIGRAPHIC,
and fraktur. Note that blackboard bold and calligraphic are correct only when applied to uppercase
letters A through Z.
You can apply the size tags t i n y , scriptsize , footnotesize, small, normalsize, large, Large,
,

LARGE

huge and Huge.

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.

// < > is used for standard libraries.


// "main" method always called first.
// Send to output stream.

Mathematics and Text

Let H be a Hilbert space, C be a closed bounded convex subset


self map
P1 of H, T a nonexpansive
+
of C. Suppose that as
n
!
1,
a
!
0
for
each
k,
and
=
(a
a
)
!
0.
Then
for
n;k
n;k+1
n;k
n
k=0
P1
each x in C, An x = k=0 an;k T k x converges weakly to a xed point of T .
The numbered equation
utt

p 2

u + u5 + u juj

= 0 in R3

[0; 1[

(6.1)

is automatically numbered as equation 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

The First Appendix


The appendix fragment is used only once. Subsequent appendices can be created using the Chapter
Section/Body Tag.

25

S-ar putea să vă placă și