You are on page 1of 17

1.

1 ALFABETO
El alfabeto, abecedario o abec de una lengua o idioma es el conjunto ordenado de sus letras. Es tambin la agrupacin, con un orden determinado, de las grafas utilizadas para representar el lenguaje que sirve de sistema de comunicacin. El trmino alfabeto procede del griego (alfbeton), derivado de las dos primeras letras griegas (alfa, ) y (beta, ), derivadas a su vez de las letras fenicias alp y bt, que significaban buey y casa respectivamente. El alfabeto griego es una adaptacin del alfabeto fenicio, que tambin dio lugar entre otros al hebreo y al rabe. Por su parte, el trmino abecedario proviene del latn tardo abecedrium, tambin derivado del nombre de las primeras letras, en este caso cuatro: a (a), b (be), c (ce) y d (de). Algunas letras pueden recibir uno o varios diacrticos con el fin de diferenciar los sonidos de la lengua o poder evitar las ambigedades. De la misma forma, el alfabeto puede ser entendido por el uso de letras suplementarias. Las evoluciones fonticas de una lengua se crean a un ritmo diferente de la evolucin escrita. La escritura alfabtica no garantiza una correspondencia unvoca entre los fonemas y los grafemas. En otros mbitos (matemticas, por ejemplo), un alfabeto es un conjunto finito y ordenado de smbolos.

1.2Cadena de caracteres

Esta imagen muestra la relacin entre las cadenas de caracteres, las frmulas bien formadas y los teoremas. En algunos sistemas formales, sin embargo, el conjunto de los teoremas coincide con el de las frmulas bien formadas. En programacin, una cadena de caracteres, palabra, ristra de caracteres o frase (string en ingls) es una secuencia ordenada de longitud arbitraria (aunque finita) de elementos que pertenecen a un cierto lenguaje formal o alfabeto anlogas a una frase o a

una oracin. En general, una cadena de caracteres es una sucesin de caracteres (letras, nmeros u otros signos o smbolos). Desde un punto de vista de la programacin, si no se ponen restricciones al alfabeto, una cadena podr estar formada por cualquier combinacin finita de todo el juego de caracteres disponibles (las letras de la 'a' a la 'z' y de la 'A' a la 'Z', los nmeros del '0' al '9', el espacio en blanco ' ', smbolos diversos '!', '@', '%', etc). En este mismo mbito (el de la programacin), se utilizan normalmente como un tipo de dato predefinido, para palabras, frases o cualquier otra sucesin de caracteres. En este caso, se almacenan en un vector de datos, o matriz de datos de una sola fila (array en ingls). Las cadenas se pueden almacenar fsicamente:

Seguidas. Enlazados letra a letra.

Generalmente son guardados un carcter a continuacin de otro por una cuestin de eficiencia de acceso. Un caso especial de cadena es la que contiene cero caracteres, a esta cadena se la llama cadena vaca; en teora de autmatas es comn denotar a la misma por medio de la letra griega .

Operacin con cadena de caracteres


Siguiendo en el mbito de la informtica, al considerar las cadenas como un tipo de datos, hay que definir (o conocer) cuales son las operaciones que podemos hacer con ellas, en principio stas podran ser muchas y llegar a ser muy sofisticadas, aqu se exponen algunas de ellas:

Asignacin: Consiste en asignarle una cadena a otra. Concatenacin: Consiste en unir dos cadenas o ms (o una cadena con un carcter) para formar una cadena de mayor tamao. Bsqueda: Consiste en localizar dentro de una cadena una subcadena ms pequea o un carcter. Extraccin: Se trata de sacar fuera de una cadena una porcin de la misma segn su posicin dentro de ella. Comparacin: Se utiliza para comparar dos cadenas.

Representacin
Una cadena suele ser representada entre comillas dobles superiores ("palabra"), mientras que un carcter de esa cadena (un char en ingls) suele ser representado entre comillas simples ('p'). Por ejemplo, en C:
char c = 'a'; char str[5] = "hola";

Generalmente para acceder a un carcter en una posicin determinada se suele usar la forma variable[posicin] como cuando se accede a un vector. Para poder mostrar una comilla (") dentro de la cadena y no tener problemas con las comillas que la delimitan, se usan secuencias de escape. Esto se aplica a otros caracteres reservados o no imprimibles como el retorno de carro. No obstante, las expresiones para producir estas secuencias de escape dependen del lenguaje de programacin que se est usando. Una forma comn, en muchos lenguajes, de escapar un carcter es anteponindole un \ (sin comillas), p. e.: \" (sin comillas).

[editar] Cadenas dinmicas y estticas


Las cadenas pueden ser de naturaleza dinmica (pueden alterar su longitud durante el tiempo de ejecucin), o de naturaleza esttica (su longitud es fija a lo largo del tiempo de ejecucin). En este segundo caso el programador debe prever que al recorrer la cadena los indces no se vayan de los lmites previstos (C no permite que las cadenas crezcan automticamente de forma explcita, mientras que C# s). El final de la cadena se delimita de diferente manera en uno u otro caso:

Mediante un carcter de fin de cadena ("\0" en C) para las cadenas de tipo dinmico. Mediante una propiedad de la cadena que delimite su longitud (Length en C#) para las de tipo esttico.

[editar] Ejemplos de algunas operaciones comunes


Asignacin: asignarle una cadena a otra
char *strcpy(char [], const char[]); # en C cadena1=cadena2; # en C++ cadena1 := cadena2 # en Smalltalk

Concatenacin: unir dos cadenas de caracteres.


$pareja = "Joshua"." y "."Lidia" # en Perl y PHP; pareja = "Luisa" & " y " & "Carmen" # en Visual Basic; pareja = "Luisa" + " y " + "Carmen"; # en C++ y Java con la clase String. pareja := 'Luisa' , ' y ' , 'Carmen'. # en Smalltalk strcat(cadena1,cadena2); strcat(cadena1, cadena3); # en C (Debe haber suficiente espacio en la primera)

N de caracteres de una cadena


int strlen(const char[]); # en C Devuelve el n de caracteres sin contar el '\0' cadena.length(); # en C++ cadena size. # en Smalltalk

Comparacin: Compara dos cadenas en orden lexicogrfico

int strcmp(const char[], const char[]); # en C Devuelvee <0 si la 1 es menor, >0 si es mayor y 0 si son iguales cadena1==cadena2; cadena1>cadena2; etc. # en C++ Devuelve un valor de verdad cadena1 = cadena2 # en Smalltalk Devuelve true o false.

Multiplicar una cadena: repetir una cadena un nmero de veces


$puntos ="." x 5 # pone 5 puntos en Perl puntos := Generator generateJoin: '.' repeat: 5. de 5 puntos en Smalltalk # Genera una cadena

1.3 LENGUAJE

Lenguaje de programacin
Un lenguaje de programacin" es un lenguaje diseado para describir el conjunto de acciones consecutivas que un equipo debe ejecutar. Por lo tanto, un lenguaje de programacin es un modo prctico para que los seres humanos puedan dar instrucciones a un equipo. Por otro lado, el trmino "lenguaje natural" define un medio de comunicacin compartido por un grupo de personas (por ejemplo: ingls o francs). Los lenguajes que los equipos usan para comunicarse entre ellos no tienen nada que ver con los lenguajes de programacin; se los conoce como protocolos de comunicacin. Se trata de dos conceptos totalmente diferentes. Un lenguaje de programacin es muy estricto:
A CADA instruccin le corresponde UNA accin de procesador.

El lenguaje utilizado por el procesador se denomina lenguaje mquina. Se trata de datos tal como llegan al procesador, que consisten en una serie de 0 y 1 ( datos binarios). El lenguaje mquina, por lo tanto, no es comprensible para los seres humanos, razn por la cual se han desarrollado lenguajes intermediarios comprensibles para el hombre. El cdigo escrito en este tipo de lenguaje se transforma en cdigo mquina para que el procesador pueda procesarlo. El ensamblador fue el primer lenguaje de programacin utilizado. Es muy similar al lenguaje mquina, pero los desarrolladores pueden comprenderlo. No obstante, este lenguaje se parece tanto al lenguaje mquina que depende estrictamente del tipo de procesador utilizado (cada tipo de procesador puede tener su propio lenguaje mquina). As, un programa desarrollado para un equipo no puede ser portado a otro tipo de equipo. El trmino "portabilidad" describe la capacidad de usar un programa de software en diferentes tipos de equipos. Para poder utilizar un programa de software escrito en un cdigo ensamblador en otro tipo de equipo, a veces ser necesario volver a escribir todo el programa!

Por lo tanto, un lenguaje de programacin tiene varias ventajas:


es mucho ms fcil de comprender que un lenguaje mquina: permite mayor portabilidad, es decir que puede adaptarse fcilmente para ejecutarse en diferentes tipos de equipos.

Lenguajes de programacin imperativos y funcionales


Los lenguajes de programacin generalmente se dividen en dos grupos principales en base al procesamiento de sus comandos:

lenguajes imperativos; lenguajes funcionales.

Lenguaje de programacin imperativo

Un lenguaje imperativo programa mediante una serie de comandos, agrupados en bloques y compuestos de rdenes condicionales que permiten al programa retornar a un bloque de comandos si se cumple la condicin. Estos fueron los primeros lenguajes de programacin en uso y an hoy muchos lenguajes modernos usan este principio. No obstante, los lenguajes imperativos estructurados carecen de flexibilidad debido a la secuencialidad de las instrucciones.
Lenguaje de programacin funcional

Un lenguaje de programacin funcional(a menudo llamado lenguaje procedimental) es un lenguaje que crea programas mediante funciones, devuelve un nuevo estado de resultado y recibe como entrada el resultado de otras funciones. Cuando una funcin se invoca a s misma, hablamos de recursividad.

Interpretacin y compilacin
Los lenguajes de programacin pueden, en lneas generales, dividirse en dos categoras:

lenguajes interpretados lenguajes compilados

Lenguaje interpretado

Un lenguaje de programacin es, por definicin, diferente al lenguaje mquina. Por lo tanto, debe traducirse para que el procesador pueda comprenderlo. Un programa escrito en un lenguaje interpretado requiere de un programa auxiliar (el intrprete), que traduce los comandos de los programas segn sea necesario.
Lenguaje compilado

Un programa escrito en un lenguaje "compilado" se traduce a travs de un programa anexo llamado compilador que, a su vez, crea un nuevo archivo independiente que no

necesita ningn otro programa para ejecutarse a s mismo. Este archivo se llama ejecutable. Un programa escrito en un lenguaje compilado posee la ventaja de no necesitar un programa anexo para ser ejecutado una vez que ha sido compilado. Adems, como slo es necesaria una traduccin, la ejecucin se vuelve ms rpida. Sin embargo, no es tan flexible como un programa escrito en lenguaje interpretado, ya que cada modificacin del archivo fuente (el archivo comprensible para los seres humanos: el archivo a compilar) requiere de la compilacin del programa para aplicar los cambios. Por otra parte, un programa compilado tiene la ventaja de garantizar la seguridad del cdigo fuente. En efecto, el lenguaje interpretado, al ser directamente un lenguaje legible, hace que cualquier persona pueda conocer los secretos de fabricacin de un programa y, de ese modo, copiar su cdigo o incluso modificarlo. Por lo tanto, existe el riesgo de que los derechos de autor no sean respetados. Por otro lado, ciertas aplicaciones aseguradas necesitan confidencialidad de cdigo para evitar las copias ilegales (transacciones bancarias, pagos en lnea, comunicaciones seguras...).
Lenguajes intermediarios

Algunos lenguajes pertenecen a ambas categoras (LISP, Java, Python...) dado que el programa escrito en estos lenguajes puede, en ciertos casos, sufrir una fase de compilacin intermediaria, en un archivo escrito en un lenguaje ininteligible (por lo tanto diferente al archivo fuente ) y no ejecutable (requerira un interprete). Los applets Java, pequeos programas que a menudo se cargan en pginas web, son archivos compilados que slo pueden ejecutarse dentro de un navegador web (son archivos con la extensin .class).

Algunos ejemplos de lenguajes ampliamente usados


A continuacin, encontrar una breve lista de los lenguajes de programacin actuales:
Lenguaje ADA BASIC C C++ Cobol Fortran Java Principal rea de aplicacin Tiempo real Programacin para fines educativos Programacin de sistema Compilado/interpr etado Lenguaje compilado Lenguaje interpretado Lenguaje compilado

Programacin de sistema orientado Lenguaje compilado a objeto Administracin Clculo Programacin orientada a Internet Lenguaje compilado Lenguaje compilado Lenguaje

intermediario MATLAB Clculos matemticos LISP Pascal PHP Inteligencia artificial Perl Clculos matemticos Clculos matemticos Inteligencia artificial Educacin Desarrollo de sitios web dinmicos Inteligencia artificial Procesamiento de cadenas de caracteres Lenguaje interpretado Lenguaje interpretado Lenguaje intermediario Lenguaje compilado Lenguaje interpretado Lenguaje interpretado Lenguaje interpretado

1.5 Herramientas computacionales de lenguaje

1.6 Estructura de traductor


Traductores y estructura
Traductor: En un sentido orientado hacia la computacin, un traductor, de manera general, es un software que toma como entrada un programa escrito en un cdigo llamado fuente y genera como salida otro programa en un cdigo llamado objeto. Algunos ejemplos de traductores son los compiladores (toma como entrada cdigo en alto nivel y genera como salida cdigo en bajo nivel), los interpretes (toma como entrada cdigo en alto nivel y genera como salida un cdigo intermedio), los preprocesadores (toma como entrada cdigo en alto nivel y genera como salida cdigo en alto nivel) y el ensamblador (toma como entrada cdigo en ensamblador y genera como salida cdigo en bajo nivel). Su estructura podra ser expresada de la siguiente manera:

Existen distintos tipos de traductores, entre ellos destacan: EnsambladoresEs un tipo de traductor que convierte programas escritos en lenguaje ensamblador en programas escritos en cdigo mquina. Ensambladores. El trmino ensamblador (del ingls assembler) se refiere a un tipo de programa informtico que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un

fichero objeto que contiene cdigo mquina, ejecutable directamente por la mquina para la que se ha generado. El propsito para el que se crearon este tipo de aplicaciones es la de facilitar la escritura de programas, ya que escribir directamente en cdigo binario, que es el nico cdigo entendible por la computadora, es en la prctica imposible. La evolucin de los lenguajes de programacin a partir del lenguaje ensamblador origin tambin la evolucin de este programa ensamblador hacia lo que se conoce como programa compilador. Funcionamiento El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de los cdigos mnemotcnicos que aparecen por su cdigo de operacin correspondiente en sistema binario. Tipos de ensambladores Podemos distinguir entre tres tipos de ensambladores:

Ensambladores bsicos. Son de muy bajo nivel, y su tarea consiste bsicamente en ofrecer nombres simblicos a las distintas instrucciones, parmetros y cosas tales como los modos de direccionamiento. Adems, reconoce una serie de directivas (o meta instrucciones) que indican ciertos parmetros de funcionamiento del ensamblador. Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores bsicos, fueron muy populares en las dcadas de los 50 y los 60, antes de la generalizacin de los lenguajes de alto nivel. Hacen todo lo que puede hacer un ensamblador, y adems proporcionan una serie de directivas para definir e invocar macroinstrucciones (o simplemente, macros). Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits, muchos de ellos teniendo compatibilidad hacia atrs pudiendo trabajar con programas con estructuras de 16 bits. Adems de realizar la misma tarea que los anteriores, permitiendo tambin el uso de macros, permiten utilizar estructuras de programacin ms complejas propias de los lenguajes de alto nivel.

Preprocesadores Traduce un lenguaje de alto nivel a otro, cuando el primero no puede pasar a lenguaje mquina directamente. . Los preprocesadores producen la entrada para un compilador, y pueden realizar las funciones siguientes:

Procesamiento de macros. Un preprocesador puede permitir a un usuario definir macros, que son abreviaturas de construcciones ms grandes. Inclusin de archivos. Un preprocesador puede insertar archivos de encabezamiento en el texto del programa. Por ejemplo, el preprocesador de C hace que el contenido del archivo reemplace a la proposicin #include cuando procesa un archivo que contenga a esa proposicin. Preprocesadores "racionales". Estos preprocesadores enriquecen los lenguajes antiguos con recursos ms modernos de flujo de control y de estructuras de datos. Por ejemplo, un preprocesador de este tipo podra proporcionar al usuario macros incorporadas para construcciones, como proposiciones while o if, en un lenguaje de programacin que no las tenga.

Extensiones a lenguajes. Estos preprocesadores tratan de crear posibilidades al lenguaje que equivalen a macros incorporadas. Por ejemplo, el lenguaje Equel es un lenguaje de consulta de base de datos integrado en C. El preprocesador considera las proposiciones que empiezan con ## como proposiciones de acceso a la base de datos, sin relacin con C, y se traducen a llamadas de procedimiento a rutinas que realizan el acceso a la base de datos.

Los procesadores de macros tratan dos clases de proposiciones: definicin de macros y uso de macros. Las definiciones normalmente se indican con algn carcter exclusivo o palabra clave, como define o macro. Constan de un nombre para la macro que se est definiendo y de un cuerpo, que constituye su definicin. A menudo, los procesadores de macros admiten parmetros formales en su definicin, esto es, smbolos que se reemplazarn por valores (en este contexto, un "valor" es una cadena de caracteres). El uso de una macro consiste en dar nombre a la macro y proporcionar parmetros reales, es decir, valores para sus parmetros formales. El procesador de macros sustituye los parmetros reales por lo parmetros formales del cuerpo de la macro; despus, el cuerpo transformado reemplaza el uso de la propia macro. Preprocesadores:

Macros (expansin de funciones) Inclusin de archivos (bibliotecas) Procesadores racionales Extensiones al leguaje (inclusin de ensamblador en C)

Intrpretes Se trata de traductores-ejecutores ya que con cada instruccin realizan un proceso triple de lectura-traduccin-ejecucin. Son relativamente lentos, pero muy buenos para la depuracin de programas. La interpretacin es una de las formas de ejecucin de los programas de computadoras, la otra es la compilacin.El trmino "intrprete" puede hacer referencia al programa que ejecuta el cdigo fuente que acaba de ser traducido a una forma intermedia, o puede hacer referencia al programa que lleva a cabo tanto la traduccin como la ejecucin. Lenguajes interpretados: PHP, PERL, BASIC Intrpretes vs compiladoresCualquier lenguaje puede ser ejecutado tanto va intrprete o va compilador, pero algunos lenguajes suelen asociarse ms a una va que a la otra, y por esto son llamados "lenguajes interpretados" o "lenguajes compilados" respectivamente.Tambin puede darse que un programa contenga partes que son implementadas via intrprete y otras va compilador.Tambin existen intrpretes que incluyen cierta "compilacin" en el medio. Son aquellos que compilan a un cdigo intermedio llamado bytecode, que es ms eficiente de ejecutar que hacerlo directamente desde el cdigo fuente.En general, la principal desventaja de los intrpretes, es que cuando un programa es interpretado, suele ejecutarse ms lento que si el mismo programa estuviese compilado. Esto se debe a que el intrprete debe analizar cada sentencia en el programa en cada ejecucin (un anlisis en tiempo real). Tambin el acceso a variables es ms lento en un intrprete, porque mapear los identificadores para almacenar las localizaciones debe hacerse repetidas veces en tiempo real. Compiladores

Es el tipo de traductor ms conocido. Se trata de un programa que traduce cdigo fuente escrito en un lenguaje de alto nivel (Pascal) en cdigo mquina (no siempre). Son ms rpidos que los intrpretes pero presentan mayor dificultad a la hora de detectar errores. Partes de un compilador La construccin de un compilador involucra la divisin del proceso en una serie de fases que variar con su complejidad. Generalmente estas fases se agrupan en dos tareas: el anlisis del programa fuente y la sntesis del programa objeto.

Anlisis: Se trata de la comprobacin de la correccin del programa fuente, e incluye las fases correspondientes al Anlisis Lxico (que consiste en la descomposicin del programa fuente en componentes lxicos), Anlisis Sintctico (agrupacin de los componentes lxicos en frases gramaticales ) y Anlisis Semntico (comprobacin de la validez semntica de las sentencias aceptadas en la fase de Anlisis Sintctico). Sntesis: Su objetivo es la generacin de la salida expresada en el lenguaje objeto y suele estar formado por una o varias combinaciones de fases de Generacin de Cdigo (normalmente se trata de cdigo intermedio o de cdigo objeto) y de Optimizacin de Cdigo (en las que se busca obtener un cdigo lo ms eficiente posible).

Alternativamente, las fases descritas para las tareas de anlisis y sntesis se pueden agrupar en Front-end y Back-end:

Front-end: es la parte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar, y est compuesta por las fases comprendidas entre el Anlisis Lxico y la Generacin de Cdigo Intermedio. Back-end: es la parte que genera el cdigo mquina, especfico de una plataforma, a partir de los resultados de la fase de anlisis, realizada por el Front End.

Esta divisin permite que el mismo Back End se utilice para generar el cdigo mquina de varios lenguajes de programacin distintos y que el mismo Front End que sirve para analizar el cdigo fuente de un lenguaje de programacin concreto sirva para generar cdigo mquina en varias plataformas distintas. Suele incluir la generacin y optimizacin del cdigo dependiente de la mquina. El cdigo que genera el Back End normalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programa enlazador (linker). Ejemplos de compiladores: C, C++, Pascal, etc. El autor, Alfred ilustra las fases de un compilador como lo muestra la siguiente figura

Anlisis Lxico.- Separa las Cadenas en unidades llamadas Tokens y las compara con la tabla de smbolos, El la tabla de smbolos estn definidos todos los smbolos (caracteres), que el lenguaje reconocer. Los nicos errores que podra generar es que encuentre algn carcter desconocido (inexistente en la tabla de smbolos). Anlisis Sintctico.- Compara los resultados obtenidos en la anterior etapa con las gramticas. Es decir que haya cadenas validas en las Variables, palabras reservadas, etc. Anlisis Semntico.- Checa que exista coherencia entre los identificadores y que la expresin sea correcta. Generacin de Cdigo intermedio.- Traduce de cdigo fuente a un cdigo como ensamblador acercndose a el lenguaje maquina. Optimizacin.- Reduce en forma, Tamao y tiempo el cdigo anterior.

Generadores de Cdigo para Compiladores (Compilador de Compilador)


Se han creado algunas herramientas generales para el diseo automtico de componentes especficos de compilador. Estas herramientas utilizan lenguajes especializados para especificar e implantar el componente, y pueden utilizar algoritmos bastantes complejos. Las herramientas ms efectivas son las que ocultan los detalles del algoritmo de generacin y producen componentes que se pueden integrar con facilidad al resto del compilador. La siguiente es una lista de algunas herramientas tiles para la construccin de compiladores: 1.- Generadores de analizadores sintcticos. Estos generadores producen analizadores sintcticos, normalmente a partir de una entrada fundamentada en una gramtica independiente del contexto. En los primeros compiladores, el anlisis sintctico consuma no slo gran parte del tiempo, de ejecucin del compilador, sino gran parte del esfuerzo intelectual de escribirlo. Esta fase se considera ahora una de las ms fciles de aplicar. Muchos de los generadores de analizadores sintcticos utilizan poderosos algoritmos de anlisis sintctico, y son demasiado complejos para realizarlos manualmente. 2.- Generadores de analizadores lxicos. Estas herramientas generan automticamente analizadores lxicos, por lo general a partir de una especificacin basada en expresiones regulares. La organizacin bsica del analizador lxico resultante es en realidad un autmata finito.

3.- Dispositivos de traduccin dirigida por la sintaxis. Estos producen grupos de rutinas que recorren el rbol de anlisis sintctico. La idea bsica es que se asocian una o ms "traducciones" con cada nodo del rbol de anlisis sintctico, y cada traduccin se define partiendo de traducciones en sus nodos vecinos en el rbol. 4.- Generadores automticos de cdigo. Tales herramientas toman un conjunto de reglas que definen la traduccin de cada operacin del lenguaje intermedio al lenguaje de mquina para la mquina objeto. Las reglas deben incluir suficiente detalle para poder manejar los distintos mtodos de acceso posibles a los datos; por ejemplo, las variables pueden estar en registros, en una posicin fija (esttica) de memoria o pueden tener asignada una posicin en una pila. La tcnica fundamental es la de "concordancia de plantillas". Las proposiciones de cdigo intermedio se reemplazan por "plantillas" que representan secuencias de instrucciones de mquina, de modo que las suposiciones sobre el almacenamiento de las variables concuerden de plantilla a plantilla. Como suele haber muchas opciones en relacin con la ubicacin de las variables (por ejemplo, en uno o varios registros o en memoria), hay muchas formas posibles de "cubrir" el cdigo intermedio con un conjunto dado de plantillas, y es necesario seleccionar una buena cobertura sin una explosin combinatoria en el tiempo de ejecucin del compilador. 5.- Dispositivos para anlisis de flujo de datos. Mucha de la informacin necesaria para hacer una buena optimacin de cdigo implica hacer un "anlisis de flujo de datos", que consiste en la recoleccin de informacin sobre la forma en que se transmiten los valores de una parte de un programa a cada una de las otras partes. Las distintas tareas de esta naturaleza se pueden efectuar esencialmente con la misma rutina, en la que el usuario proporciona los detalles relativos a la relacin que hay entre las proposiciones en cdigo intermedio y a la informacin que se est recolectando. LEX es una herramienta utilizada en la especificacin de analizadores lxicos para varios lenguajes. Esta herramienta se denomina compilador Lex (PCLEX para el entorno DOS), y la especificacin de su entrada, lenguaje Lex. El estudio de una herramienta existente permitir mostrar cmo, utilizando expresiones regulares, se puede combinar la especificacin de patrones con acciones, por ejemplo, haciendo entradas en una tabla de smbolos, cuya ejecucin se pueda pedir a un analizador lxico. Se pueden utilizar las especificaciones tipo Lex aunque no se disponga de un compilador Lex; las especificaciones se pueden transcribir manualmente a un programa operativo empleando tcnicas de diagramas de transiciones.

FLEX es una herramienta para generar programas capaces de reconocer patrones de texto. El reconocimiento de patrones es muy til en muchas aplicaciones. El usuario establece las reglas a usar y Flex generar el programa que buscar esos patrones. La razn por la que la gente usa Flex es porque es mucho ms fcil establecer las reglas a usar que escribir directamente un programa que busque el texto. PATRONES Los patrones en la entrada se escriben utilizando un conjunto extendido de expresiones regulares. Estas son:

YACC significa "otro compilador de compiladores ms" (del ingls Yet Another CompilerCompiler), lo que refleja la popularidad de los generadores de analizadores sintcticos al principio de los aos setenta, cuando S.C. Johnson cre la primera versin de Yacc. Este generador se encuentra disponible como una orden del sistema Unix y se ha utilizado para facilitar la implantacin de cientos de compiladores. JAVACC. (Java Compiler Compiler - Metacompilador en Java) es el principal metacompilador en JavaCC, tanto por sus posibilidades, como por su mbito de difusin. Se trata de una herramienta que facilita la construccin de analizadores lxicos y sintcticos por el mtodo de las funciones recursivas, aunque permite una notacin relajada muy parecida a la BNF. De esta manera, los analizadores generados utilizan la tcnica descendente a la hora de obtener el rbol sintctico. CARACTERSTICAS GENERALES: JavaCC integra en una misma herramienta al analizador lexicogrfico y al sintctico, y el cdigo que genera es independiente de cualquier biblioteca externa, lo que le confiere una interesante propiedad de independencia respecto al entorno. A grandes rasgos, sus principales caractersticas son las siguientes:

Genera analizadores descendentes, permitiendo el uso de gramticas de propsito general y la utilizacin de atributos tanto sintetizados como heredados durante la construccin del rbol sintctico. Las especificaciones lxicas y sintcticas se ubican en un solo archivo. De esta manera la gramtica puede ser leda y mantenida ms fcilmente. No obstante, cuando se introducen acciones semnticas, recomendamos el uso de ciertos comentarios para mejorar la legibilidad. Admite el uso de estados lxicos y la capacidad de agregar acciones lxicas incluyendo un bloque de cdigo Java tras el identificador de un token. Incorpora distintos tipos de tokens: normales (TOKEN), especiales (SPECIAL_TOKEN), espaciadores (SKIP) y de continuacin (MORE). Ello permite trabajar con especificaciones ms claras, a la vez que permite una mejor gestin de los mensajes de error y advertencia por parte de JavaCC en tiempo de metacompilacin. Los tokens especiales son ignorados por el analizador generado, pero estn disponibles para poder ser procesados por el desarrollador. La especificacin lxica puede definir tokens de manera tal que no se diferencien las maysculas de las minsculas bien a nivel global, bien en un patrn concreto. Adopta una notacin BNF propia mediante la utilizacin de smbolos propios de expresiones regulares, tales como (A)*, (A)+. Genera por defecto un analizador sintctico LL(1). No obstante, puede haber porciones de la gramtica que no sean LL(1), lo que es resuelto en JavaCC mediante la posibilidad de resolver las ambigedades desplazar/desplazar localmente en el punto del conflicto. En otras palabras, permite que el as. se transforme en LL(k) slo en tales puntos, pero se conserva LL(1) en el resto de las reglas mejorando la eficiencia. De entre los generadores de analizadores sintcticos descendentes, JavaCC es uno de los que poseen mejor gestin de errores. Los analizadores generados por JavaCC son capaces de localizar exactamente la ubicacin de los errores, proporcionando informacin diagnstica completa. Permite entradas codificadas en Unicode, de forma que las especificaciones lxicas tambin pueden incluir cualquier carcter Unicode. Esto facilita la descripcin de los elementos del lenguaje, tales como los identificadores Java que permiten ciertos caracteres Unicode que no son ASCII. Permite depurar tanto el analizador sintctico generado como el lexicogrfico, mediante las opciones DEBUG_PARSER, DEBUG_LOOKAHEAD, y DEBUG_TOKEN_MANAGER. JavaCC ofrece muchas opciones diferentes para personalizar su comportamiento y el comportamiento de los analizadores generados. Incluye la herramienta JJTree, un preprocesador para el desarrollo de rboles con caractersticas muy potentes. Incluye la herramienta JJDoc que convierte los archivos de la gramtica en archivos de documentacin. Es altamente eficiente, lo que lo hace apto para entornos profesionales y lo ha convertido en uno de los metacompiladores ms extendidos.

Autor: Julio Cesar Neira Hern?ndez Yesenia Rocha Cisneros Yoc Rodrigo Pacheco Hern?ndez Catedr?tico: 15/02/2010 Partes: 1, 2

Pgina anterior

Volver al principio del trabajo

Pgina siguiente

Comentarios
Para dejar un comentario, regstrese gratis o si ya est registrado, inicie sesin.

Agregar un comentario

Enviar comentario

Los comentarios estn sujetos a los Trminos y Condiciones

Trabajos relacionados
Estudio sobre los lenguajes de programacin para la robtica
Origen de la palabra robot y su significado. Propiedades caractersticas de los robots. El robot y su funcionamiento. Cl...

Sistemas de Procesamiento de Datos Programacin Orientada a Objetos


Estructura de un objeto. Encapsulamiento y ocultacin. Organizacin de los objetos. Actualmente una de las reas ms ca...

Rupturas de Informe
Definicin de una Ruptura de Informe. Especificacin de Opciones de Proceso. Una

Ruptura de Informe se usa para dividir... Ver mas trabajos de Programacion


Nota al lector: es posible que esta pgina no contenga todos los componentes del trabajo original (pies de pgina, avanzadas formulas matemticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versin original completa, puede descargarlo desde el men superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposicin de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta informacin. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de informacin.

El Centro de Tesis, Documentos, Publicaciones y Recursos Educativos ms amplio de la Red. Trminos y Condiciones | Haga publicidad en Monografas.com | Contctenos | Blog Institucional Monografias.com S.A.

cerrar E-mail: Contrasea: Regstrese gratis Olvid su contrasea? Ayuda

Recordarme en este equipo


Iniciar sesin

Leer ms: http://www.monografias.com/trabajos79/introduccion-programacion-sistemas/introduccionprogramacion-sistemas2.shtml#ixzz2Jljwb64g

1.7 fases de copilador


Fases de Compilacin de un Programa La compilacin consiste en la traduccin de un programa fuente escrito en un lenguaje de alto nivel a un programa objeto y luego se debe utilizar un programa llamado montador o enlazador (linker). El proceso de montaje conduce a un programa en lenguaje mquina directamente ejecutable. Intrprete: toma el programa fuente, lo traduce y a continuacin lo ejecuta. Un ejemplo de lenguaje interpretado es Java. Compilador: es un programa que se encargan de convertir las instrucciones escritas en un lenguaje de programacin en instrucciones escritas en lenguaje mquina (0s y 1s) que la computadora pueda entender. Ejemplos de lenguajes compilados son Pascal, C, C++. Fases de Proceso de un compilador 1.- Analizador Lxico: Realiza un anlisis del archivo. La cadena de entrada se lee e izquierda a derecha y se va agrupando en componentes lxicos, que son secuencias de caracteres con un significado colectivo. Por ejemplo, identificadores, palabras reservadas, signos de final de instruccin.

Cada componente es asociada ala categora que pertenece. 2.- Analizador Sintctico Realiza un anlisis jerrquico agrupado de los componentes lxicos en frases gramaticales que el compilador utiliza. 3.- Analizador Semntico Busca errores semnticos, rene informacin sobre los tipos; identifica operadores en base al rbol sintctico producido en el anlisis anterior Ejemplo de error: operacin entre tipos de datos incompatibles, rangos permitidos existencia de variables. En cualquiera de estos tres anlisis pueden producirse errores. 4.- Generador de cdigo intermedio Algunos compiladores generan una representacin explicita del programa fuente. Este cdigo es independiente de la maquina y a veces se usa en un conjunto con interpretes, en lenguajes independientes de la plataforma como JAVA. Esta representacin debe ser fcil de producir, ayudar a la optimizacin y fcil de traducir al programa objeto. 5.-Optimizacin Esta fase trata de mejorar el cdigo intermedio, o las estructuras que generaran el cdigo definitivo de modo de que resulte un cdigo de maquina ms rpido de ejecutar para guardarlos valores calculados por cada instruccin. 6.- Generador de cdigo Esta fase final de un compilador. Genera el cdigo objeto, que por lo general consiste en un cdigo de maquina relocalizable o cdigo ensamblador. Las posiciones de memoria relativas se seleccionan para cada variable. El uso de los registros de la CPU es relevante. 7.- Agrupacin lgica de un compilador Es la fase de anlisis, depende del lenguaje fuente y son independientes de las maquinas. Controla la correccin del programa fuente, manejando errores en cada etapa. Produce las estructuras necesarias para la generacin del cdigo. Fase de generacin, depende de la maquina y el lenguaje intermedio. Hace uso intensivo de la tabla de smbolos