Professional Documents
Culture Documents
AUTMATAS I
UNIDAD I
Lenguajes y Autmatas I
ndice
Introduccin........................................................................................................ 3
Definicin de traductor compilador e intrprete.................................................5
Etapas del proceso de compilador usar imgenes..............................................8
Introduccin y definicin de cada una de las etapas..........................................9
Tabla de smbolos.............................................................................................. 13
Bibliografa........................................................................................................ 15
Introduccin.
En el siguiente trabajo se presentara conceptos bsicos a conocer para la
materia de lenguajes y autmatas I, partiendo desde definiciones y breves
explicaciones para as poder dar a conocer mejor cada uno de estos temas, ya
que al ser una materia extensa y un poco compleja es importante, que cada
concepto sea comprendido para as poder continuar, algunas de los temas
presentes en este trabajo son el cdigo fuente, traductores, compiladores,
interpretes, sus ventajas y desventajas, las diferencias que hay entre los
compiladores e intrpretes, tablas de smbolos, entre otros temas que se irn
incorporando al documento
Intrprete:
Los intrpretes no producen un lenguaje objetivo como en los compiladores. Un
intrprete lee el cdigo como est escrito e inmediatamente lo convierte en
acciones; es decir, lo ejecuta en ese instante.
Existen lenguajes que utilizan un intrprete (como por ejemplo JAVA) que
traduce en el instante mismo de lectura el cdigo en lenguaje mquina para
que pueda ser ejecutado.
Usando un intrprete, un solo archivo fuente puede producir resultados iguales
incluso en sistemas sumamente diferentes (ej. una PC y una consola de
videojuegos). Usando un compilador, un solo archivo fuente puede producir
resultados iguales solo si es compilado a distintos ejecutables especficos a
cada sistema.
Los programas interpretados suelen ser ms lentos que los compilados debido
a la necesidad de traducir el programa mientras se ejecuta, pero a cambio son
ms flexibles como entornos de programacin y depuracin (lo que se traduce,
por ejemplo, en una mayor facilidad para reemplazar partes enteras del
programa o aadir mdulos completamente nuevos), y permiten ofrecer al
programa interpretado un entorno no dependiente de la mquina donde se
ejecuta el intrprete, sino del propio intrprete (lo que se conoce comnmente
como mquina virtual).
Ventajas de los intrpretes
Flexibilidad: Los lenguajes interpretativos suelen ser ms flexibles y permiten
realizar acciones ms complejas, a menudo imposibles o muy difciles de
procesar para un compilador.
Ejecucin de cadenas de caracteres mediante operadores como Execute,
interpret, evalquote o value. Esto permite escribir programas muy potentes,
capaces de modificarse a s mismos.
Cambiar sobre la marcha el significado de los smbolos, e incluso prescindir por
completo de las declaraciones. Esto reduce la carga de trabajo del
programador, que no tiene que preocuparse de declarar las variables, aunque
tambin puede hacer ms difcil la depuracin de los programas.
Simplificar la gestin dinmica de memoria en los programas fuente,
ponindola por completo bajo el control del intrprete.
Obtener un enlace dinmico completo en los sistemas orientados a objetos. En
los lenguajes de este tipo, los mensajes (equivalentes a las instrucciones en los
lenguajes no orientados a objetos) se dirigen a un objeto determinado para
indicarle que debe ejecutar cierto mtodo (una funcin).
Facilidad de depuracin de programas:
Durante la ejecucin de un programa por un intrprete, dicha ejecucin puede
interrumpirse en cualquier momento, para examinar o modificar los valores de
Usando el ejemplo anterior podemos pensar que las reglas que se siguen son
que una asignacin se compone de un identificador, seguido de un smbolo de
asignacin, seguido de una expresin y de un punto y coma. Esto se escribe en
la gramtica en forma de regla:
(Asig) id asig (Expri) pyc. Anlogamente, podemos decir que una expresin
es bien un identificador, bien la suma de dos expresiones. En reglas:
Es interesante darse
cuenta de que, tanto
en las reglas como en la construccin del rbol, se hace caso omiso de los
posibles atributos de los componentes lxicos; nicamente se tiene en cuenta
su categora.
Anlisis Semntico.
La ltima fase del anlisis, el anlisis semntico, toma como entrada el rbol
sintctico y comprueba si, adems de las restricciones sintcticas, se cumplen
otras restricciones impuestas por el lenguaje y que no pueden ser
comprobadas mediante una gramtica incontextual.
En otras palabras Intenta detectar instrucciones que tengan la estructura
sintctica correcta, pero que no tengan significado para la operacin implicada.
Algunos ejemplos de estas restricciones son la necesidad de declarar las
variables antes de usarlas, las reglas de tipos o la coincidencia entre los
parmetros de las funciones en las definiciones y las llamadas. Como salida de
esta fase, se obtiene una representacin semntica, por ejemplo el rbol de
sintaxis abstracta comentado antes.
Generacin de cdigo Intermedio.
En esta etapa se traduce la entrada a una representacin independiente de la
mquina pero fcilmente traducible a lenguaje ensamblador. Esta
representacin puede tomar diversas formas que pueden entenderse como
Sin embargo, es fcil darse cuenta de que no hace falta calcular dos veces la
direccin de a[i], con lo que se pueden ahorrar, al menos, tres instrucciones.
En otras ocasiones, es posible utilizar instrucciones especializadas para
mejorar la velocidad. Por ejemplo, si la instruccin anterior a valor= valor +
inc; es inc = 1; gcc - O genera: incl % ebx
Por esto, es habitual incluir mdulos encargados tanto de la optimizacin del
cdigo intermedio como del cdigo objeto.
Generacin de Cdigo.
Esta constituye la fase final de un compilador. Una vez obtenido el cdigo
intermedio, es necesario generar el cdigo objeto. Lo habitual es que no se
genere el cdigo objeto directamente sino que se genere cdigo en
ensamblador y despus se utilice un ensamblador. De cualquier forma, esta
fase es totalmente dependiente de la arquitectura concreta para la que se est
desarrollando el compilador. En particular, hay que enfrentarse a problemas
como:
Tabla de smbolos.
Tambin se la llama tabla de nombres o tabla de identificadores y tiene dos
funciones principales:
Efectuar chequeos semnticos.
Generacin de cdigo.
Permanece slo en tiempo de compilacin, no de ejecucin, excepto en
aquellos casos en que se compila con opciones de depuracin.
La tabla almacena la informacin que en cada momento se necesita sobre las
variables del programa, informacin tal como: nombre, tipo, direccin de
localizacin, tamao, etc. La gestin de la tabla de smbolos es muy
importante, ya que consume gran parte del tiempo de compilacin. De ah que
su eficiencia sea crtica. Aunque tambin sirve para guardar informacin
referente a los tipos creados por el usuario, tipos enumerados y, en general, a
cualquier identificador creado por el usuario, nos vamos a centrar
principalmente en las variables de usuario. Respecto a cada una de ellas
podemos guardar:
Almacenamiento del nombre.
Se puede hacer con o sin lmite. Si lo hacemos con lmite, emplearemos una
longitud fija para cada variable, lo cual aumenta la velocidad de creacin, pero
limita la longitud en unos casos, y desperdicia espacio en la mayora. Otro
mtodo es habilitar la memoria que necesitemos en cada caso para guardar el
nombre. En C esto es fcil con los char *. Si hacemos el compilador en
MODULA-2, por ejemplo, habra que usar el tipo ADDRESS.
El tipo tambin se almacena en la tabla, como veremos en un apartado
dedicado a ello.
Direccin de memoria en que se guardar.
Esta direccin es necesaria, porque las instrucciones que referencian a una
variable deben saber dnde encontrar el valor de esa variable en tiempo de
ejecucin, tambin cuando se trata de variables globales. En lenguajes que no
permiten recursividad, las direcciones se van asignando secuencialmente a
medida que se hacen las declaraciones. En lenguajes con estructuras de
bloques, la direccin se da con respecto al comienzo del bloque de datos de
ese bloque, (funcin o procedimiento) en concreto.
El nmero de dimensiones de una variable array, o el de parmetros de una
funcin o procedimiento junto con el tipo de cada uno de ellos es til para el
chequeo semntico. Aunque esta informacin puede extraerse de la estructura
de tipos, para un control ms eficiente, se puede indicar explcitamente.
Tambin podemos guardar informacin de los nmeros de lnea en los que se
ha usado un identificador, y de la lnea en que se declar.
Bibliografa
http://josesanchezsantos.blogspot.mx/2012/05/compilador-e-interprete.html
http://www.iqcelaya.itc.mx/~vicente/Programacion/TradComp.pdf
http://es.slideshare.net/Francko22/compilador-e-interpretador
http://ing-radjchv-pmz-estl.blogspot.mx/2009/09/14-traductor-y-suestructura.html
https://loscompiladores.wordpress.com/category/procesos-postcompilacion/