1.1 ALFABETO Alfabeto: Leyendo sobre varios autores para comprender la definición de alfabeto puedo decir claramente que Deán Kelly en su libro “Teoría de autómatas y lenguajes formales” nos dice que un alfabeto “Es un conjunto no vacío y finito de símbolos” por otro lado Jonh E. Hpocroft, Rajeev Motwani y Jeffrey D. Ullman en su libro “Introducción a la teoría de autómatas, Lenguajes y Computación” nos definen que un alfabeto es un conjunto finito no vacio de símbolos, sin embargo Otros autores como Pedro García, Tomás Pérez, José Ruíz, Encarna Segarra, José M. Sempere y M. Vázquez de Parga nos dicen en su libro “Teoría de autómatas y lenguajes formales” que un alfabeto es cualquier conjunto finito y no vacío de elementos que denominan símbolos y los denotaran con el símbolo Ʃ. Con otro autor como John Martin en su libro “Lenguajes formales y teoría de la computación” Por tanto puedo concluir que un alfabeto es un conjunto no vacío y finito de símbolos denotado por el símbolo Ʃ. 1.2 CADENAS Cadena: La definición de cadena se puede encontrar con varias definiciones como Deán Kelly en su libro “Teoría de autómatas y lenguaj es formales” nos dice que en su libro definirá cadena como palabra y dice que una secuencia finita de símbolos de un determinado alfabeto es conocido como palabra ó cadena. Por otro lado John Martin en su libro “Lenguajes formales y teoría de la computación” define como cadena en un alfabeto Ʃ se obtiene al ordenar elementos de Ʃ (o posiblemente ninguno) este autor no define la palabra cadena en sí pero si la utiliza mucho en sus definiciones para lenguajes y alfabeto. Otra definición de Jonh E. Hpocroft, Rajeev Motwani y Jeffrey D. Ullman en su libro “Introducción a la teoría de autómatas, Lenguajes y Computación” nos dicen que una cadena (también llamada palabra) es una secuencia finita de símbolos pertenecientes a un alfabeto. 1.3 LENGUAJES Lenguajes: La definición de lenguajes la encontré de diferentes autores y cada uno usa sus términos como Jonh E. Hpocroft, Rajeev Motwani y Jeffrey D. Ullman en su libro “Introducción a la teoría de autómatas, Lenguajes y Computación” nos dice que un lenguaje es un conjunto de cadenas, todas ellas elegidas de algún Ʃ*donde Ʃ es un alfabeto, algo que me llamo la atención de este libro es que los autores comenta n que la definición de Lenguajes puede parecer extraña más sin embargo los lenguajes habituales se pueden considerar como conjuntos de cadenas. Otro autor como John Martin en su libro “Lenguajes formales y teoría de la computación” define lenguajes como que es simplemente un conjunto de cadenas que incluyen símbolos de un alfabeto. Por tanto puedo concluir que un alfabeto es un conjunto no vacío y finito de símbolos denotado por el símbolo Ʃ. Sin embargo Deán Kelly nos dice que un lenguaje es un conjunto de palabras o de cadenas y se puede tener el lenguaje compuesto por ninguna cadena. 1.4 TIPOS DE LENGUAJES Podemos encontrar varios tipos de lenguajes: * Lenguajes declarativos * Lenguajes de alto nivel * Lenguajes ensambladores * Lenguajes máquina SNOBOL (para aplicaciones de procesamiento de textos). Sin embargo. Además. C y ADA (para aplicaciones de programación de sistemas) y PL/I (para aplicaciones de propósi to general). Los lenguajes de alto nivel son los más utilizados como lenguajes de programación. lo cual permite una programación menos tediosa que con el anterior. COBOL (para aplicaciones de procesamiento de datos).Los lenguajes declarativos son los más parecidos al castellano o inglés en su potencia expresiva y funcionalidad y están en el nivel más alto respecto a los otros. estos lenguajes permiten que los algoritmos se expresen en un nivel y estilo de escritura fácilmente legible y comprensible por otros programadores. APL y FORTRAN (lenguajes de programación utilizados para aplicaciones científicas). Cada tipo de máquina tiene su propio lenguaje máquina distinto y su lenguaje ensamblador asociado. dominados por sentencias que expresan “lo que hay que hacer” en vez de “cómo hacerlo”. los lenguajes de alto nivel suelen tener la característica de “transportabilidad”. 1. El editor de estructuras no sólo realiza las funciones de creación y modificación . es necesario un conocimiento de la arquitectura mecánica subyacente para realizar una programación efectiva en cualquiera de estos niveles de lenguajes.5 HERRAMIENTAS COMPUTACIONALES LIGADAS CON LENGUAJES * Editores de estructuras: “Un editor de estructuras toma como ent rada una secuencia de órdenes para construir un programa fuente. El lenguaje ensamblador es simplemente una representación simbólica del lenguaje máquina asociado. Ejemplos de estos lenguajes de alto nivel son PASCAL. LISP y PROLOG (para aplicaciones de inteligencia artificial). Los lenguajes ensambladores y los lenguajes máquina son dependientes de la máquina. Aunque no son fundamentalmente declarativos. Son fundamentalmente lenguajes de órdenes. * Verificadores estáticos: este verificador lee un programa. En el proceso de traducción se identifican dos fases principales: * Fase de análisis * Fase de Síntesis . De esa manera. un intérprete realiza las operaciones que implica el programa fuente. a mi punto de vista estos editores de estructura son los que se encarga de llevar el orden de las palabras. la mayor parte de la cual es texto para componer. * Impresoras estéticas: “Una impresora estética analiza un programa y lo imprime de forma que la es tructura del programa resulte claramente visible” Concepto encontrado en el lib ro de Compiladores de Addison Wesley.6 ESTRUCTURA DE UN TRADUCTOR Un traductor es un programa que tiene como entrada un texto escrito en un lenguaje (lenguaje fuente) y como salida produce un texto escrito en un lenguaje (lenguaje objeto) que preserva el significado de origen. pues cada operador que se ejecuta en un lenguaje de ordenes suele ser una invocación de una rutina compleja. “Un verificador estático puede detectar si hay partes de un programa que nunca se podrán ejecutar o si cierta variable se usa antes de ser definida” nos dice Addison Wesley. el editor de estructuras puede realizar tareas adicionales útiles para la preparación de programas” Concepto encontrado en el libro de Compiladores de Addison Wesley.de textos de un editor de textos ordinario. imponiendo al programa fuente una estructura jerárquica apropiada. sino que también analiza el texto del programa. lo analiza e intenta descubrir errores potenciales sin correr el programa. * Intérpretes: “En lugar de producir un programa objeto como resultado de una traducción. pero alguna incluye órdenes para indicar párrafos. algo muy parecido a la corrección de los editores de texto como Word. valla el acomodo y comprobar si la entrada está formada correctamente. figuras o estructuras matemáticas como subíndices o superíndices” esto con comento el autor del libro de Compiladores Addison Wesley. como un editor o un compilador” es el encargado de COMPILADOR CONVENCIONAL * Formadores de textos: “Un formador de textos toma como entrada una cadena de caracteres. Ejemplos de traductores son los ensambladores y los compiladores. Muchas veces los interpretes se usan para ejecutar lenguajes de órdenes. * Intérpretes de consultas:” Un intérprete de consultas traduce un predicado que contiene operadores relacionales y booleanos a órdenes para buscar en una base de datos registros que satisfagan ese predicado” 1. Descendientes de los ensambladores básicos. y su tarea consiste básicamente en ofrecer nombres simbólicos a las distintas instrucciones. es decir programa que permite traducir el código fuente de un programa en lenguaje de alto nivel. es necesario dividir su trabajo en fases. Para el estudio de un compilador. Un compilador es un programa informático que traduce un programa escrito en un lenguaj e de programación a otro lenguaje de programación. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits. Esta traducción es directa e inmediata. a otro lenguaje de nivel inferior (lenguaje máquina).ENSAMBLADORES. Cualquier compilador debe realizar dos tareas principales: análisis del programa a compilar y síntesis de un programa en lenguaje máquina. En esta fase se lee los caracteres del programa fuente y se agrupan en cadenas que representan los componentes léxicos. o macro ensambladores. realizan la misma tarea que los anteriores. * Ensambladores modulares 32-bits o de alto nivel. Hacen todo lo que puede hacer un ensamblador. COMPILADORES. Tipos de ensambladores Podemos distinguir entre tres tipos de ensambladores: * Ensambladores básicos. . ya que las instrucciones en ensamblador no son más que nemotécnicos de las instrucciones máquina que ejecuta directamente la CPU. Componentes en que se divide un compilador: Análisis Léxico. Son de muy bajo nivel. A la secuencia de caracteres que representa un componente léxico se le llama lexema (o con su nombre en inglés token). * Ensambladores modulares. permitiendo también el uso de macros. Generando un programa equivalente a capaz de interpretar. El programa ensamblador es el programa que realiza la traducción de un programa escrito en ensamblador a lenguaje máquina. Cada fase representa una transformación al código fuente para obtener el código objeto. Estructura de un Compilador. En cada una de las fases se utiliza un administrador de la tabla de símbolos y un manejador de errores. permiten utilizar estructuras de programación más complejas propias de los lenguajes de alto nivel. y además proporcionan una serie de directivas para definir e invocar macroinstrucciones. Es posible encontrar errores. * Produce un resultado que no se puede almacenar. en cada una de las etapas de compilación de un programa. Se trata de mejorar el código intermedio. De esta forma podrán controlarse más eficientemente los errores encontrados en cada una de las fases de la compilación de un programa. Manejador de errores. ni tampoco un lenguaje de alto nivel. INTERPRETES.Análisis Sintáctico. aunque el código interno que genera no es el lenguaje de la máquina. Intenta detectar instrucciones que tengan la estructura sintáctica correcta. cada vez que se entre en un bucle se analizaran sus sentencias. * Ejecutan o interpretan el programa traducido al formato interno. Administrador de la tabla de símbolos. Se encarga de manejar los accesos a la tabla de símbolos. Generación de código Intermedio. La primera parte del intérprete se llama a veces "el compilador". Estructura Particularidades de la interpretación: * Ahorra memoria. Generación de Código. pero que no tengan significado para la operación implicada. ni siquiera lenguaje simbólico. * No produce resultados transportables. . de modo que resulte un código de máquina más rápido de ejecutar. * Facilita el proceso de depuración. lo cual hace la ejecución lenta. Análisis Semántico. a esta representación debe tener dos propiedades importantes: debe ser fácil de producir y fácil de traducir al programa objeto. Los componentes léxicos se agrupan en frases gramaticales que el compilador utiliza para sintetizar la salida. Los intérpretes realizan normalmente dos operaciones: * Traducen el código fuente a un formato interno. * No demasiado eficiente. Se puede considerar esta operación intermedia como un subprograma para una máquina abstracta. Esta constituye la fase final de un compilador. Optimización de Código. . de modo que resulte un código de máquina más rápido de ejecutar.La interpretación es útil en: * Sistemas interactivos. Optimización de código: esta fase trata de mejorar el código intermedio. 1. que por lo general consiste en código de máquina re localizable o código ensamblador. etc. * Programas de pequeña envergadura. Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. como un identificador. cada una de las cuales transforma al programa fuente de una representación en otra y nos propone la siguiente estructura Analizador léxico: esta fase lee los caracteres en el programa fuente y agrupa en una cadena de componentes léxicos en los que cada componente representa una secuencia lógicamente coherente de caracteres. una palabra clave (if.) Analizador sintáctico y semántico: por lo general manejan una gran porción de los errores detectables por el compilador. Generación de código: Esta es la fase final de un compilador es la generación de código objeto. algunos compiladores generan una representación intermedia explícita del programa fuente. * Programas de prototipo y de enseñanza. Durante el análisis semántico el compilador intenta detectar construcciones que tengan la estructura sintáctica correcta. while.7 FASES DE UN COMPILADOR Fases de un compilador: El autor Addison Wesley nos dice que un compilador opera en fases. Generación de código intermedio: Después de los análisis sintáctico y semántico. pdf “Lenguajes de programación” Allon B. técnicas y herramientas Lugar de publicación: Mexico Editorial: Bell Telephone Laboratories.itmina. se me hizo más sencilla porque encontré demasiada información y no le batalle. 2. para poder encontrar la información. ¿Cuál es el trabajo de las tareas que consideras más difícil y porque? La tarea que más se me complico fue la de investigar las herramientas ligadas con lenguajes no po rque estuvo difícil si no que por la falta de información.edu. BIBLIOGRAFIAS Autor: Addison Wesley Longman Fecha de publicación: 1990 Título: Compiladores Principios.ANEXOS 1. ya que los libros que había en la biblioteca del TEC ya los habían prestado. necesite ir a la biblioteca Magna ubicada en la UAN.HistoriayTiposdeLenguajesdeProgramacion. junto con la descripción es lo que más me ayudo a comprender la unidad 3. Inc PDF:http://blearning.mx/dep/sada/carreras/Ingenieria%20en%20Sistemas%20Computacionales/6to %20Semestre/Interfaces/interfaces/T203. Tucker. Editorial McGraw Hill . ¿Cuál de las tareas realizadas consideras más significativa o que te aporto más para comprender más la unidad? Sin dudar puedo decir que hacer los ejercicios de lenguajes porque así considero que aprendo más haciendo ejercicios que escuchando pura teoría y por eso la creación de lenguajes. ¿Cuál de las tareas realizadas consideras más sencilla y porque? La tarea de buscar 3 lenguajes. Hpocroft. Lenguajes y Computación” * John Martin “Lenguajes formales y teoría de la computación” . Ullman “Introducción a la teoría de autómatas.LIBROS CONSULTADOS * Deán Kelly “Teoría de autómatas y lenguajes formales” * Jonh E. Rajeev Motwani y Jeffrey D.