miércoles, 23 de enero de 2019

                                          UNIDAD 1

1.1.- Alfabeto



Un alfabeto es un conjunto finito no vacío, cuyos elementos se denominan letras o símbolos. Denotamos un alfabeto arbitrario con la letra Σ.
De símbolos del alfabeto Notaciones:
|ω| denota la longitud de la cadena ω. 
λ denota a una cadena de longitud 0, también conocida como palabra vacía
Vn denota al conjunto de todas las palabras de longitud n sobre V
V0 denota al conjunto cuyo unico elemento es la palabra vacia, es decir, V0={λ} 
V*denota al conjunto de todas las cadenas de cualquier longitud sobre V.
V+ denota al conjunto de toda las cadenas de cualquier longitud sobre V, excepto la vacía.
Un elemento de Vn es una cadena del tipo a 1 a 2...an donde cada ai ∈ V.

EJEMPLO;
Resultado de imagen para lenguajes y automatas alfabeto

● Martínez Bautista Marisa


1.2 CADENAS


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 Ʃ, 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.

Una cadena o una palabra sobre un alfabeto, admitidos la existencia de una única cadena que no tiene símbolo la cual se denomina cadena básica.

La longitud de cadena es el único símbolo que contiene:
Ejemplo
|abc|= 4,
|a+2*b|+5
|000111|=6
|if a>b then a=b;|=9

Cadena vacía
Es la única cadena de caracteres tamaño cero.
Concatenación de cadenas
la concatenación de dos cadenas u y v, escrita uv es pagar las dos cadenas para formar una sola.


Ejemplo
uw= cabb
(uv)= abcabb
u(vW)= abcabb


Universo del discurso.

Es un conjunto de todas las cadenas donde podemos formar con símbolos del alfabeto V le denominamos universo del discurso de V y la representamos de la siguiente manera W (V). Es evidente que W(V) es un conjunto infinito y que la cadena vacía pertenece a W(V).

Ejemplo:

Un afabeto con una sola letra V = { a }, podemos decir que el universo del discurso es: W(V) = { λ, a, aa, aaa, aaaa,....} y asi contiene una cadenas infinitas.


Faces de un compilador.

Es un programa que lee un programa escrito en un lenguaje, el lenguaje fuente y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto como parte de este proceso de traducción el compilador informa al usuario de la presencia de erros en el programa fuente.

Modelo de Análisis y síntesis de la Compilación.
En la compilación hay dos partes análisis y síntesis la parte del análisis divide al programa fuente en sus elementos componentes y crea una representación intermedia del programa fuente. La parte de síntesis construye el programa objeto deseado a partir de la representación intermedia. De las dos partes, la síntesis es la que requiere las técnicas más especializadas.

● Maigualida Perez Mrlgarejo


1.3 LENGUAJES, TIPOS Y HERRAMIENTAS



 Un lenguaje es un conjunto de cadenas, todas ellas seleccionadas de un subconjunto finito donde el conjunto es un determinado alfabeto. Es una forma de representar información basada en un conjunto finito de signos o símbolos.

TIPOS DE LENGUAJES

 Lenguajes de bajo nivel: Son lenguajes totalmente dependientes de la máquina, es decir que el programa que se realiza con este tipo de lenguajes no se puede migrar o utilizar en otras máquinas. Al estar prácticamente diseñados a medida del hardware, aprovechan al máximo las características del mismo. Dentro de este grupo se encuentran:

· El lenguaje maquina: este lenguaje ordena a la máquina las operaciones fundamentales para su funcionamiento.
Su desventaja es que son bastantes difíciles de manejar y usar, además de tener códigos fuente enormes donde encontrar un fallo es casi imposible.

· El lenguaje ensamblador: es un derivado del lenguaje máquina y está formado por abreviaturas de letras y números llamadas mnemotécnicos.
Las desventajas de este lenguaje siguen siendo prácticamente las mismas que las del lenguaje ensamblador, añadiendo la dificultad de tener que aprender un nuevo lenguaje difícil de probar y mantener.

 Lenguajes de alto nivel Son aquellos que se encuentran más cercanos al lenguaje natural que al lenguaje máquina. Están dirigidos a solucionar problemas mediante el uso de EDD's (Estructuras Dinámicas de Datos).

Son estructuras que pueden cambiar de tamaño durante la ejecución del programa. Nos permiten crear estructuras de datos que se adapten a las necesidades reales de un programa. Se tratan de lenguajes independientes de la arquitectura del ordenador.

Lenguajes de Medio nivel Estos lenguajes se encuentran en un punto medio entre los dos anteriores. Dentro de estos lenguajes podría situarse C ya que puede acceder a los registros del sistema, trabajar con direcciones de memoria, todas ellas características de lenguajes de bajo nivel y a la vez realizar operaciones de alto nivel.


HERRAMIENTAS;



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 fuentes de creación y modificación de textos de un editor de textos ordinarios, sino que también analiza el texto del programa, imponiendo al programa fuente una estructura jerárquica apropiada. Ejemplos:




Editores de C, Pascal, Visual Studio (Fox Pro, Basic, etc.).
mpresoras estéticas Una impresora estética 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 identificación proporcional a la profundidad de su anidamiento en la organización jerárquica de las proposiciones. EJEMPLOS: Word, Excel, Power Point, Photoshop, etc.

· Verificadores estáticos: Un verificador estático lee un programa, lo analiza e intenta descubrir errores potenciales sin ejecutar el programa. Ejemplos: Editores de C y Pascal. Verificadores estáticos de sintaxis (como lint) permiten detectar muchos errores antes de la compilación. (Algo parecido a lo que se obtiene con la opción -fsyntax- only del compilador de GNU).

· Intérpretes: Un intérprete realiza las operaciones que implica el programa fuente. Para una proposición de asignación, por ejemplo, un intérprete podría construir un árbol y después efectuar las operaciones de los nodos con forme “recorre” el árbol. Ejemplos: Los intérpretes (para lenguajes como Lisp o Basic, o para programas con sus propios lenguajes interpretados como Derive o Mathematica) Shells de sistemas operativos o de alguna aplicación como un SMBD.


http://slideshare.net/luyzmeyner/lenguajes-autmatas



● Reyes Castillo Blanca Estela





1.4.- 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. Ejemplos de traductores son los ensambladores y los compiladores.



En el proceso de traducción se identifican dos fases principales:

·        


Fase de análisis









·        


Fase de síntesis











Ensamblador.

El programa ensamblador es el programa que realiza la traducción de un programa escrito en ensamblador a lenguaje máquina. Esta traducción es directa e inmediata, ya que las instrucciones en ensamblador no son más que nemotécnicos de las instrucciones máquina que ejecuta directamente la CPU.

Tipos de ensambladores

Podemos distinguir entre tres tipos de ensambladores:




·         Ensambladores básicos. Son de muy bajo nivel, y su tarea consiste básicamente en ofrecer nombres simbólicos a las distintas instrucciones.

·         Ensambladores modulares, o macro ensambladores. Descendientes de los ensambladores básicos. Hacen todo lo que puede hacer un ensamblador, y además proporcionan una serie de directivas para definir e invocar macroinstrucciones.


·         Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits, realizan la misma tarea que los anteriores, permitiendo también el uso de macros, permiten utilizar estructuras de programación más complejas propias de los lenguajes de alto nivel.





Compilador



Un compilador es un programa informático que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, es decir programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (lenguaje máquina). Generando un programa equivalente a capaz de interpretar.

Componentes en que se divide un compilador:




Análisis Léxico. En esta fase se lee los caracteres del programa fuente y se agrupan en cadenas que representan los componentes léxicos. A la secuencia de caracteres que representa un componente léxico se le llama lexema (o con su nombre en inglés token).

Análisis Sintáctico. Los componentes léxicos se agrupan en frases gramaticales que el compilador utiliza para sintetizar la salida.

Análisis Semántico. Intenta detectar instrucciones que tengan la estructura sintáctica correcta, pero que no tengan significado para la operación implicada.

Generación de código Intermedio. Se puede considerar esta operación intermedia como un subprograma para una máquina abstracta, a esta representación debe tener dos propiedades importantes: debe ser fácil de producir y fácil de traducir al programa objeto.

Optimización de Código. Se trata de mejorar el código intermedio, de modo que resulte un código de máquina más rápido de ejecutar.

Generación de Código. Esta constituye la fase final de un compilador.
Administrador de la tabla de símbolos. Se encarga de manejar los accesos a la tabla de símbolos, en cada una de las etapas de compilación de un programa.

Manejador de errores. Es posible encontrar errores. 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.

●Rodríguez Medina Rodolfo.


1.5.- Fases de un compilador.




Los compiladores son programas de computadora que traducen de un lenguaje a otro. Un compilador toma como su entrada un programa escrito en lenguaje fuente y produce un programa equivalente escrito en lenguaje objeto.



Un compilador se compone internamente de varias etapas, o fases, que realizan operaciones lógicas. Es útil pensar en estas fases como piezas separadas dentro del compilador, y pueden en realidad escribirse como operaciones codificadas separadamente aunque en la práctica a menudo se integran.


--Análisis Léxico
– Análisis Sintáctico
– Análisis Semántico
 – Generación y Optimización de código intermedio
– Generación de código objeto
-tabla de símbolos

-gestor de errores



Analizador léxico: lee la secuencia de caracteres de izquierda a derecha del programa fuente y agrupa las secuencias de caracteres en unidades con significado propio.

• Las palabras clave, identificadores, operadores, constantes numéricas, signos de puntuación como separadores de sentencias, llaves, paréntesis, etc. , son diversas clasificaciones de componentes léxicos.

• Análisis sintáctico: determina si la secuencia de componentes léxicos sigue la sintaxis del lenguaje y obtiene la estructura jerárquica del programa en forma de árbol, donde los nodos son las construcciones de alto nivel del lenguaje.

•Análisis semántico: realiza las comprobaciones necesarias sobre el árbol sintáctico para determinar el correcto significado del programa.

• Generación y optimización de código intermedio: la optimización consiste en la calibración del árbol sintáctico donde ya no aparecen construcciones de alto nivel. Generando un código mejorado, ya no estructurado, más fácil de traducir directamente a código ensamblador o máquina, compuesto de un código de tres direcciones (cada instrucción tiene un operador, y la dirección de dos operándoos y un lugar donde guardar el resultado), también conocida como código intermedio.

• Generación de código objeto: toma como entrada la representación intermedia y genera el código objeto. La optimización depende de la máquina, es necesario conocer el conjunto de instrucciones, la representación de los datos (número de bytes), modos de direccionamiento, número y propósito de registros, jerarquía de memoria, encauzamientos, etc.


• Tabla de Símbolos: es una estructura tipo diccionario con operaciones de inserción, borrado y búsqueda, que almacena información sobre los símbolos que van apareciendo a lo largo del programa como son: – los identificadores (variables y funciones) – Etiquetas – tipos definidos por el usuario (arreglos, registros, etc.)

• Gestor de errores: detecta e informa de errores que se produzcan durante la fase de análisis. Debe generar mensajes significativos y reanudar la traducción.




Bibliografia:
Billhardt, H. (2015). Teoria de automatas y lenguajes formales .
Mata, S. G. (s.f.). Compiladores.
Serna, E. (s.f.). Fases de un compilador. Obtenido de http://www.paginasprodigy.com/edserna/cursos/compilador/notas/Notas1.pdf


●Santiago Reyes Edgarda





 INTEGRANTES EQUIPO ROJO

  • Martínez Bautista Marisa.
  • Pérez Melgarejo Maigualida
  • Reyes Castillo Blanca Estela.
  • Rodriguez Medina Rodolfo
  • Santiago Reyes Edgarda

                                       UNIDAD 4 4.1 Funciones del analizador léxico. Un analizador léxico aísla el analizador s...