Anda di halaman 1dari 39

Introduccin a la teora de Lenguajes Formales

Investigacin
Maestra:
M. D. O. H. Sonia Alvarado Mares
Equipo #8:
Integrante Numero de control
Brenda Liliana Polanco Lpez 11400556
Jos Alberto Rodrguez Ruelas 10400420
Juan Manuel Garca Andrade 10400370

Fecha de Entrega: 30 de Junio del 2014


INTRODUCCION ................................................................................................................................... 3
1.1 Alfabeto ................................................................................................................................... 3
1.2 Cadenas ................................................................................................................................... 4
1.3 Lenguajes ................................................................................................................................. 6
1.4 Tipos de Lenguajes .................................................................................................................. 7
1.5 Herramientas Computacionales Ligadas con Lenguajes ......................................................... 9
1.6 Estructura de un traductor .................................................................................................... 11
1.7 Fases de un compilador......................................................................................................... 15
CONCLUSIONES ................................................................................................................................. 31
ANEXOS (Evidencias) ......................................................................................................................... 32
Mapa mental de Traductores (Equipo) ......................................................................................... 32
Operaciones con Lenguajes (individual) ....................................................................................... 33
Ejercicio de las fases de un compilador ........................................................................................ 35
REFERENCIAS ..................................................................................................................................... 39








INTRODUCCION

En el siguiente documento se describen de forma detallada los temas
correspondientes a la unidad uno de la materia Lenguajes y Autmatas I.
Tocaremos temas como lo que es un alfabeto, un lenguaje una cadena, los tipos
de lenguajes, y algunas herramientas ligadas a los lenguajes formales. Todos los
temas han sido previamente analizados y en algunos casos tambin citados de
libros. Adems se anexan ejercicios y ejemplos que permiten una mejor
comprensin de cada tema.

1.1 Alfabeto

El alfabeto ha sido definido por los autores Hopcroft, Motwani y Ullman (2008)
como un conjunto de smbolos finito y no vaco (p 26).
Convencionalmente, utilizamos el smbolo para designar un alfabeto. Entre los
alfabetos ms comunes se incluyen los siguientes:
1. = {0, 1}, el alfabeto binario.
2. = {a, b, . . , z}, el conjunto de todas las letras minsculas.
3. El conjunto de todos los caracteres ASCII o el conjunto de todos los caracteres
ASCII imprimibles.
Un alfabeto, segn Kelley (1995) es un conjunto no vaco y finito de smbolos (p.
41)
Ejemplos:
Los siguientes son alfabetos
1) {a, b, c, .., z}
2) {a, b, c}
3) {1, 2, 3, 4}
4) {a, b, 5, 6, *}
5) {carro, perro, awb}
Los siguientes conjuntos no son alfabetos.
1) El conjunto vaco no es un alfabeto. Un alfabeto debe ser un conjunto vaco.
2) El conjunto de los nmeros naturales no es un alfabeto. Un alfabeto debe
ser finito.

El alfabeto es un conjunto finito de smbolos, no vaco que, segn Cueva (2001)
para definir que un smbolo a pertenece a un alfabeto V se utiliza la notacin a V.
Los alfabetos se definen por enumeraciones de los smbolos que contiene, as por
ejemplo se presentan a continuacin varios alfabetos. (p. 3)
Ejemplos:



1.2 Cadenas

Una cadena de caracteres (que tambin se denomina en ocasiones palabra) es
una secuencia finita de smbolos seleccionados de algn alfabeto. (Hopcroft,
Motwani y Ullman, 2008, p.27)
Por ejemplo, 01101 es una cadena del alfabeto binario = {0,1}. La cadena 111
es otra cadena de dicho alfabeto.
La cadena vaca es aquella cadena que presenta cero apariciones de smbolos.
Esta cadena, designada por , es una cadena que puede construirse en cualquier
alfabeto.
Una palabra o cadena sobre un alfabeto ha sido definido por el autor Kelley (1995)
como una secuencia finita de smbolos de dicho alfabeto (p. 41)
En esta definicin se puede observar que, en la Teora de Lenguajes Formales,
las palabras no necesitan tener sentido o significado.
Ejemplos.
1) bbca es una palabra sobre el alfabeto {a, b, c}
2) casacasawbperro es una palabra sobre el alfabeto {casa, perro, awb}
3) Una secuencia de cero smbolos es una palabra sobre el alfabeto {a, b, c}.
Esta palabra se conoce como la palabra vaca y se representa por
(psilon), en algunos textos, por (Lambda).
4) perro es una palabra sobre el alfabeto {a, b, c, .., z}
5) while, una de las palabras claves de lenguajes Java, es una palabra sobre
el alfabeto conformado por los 256 caracteres ASCII.
6) X=325+y; una instruccin de asignacin en lenguaje Java, es una palabra
sobre el alfabeto conformado por los 256 caracteres ASCII.
Una cadena es una secuencia finita de smbolos de un determinado alfabeto.
(Cueva, 2001, p.4) .
Ejemplos:


Utilizando los vocabularios anteriores
ABC es una cadena del alfabeto


a+2*b es una cadena del alfabeto


9111187 es una cadena del alfabeto


if a <b then b=a; es un cadena del alfabeto



1.3 Lenguajes

Un conjunto de cadenas, segn Hopcroft, Motwani y Ullman (2008) son todas ellas
seleccionadas de un , donde es un determinado alfabeto se denomina
lenguaje. Si es un alfabeto y L , entonces L es un lenguaje de . Tambin es
un lenguaje de no necesita incluir cadenas con todos los smbolos de , ya que
una vez que hemos establecido que L es un lenguaje de , tambin sabemos que
es un lenguaje de cualquier alfabeto que sea un superconjunto de . (p. 27)
Algunos ejemplos son los siguientes:
1. El lenguaje de todas las cadenas que constan de n ceros seguidos de n unos
para cualquier n 0:
{ , 01, 0011, 000111, . . .}.
2. El conjunto de cadenas formadas por el mismo nmero de ceros que de unos:
{ , 01, 10, 0011, 0101, 1001, . . .}
3. El conjunto de nmeros binarios cuyo valor es un nmero primo:
{10, 11, 101, 111, 1011, . . .}
4. es un lenguaje para cualquier alfabeto .
Un lenguaje sobre un alfabeto es un conjunto de palabras sobre ese alfabeto.
(Kelley, 1995, p. 41)
Ejemplos.
1) {aba, bca, cca} es un lenguaje sobre {a, b, c}
2) El conjunto infinito {a, aa, aaa, ..} es un lenguaje sobre {a}.
3) , el conjunto vaco es un lenguaje.
Se denomina lenguaje sobre un alfabeto V, segn Cueva (2001) se define de la
siguiente manera: Subconjunto del universo del discurso, tambin menciona que
se puede definir como un conjunto de palabras de un determinado alfabeto. (p. 5)
Ejemplo:
Conjunto de palndromos sobre el alfabeto {0,1}. Evidentemente este lenguaje
tiene cadenas infinitas.
Algunas cadenas de este lenguaje son:
L = { ,0,1,00,11,010,101,1001,0110,0000,1111, }

1.4 Tipos de Lenguajes

Existen diferentes tipos de gramticas formales, o lenguajes. En 1957 Noam
Chomsky publica las estructuras sintcticas en la cual realizo un estudio de las
gramticas y genero una jerarqua de estas, a la cual se le conoce como Jerarqua
de Chomsky.
Chomsky clasific las gramticas formales (y los lenguajes que stas generan) de
acuerdo a una jerarqua de cuatro niveles representada en la siguiente tabla.
Sorprendentemente, es posible establecer una relacin biunvoca entre los
diferentes niveles de la jerarqua de Chomsky y cuatro niveles de una jerarqua
definida entre los diferentes tipos de autmatas. A cada nivel de gramtica se le
puede asociar de forma natural un conjunto de lenguajes que sern los que esas
gramticas generan, pero adems, le puede asociar una clase de autmatas
formada por aquellos que podrn reconocer a dichos lenguaje. Jurado (2008) p.8.

La siguiente figura describe la relacin que hay entre los diferentes niveles de
gramticas de la jerarqua de Chomsky, los lenguajes que generan y las mquinas
que reconocen estos lenguajes.


El modelo o jerarqua de Chomsky define cuatro familias de gramticas y
lenguajes estas son: 0, 1, 2, 3 gramticas sin restricciones, de contexto, de
contexto libre y regular.

Gramticas de tipo 0: (sin restricciones), que incluye a todas las gramticas
formales. Estas gramticas generan todos los lenguajes capaces de ser
reconocidos por una mquina de Turing. Los lenguajes son conocidos como
lenguajes recursivamente enumerables. Ntese que esta categora es diferente de
la de los lenguajes recursivos, cuya decisin puede ser realizada por una mquina
de Turing que se detenga. Quiroga (2008).


Donde:
) ) ) ) ) )

Gramticas de tipo 1: (gramticas sensibles al contexto) generan los lenguajes
sensibles al contexto. Estas gramticas tienen reglas de la forma con A
un no terminal y , y cadenas de terminales y no terminales. Las cadenas y
pueden ser vacas, pero no puede serlo. La regla est permitida si S no
aparece en la parte derecha de ninguna regla. Los lenguajes descritos por estas
gramticas son exactamente todos aquellos lenguajes reconocidos por una
mquina de Turing no determinista cuya cinta de memoria est acotada por un
cierto nmero entero de veces sobre la longitud de entrada. Quiroga (2008) p.22.

Gramticas de tipo 2 (gramticas libres del contexto) generan los lenguajes
independientes del contexto. Las reglas son de la forma con A no terminal y
una cadena de terminales y no terminales. Estos lenguajes son aquellos que
pueden ser reconocidos por un autmata con pila. Quiroga (2008) p.23.

Gramticas de tipo 3 (gramticas regulares) generan los lenguajes regulares.
Estas gramticas se restringen a aquellas reglas que tienen en la parte izquierda
un no terminal, y en la parte derecha un solo terminal, posiblemente seguido de un
no terminal. La regla tambin est permitida si S no aparece en la parte
derecha de ninguna regla. Estos lenguajes son aquellos que pueden ser
aceptados por un autmata finito. Tambin esta familia de lenguajes puede ser
obtenidas por medio de expresiones regulares. Quiroga (2008) p.23.

1.5 Herramientas Computacionales Ligadas con Lenguajes

Son herramientas de software que manipulan los programas fuente. Estas
herramientas realizan primero algn tipo de anlisis. Algunos ejemplos de
herramientas son los siguientes:
Editores de estructuras
Un editor de estructuras toma como entrada una secuencia de rdenes para
construir un programa fuente. El editor de estructuras no solo realiza las funciones
de creacin y modificacin d textos de un editor de textos ordinario, sino que
tambin analiza el texto del programa, imponiendo al programa fuente una
estructura jerrquica apropiada. De esa manera, el editor de estructuras puede
realizar tareas adicionales tiles para la preparacin de programas. Por ejemplo,
puede proporcionar palabras clave de manera automtica (por ejemplo, cuando el
usuario escribe while, el editor proporciona el correspondiente do y le recuerda al
usuario que entre las dos palabras de ir un condicional) y puede saltar desde
begin o un parntesis izquierdo hasta si correspondiente end o parntesis
derecho. Adems, la salida de tal editor suele ser similar a la salida de la fase de
anlisis de un compilador. Aho, Sethi y Ullman (1998) p.3
Impresoras estticas
Una impresora esttica analiza un programa y lo imprime de forma que la
estructura del programa resulte claramente visible. Por ejemplo, los comentarios
pueden aparecer con un tipo de letra especial, y las proposiciones pueden
aparecer con una identacin proporcional a la profundidad de su anidamiento en la
organizacin jerrquica de las proposiciones. Aho et al. (1998)
Verificadores estticos
Un verificado esttico lee un programa, lo analiza e intenta descubrir errores
potenciales sin ejecutar el programa. La parte del anlisis es a menudo similar a la
que se encuentra en los compiladores de optimizacin. As un verificador esttico
puede detectar si hay partes de un programa que nunca se podrn ejecutar o si
cierta variable se usa antes de ser definida. Adems puede detectar errores de
lgica, como intentar utilizar una variable real como un apuntador, empleando
tcnicas de verificacin de tipos.
Interprete
En lugar de producir un programa objeto como producto de una traduccin, un
intrprete realiza las operaciones que implica el programa fuente. Muchas veces
los intrpretes se usan para ejecutar lenguajes de rdenes, pues cada operador
que se ejecuta en un lenguaje de rdenes suele ser una invocacin de una rutina
compleja, como un editor o un compilador. Del mismo modo, algunos lenguajes de
alto nivel normalmente son interpretados, porque hay muchas cosas sobre los
datos como el tamao y forma de las matrices que no se pueden deducir en el
momento de la compilacin.
Con esta solucin se ejecutan directamente las acciones que implican las
sentencias del lenguaje. Generalmente existe un subprograma para cada posible
accin y que ejecuta dicha accin. Para ser ms exactos un intrprete ejecuta
repetidamente la siguiente secuencia:
1.- Obtener la sentencia siguiente a ejecutar.
2.- Determinar las acciones que han de ser ejecutadas.
3.- Ejecutar las acciones. Snchez (1989)

1.6 Estructura de un traductor

Un traductor divide su labor en dos etapas: una que analiza la entrada y genera
estructuras intermedias y otra que sintetiza la salida a partir de dichas estructuras.
El siguiente diagrama explica esta fase (Glvarez r., Miguel .,2005).

Bsicamente las etapas del anlisis son:
Anlisis lexicogrfico.- divide la entrada en componentes bsicos del
lenguaje, estos son caracteres del programa fuente y pertenece a una
categora gramatical: que son nmeros, identificadores de usuario
(Variables, constantes, tipos, nombres de procedimientos, etc), palabras
reservadas, signos de puntuacin, etc.
En nuestro ejemplo los caracteres de la proposicin de asignacin:
Descuento = fijo + valor * 8;
1.- El identificador Descuento.
2.- El smbolo de asignacin.
3.- El identificador fijo.
4.- El signo de suma.
5.- El identificador valor.
6.- El signo de multiplicacin.
7.- El nmero 8.
8.- El smbolo terminal ;.
Fuente Anlisis Sntesis Destino
Errores en
el cdigo
fuente
Errores en
la
generaci
n de
cdigo

Se agruparan en los componentes lxicos siguientes:
Anlisis sintctico.- esta fase comprueba que la estructura de los
componentes bsicos sea correcta segn las reglas gramaticales del
lenguaje que se va a compilar.

Anlisis semntico.- Comprueba que el programa fuente respeta las
directrices del lenguaje que se compila: cheque de tipos, rangos de
valores, existencia de variables, etc.
En estas fases como dice el diagrama puede generar errores en el cdigo fuente,
estos derivados de la redaccin o falos del programador.
En la etapa de sintetiza que es el que construye el programa objeto deseado, se
compone de tres fases.
Generacin de cdigo intermedio.- Genera un cdigo independiente de la
maquina muy parecido al ensamblador. No se genera cdigo maquina sino
un pseudocdigo que posteriormente puede ser analizado fcilmente.
T1= fijo
t2 = valor * 8.0
descuento = t1+ t2
Generacin de cdigo maquina.- crea un bloque de cdigo maquina
ejecutable as como los bloques necesarios destinados a contener los
datos.
MOVE [1Ah], R1
MULT #8.0, R1
MOVE [15h], R2
ADD R1, R2
MOVE R2, [10h]
Utilizando los registros R1 y R2 se podra implementar as: el primero y segundo
operan dos de cada instruccin especifican una fuente y destino, respectivamente.
Este cdigo traslada el contenido de la direccin [1Ah] al registro R1, despus lo
multiplica por la constante real 8.0. La tercera instruccin pasa el contenido de la
direccin [15h] al registro R2. La cuarta instruccin le su el valor previamente
calculado en el registro R1. Por ltimo el valor del registro R2 se pasa a la
direccin [10h].

Fase se optimizacin.- puede realizarse en la fase de cdigo intermedio,
sobre el cdigo maquina o sobre ambos.
t2 = valor * 8.0
descuento = fijo + t2
CONSTRUCCION POR FASES DEL COMPILADOR

Las fases anteriores se agrupan en una etapa inicial (frontend) y una etapa final
(back- end). La etapa inicial comprende aquellas fases, o partes de fases, que
dependen exclusivamente del lenguaje fuente y que son independientes de la
mquina para la cual se va a generar el cdigo. En la etapa inicial se integran los
anlisis lxicos y sintcticos, el anlisis semntico y la generacin de cdigo
intermedio. La etapa inicial tambin puede hacer cierta optimizacin de cdigo e
incluye adems, el manejo de errores correspondiente a cada una de esas fases.
La etapa final incluye aquellas fases del compilador que dependen de la mquina
destino y que, en general, no dependen del lenguaje fuente sino slo del lenguaje
intermedio.

Como se muestra en la imagen se crea independiente mente cada lenguaje de
programacin, solamente difiriendo en el cdigo intermedio, esto por lo cual se
debe realizar para un procesador en especfico que es de INTEL.

1.7 Fases de un compilador

Un compilador opera en fases, cada una de las cuales transforma al programa
fuente de una representacin en otra, en la siguiente figura se muestra una
descomposicin ms comn de un compilador traductor

Para comprender estas fases dividiremos cada una en secciones independientes
que se explicaban a continuacin.
Administracin de la tabla de smbolos
Esta es una funcin esencial de un compilador que es registrar los identificadores
utilizados en el programa fuente y reunir informacin sobre los distintos atributos
de cada identificador.
Es una estructura de datos, que posee informacin sobre los identificadores
definidos por el usuario, ya sean constantes, variables, tipos u otros, que est a su
vez es la funcin principal, adems de reunir informacin de los atributos de estos.
Estos atributos pueden proporcionar informacin sobre la memoria asignada aun
identificador la direccin de memoria en que se almacenara en tiempo de
ejecucin, su tipo, su mbito donde la parte del programa es visible, etc.(Ana M.
Corrales, Jess P. Garca)
Programa fuente
Analizador lxico
Analizador
sintctico
Analizador
semntico
Generador de
cdigo intermedio
Optimizacin de
cdigo
Generador de
cdigo



Ejemplo de una tabla de smbolos

Deteccin de informacin de errores
En cada fase se pueden encontrar errores, pero, despus de detectar un error,
cada fase debe tratar de alguna forma ese error, para poder continuar la
compilacin, permitiendo la deteccin de ms errores en el programa fuente. sea
que un compilador no se encuentra tan til cuando se detiene al encontrar el
primer error.
Las etapas donde se encuentran ms errores son en la de anlisis sintctico y
semntico pero tambin en la fase lxica puede detectar donde los caracteres
restantes de la entrada no forman ningn componente lxico del lenguaje. Los
errores donde la cadena de componentes lxicos viola las reglas de estructura
(sintaxis) del lenguaje son determinados por la fase de anlisis sintctico. Durante
el anlisis semntico el compilador intenta detectar construcciones que tengan la
estructura sintctica correcta, pero a su vez no tengan significado para la
operacin implicada, por ejemplo so se intenta sumar dos identificadores, uno de
los cales es el nombre de una matriz y otro el nombre de un procedimiento,
obviamente marcaria error.

ANALISIS LEXICO
El analizador lxico es la primera fase de un compilador. Su principal funcin
consiste en leer los caracteres de entrada y elaborar como salida una secuencia
de componentes lxicos que utiliza el analizador sintctico para hacer el anlisis.
Esta rutina del analizador sintctico. Recibida la orden Dame el siguiente
componente lxico del analizador sintctico, el lxico lee los caracteres de
entrada hasta que pueda identificar el siguiente componente lxico, el cual
devuelve al sintctico segn el formato convenido.

Adems de esta funcin principal, el analizador lxico tambin realiza otras de
gran importancia, a saber:

Eliminar los comentarios del programa.
Eliminar espacios en blanco, tabuladores, retorno de carro, etc., y en general,
todo aquello que carezca de significado segn la sintaxis del lenguaje.
Reconocer los identificadores de usuario, nmeros, palabras reservadas del
lenguaje, etc., y tratarlos correctamente con respecto a la tabla de smbolos (solo
en los casos en que este analizador deba tratar con dicha estructura).
Llevar la cuenta del nmero de lnea por la que va leyendo, por si se produce
algn error, dar informacin acerca de dnde se ha producido.
Avisar de errores lxicos. Por ejemplo, si el carcter @ no pertenece al
lenguaje, se debe emitir un error.
Tambin puede hacer funciones de preprocesador.

Los siguientes conceptos de fundamentales se seguirn viendo a lo largo de todo
el compilador:
Patrn: es una expresin regular.
Token: es la categora lxica asociada a un patrn. Cada Token se
convierte en un nmero o cdigo identificador nico. En algunos casos,
cada nmero tiene asociada informacin adicional necesaria para las fases
posteriores de la etapa de anlisis. El concepto de Token coincide
directamente con el concepto de terminal desde el punto de vista de la
gramtica utilizada por el analizador sintctico.
Lexema: Es cada secuencia de caracteres concreta que encaja con un
patrn. P.ej: 8", 23" y 50" son algunos lexemas que encajan con el patrn
(0'|1'|2'|... |9')+. El nmero de lexemas que puede encajar con un patrn
puede ser finito o infinito, p.ej. en el patrn WHILE slo encaja el
lexema WHILE.

ANALISIS SINTACTICO

Todo lenguaje de programacin obedece a unas reglas que describen la
estructura sintctica de los programas bien formados que acepta. En Pascal, por
ejemplo, un programa se compone de bloques; un bloque, de sentencias; una
sentencia, de expresiones; una expresin, de componentes lxicos; y as
sucesivamente hasta llegar a los caracteres bsicos. Se puede describir la sintaxis
de las construcciones de los lenguajes de programacin por medio de gramticas
de contexto libre o utilizando notacin BNF (Backus-Naur Form).

Las gramticas formales ofrecen ventajas significativas a los diseadores de
lenguajes y a los desarrolladores de compiladores:
Las gramticas son especificaciones sintcticas y precisas de lenguajes
de Programacin.
A partir de una gramtica se puede generar automticamente un
analizador Sintctico.
El proceso de generacin automtica anterior puede llevar a descubrir
ambigedades.
Una gramtica proporciona una estructura a un lenguaje de programacin,
siendo ms fcil generar cdigo y detectar errores.
Es ms fcil ampliar/modificar el lenguaje si est descrito con una
gramtica
Incorpora acciones semnticas en las que colocar el resto de fases del
compilador (excepto el analizador lxico): desde el anlisis semntico hasta
la generacin de cdigo.
Informa de la naturaleza de los errores sintcticos que encuentra e intenta
recuperarse de ellos para continuar la compilacin.
Controla el flujo de tokens reconocidos por parte del analizador lxico.

GRAMATICAS POR EL ANALIZADOR SINTACTICO
Centraremos nuestros esfuerzos en el estudio de anlisis sintcticos para
lenguajes basados en gramticas formales, ya que de otra forma se hace muy
difcil la comprensin del compilador. La formalizacin del lenguaje que acepta un
compilador sistematiza su construccin y permite corregir, quizs ms fcilmente,
errores de muy difcil localizacin, como es la ambigedad en el reconocimiento de
ciertas sentencias. La gramtica que acepta el analizador sintctico es una
gramtica de contexto libre, puesto que no es fcil comprender gramticas ms
complejas ni construir automticamente autmatas reducidos que reconozcan las
sentencias que aceptan.
Recurdese que una gramtica G queda definida por una tupla de cuatro
elementos:
(N,T, P, S), donde:

N = No terminales.
T = Terminales.
P = Reglas de Produccin.
S = Axioma Inicial.


Gramtica no ambigua que reconoce expresiones aritmticas.
rbol sintctico de una sentencia de un lenguaje
Supongamos que hay que reconocer la cadena (a + b) * a + b que el
analizador lxico nos ha suministrado como (id(a) + id (b)) * id(a) + id (b) y
vamos a construir el rbol sintctico, que sera el siguiente:

Donde la lnea roja reconoce la secuencia.

ANLISIS SEMNTICO
El anlisis semntico dota de un significado coherente a lo que hemos hecho en el
anlisis sintctico. El chequeo semntico se encarga de que los tipos que
intervienen en las expresiones sean compatibles o que los parmetros reales de
una funcin sean coherentes con los parmetros formales.

Funciones Principales:
Identificar cada tipo de instruccin y sus componentes
Completar la Tabla de Smbolos
Realizar distintas comprobaciones y validaciones:
Comprobaciones de tipos.
Comprobaciones del flujo de control.
Comprobaciones de unicidad.
Comprobaciones de emparejamiento.


ACCIONES SEMNTICAS
Dependiendo del tipo de sentencias, las acciones semnticas pueden agruparse
en:
Sentencias de Declaracin: Completar la seccin de tipos de la Tabla de
Smbolos.
Sentencias ejecutables: Realizar comprobaciones de tipos entre los
operan dos implicados.
Funciones y procedimientos: Comprobar el nmero, orden y tipo de los
parmetros actuales en cada llamada a una funcin o procedimiento.
Identificacin de variables: Comprobar si un identificador ha sido declarado
antes de utilizarlo.
Etiquetas: Comprobar si hay etiquetas repetidas y validacin.
Constantes: Comprobar que no se utilicen en la parte izquierda de una
asignacin.
Conversiones y equivalencias de tipo: Verificacin.
Sobrecarga de operadores y funciones: Detectar y solventar.
















Ejemplo:
Sea la expresin
int a, b, c;
a/ (b+c^2)
El rbol sintctico es:
/
---------
| |
a +
---------
| |
b ^
---------
| |
c 2
De la instruccin declarativa, la tabla de smbolos y el analizador morfolgico
obtenemos los atributos de los operados:
/
---------
| |
a +
int ---------
| |
b ^
int ---------
| |
c 2
int int
Derivando los atributos obtenemos:
/ int
---------
| |
a + int
int ---------
| |
b ^ int
int ---------
| |
c 2
int int

se observa que son del mismo tipo de dato por eso no existe conflicto alguno.
GENERACIN DE CDIGO INTERMEDIO

Despus de los anlisis sintctico y semntico, algunos compiladores generan una
representacin intermedia explcita del programa fuente. Se puede considerar esta
representacin intermedia como un programa para una mquina abstracta. Esta
representacin intermedia debe tener dos propiedades importantes; debe ser fcil
de producir y fcil de traducir al programa objeto.
Algunas ventajas de hacer esta tarea seran las siguientes:
Se facilita la re destinacin; se puede crear un compilador para una
maquina distinta uniendo una etapa final para la nueva mquina a una
etapa inicial ya existente.
Se puede aplicar la representacin intermedia un optimizador de cdigo
independiente de la mquina.
Facilita la divisin del proyecto

Tipos de representaciones intermedias
Propiedades:
Fcil de producir en el anlisis semntico
Fcil de traducir a cdigo mquina real
Instrucciones simples y concisas, de fcil optimizacin
Tipos
rboles de Sintaxis Abstracta

Notacin Polaca Inversa (RPN)
Cdigo P

Cdigos de tres direcciones

Cuartetos

Tercetos

Tercetos Indirectos


Representaciones intermedias: RPN

Notacin Polaca Inversa (RPN)
Los operadores van despus de los operados:
S = A + B * C S A B C * + =
Ventajas
Facilidad para generar cdigo a partir de ella
Es la notacin ms sencilla para el lenguaje intermedio
Inconvenientes
El cdigo es difcil de entender
Poca flexibilidad
No es til para optimizacin de cdigo

Para la etapa anterior el cdigo intermedio quedara as:
T1= asignaciones(a, b y c)
T2= c^2
T3= b + t1
T4= a/t2




OPTIMIZACIN DE CDIGO

La fase de optimizacin de cdigo, trata de mejorar el cdigo intermedio, de modo
que resulte un cdigo de mquina ms rpido de ejecutar. En ocasiones no se
puede optimizar ms el cdigo.

El compilador puede deducir conversiones y poder disminuir cdigo para que evite
mucho tiempo de compilacin.
Quedara de igual manera que el cdigo anterior

T1= asignar variables
T2= c^2
T3= b + t1
T4= a/t2

GENERACIN DE CDIGO MQUINA

La fase final de un compilador es la generacin de cdigo objeto, que por lo
general consiste en cdigo mquina re localizable o cdigo ensamblador. Las
posiciones de memoria se seleccionan para cada una de las variables usadas por
el programa. Despus, cada una de las instrucciones intermedias se traduce a una
secuencia de instrucciones de mquina que ejecuta la misma tarea. Un aspecto
decisivo es la asignacin de variables a registros.

MOVE AX, 0h
MOVE BX, B
MOVE CX, C
POW 2, C
ADD B, C
DIV AX, B
MOVE A, AX


























CONCLUSIONES

Como resultado de la investigacin presentada, es posible concluir que se
fortaleci an ms el conocimiento de los temas ya vistos en clase, con los
conceptos de diferentes autores, pero al final los significados de estos conceptos
nos llevan a lo mismo; un alfabeto es un conjunto de smbolos finitos, y a su vez el
alfabeto genera cadenas, y podemos crear un lenguaje con un conjunto de
cadenas sobre un alfabeto.
Tambin se explica claramente los tipos de lenguajes y las herramientas
computacionales ligadas con los lenguajes y nos pareci interesante las
herramientas que existen como los editores de estructuras, el cual toma como
entrada una secuencia de rdenes para construir un programa fuente.
La estructura de un traductor y las fases del compilador fueron vistas en clase
detalladamente, y con ayuda de esta investigacin quedo ms claro estos temas.











ANEXOS (Evidencias)

Mapa mental de Traductores (Equipo)
Elaborado por:
Brenda Liliana Polanco Lpez 11400556
Jos Alberto Rodrguez Ruelas 10400420
Juan Manuel Garca Andrade 10400370






Operaciones con Lenguajes (individual)
Elaborado por:
Brenda Liliana Polanco Lpez 11400556


Elaborado por:
Juan Manuel Garca Andrade 10400370



Ejercicio de las fases de un compilador
Elaborado por:
Brenda Liliana Polanco Lpez
Elsy Amparo Cruz Ramrez








Elaborado por:
Jos Alberto Rodrguez Ruelas
lvaro Lee Castaeda Escobedo







REFERENCIAS
Hopcroft, J. & Motwani R. & Ullman J. (2008). Teora de autmatas, Lenguajes y
computacin (3era Edicin). Madrid: Pearson Addison Wesley

Kelly, D. (1995). Teora de Autmatas y Lenguajes Formales. Madrid: Prentice Hall

Cueva, J. M. (2001). Lenguajes Gramticas y Autmatas. Espaa: Departamento
de Informtica

Aho A. & Senthi R. & Ulman J. (2002). COMPILADORES, Principios, tcnicas y
herramientas ( Primera Edicin). Mxico: Pearson Education.

Corrales A. & Prez J. (2008). COMPILADORES, TRADUCTORES E
INTERPRETES.

Galvarez S. & Mora M. A. (2005). COMPILADORES traductores y compiladores
con Lex/Yacc, Jflex/Cup y JavaCC (Edicin electrnica). Documento presentado
en la Universidad de Mlaga

Jurado, E. (2008) Teora de autmatas y lenguajes formales Badajoz, Espaa:
Universidad de Extremadura

Quiroga E. (2008) Autmatas y lenguajes formales Bogot, Colombia: UNAD

Viuela, P. (2001) Lenguajes, gramticas y autmatas: Un enfoque pragmtico
Madrid, Espaa: Addison Wesley

Aho Alfred, Sethi Ravi & Ullman Jeffrey (1998) Compiladores: principios, tcnicas y
herramientas (Primera Edicion.) Edo. De Mexico, Mexico: Addison Wesley

Sanchez Dueas, G. (1989) Compiladores e Intrpretes (Segunda Ed.) Madrid
Espaa: Daz de Santos

Anda mungkin juga menyukai