18
LENGUAJES Y AUTÓMATAS 1 ING. DANIEL NERI RAMÍREZ Introducción a la teoría de lenguajes formales

Lenguajes y Automatas Unidad 1

Embed Size (px)

Citation preview

Page 1: Lenguajes y Automatas Unidad 1

LENGUAJES Y AUTÓMATAS 1ING. DANIEL NERI RAMÍREZ

Introducción a la teoría de lenguajes

formales

Page 2: Lenguajes y Automatas Unidad 1

TEMARIO

� 1.1 Alfabeto.

� 1.2 Cadenas.

� 1.3 Lenguajes

� 1.4 Tipos de lenguajes

� 1.5 Herramientas computacionales ligadas

� con lenguajes

� 1.6 Estructura de un traductor

� 1.7 Fases de un compilador

Page 3: Lenguajes y Automatas Unidad 1

CRITERIOS DE EVALUACIÓN

� Cuestionario 1 20% Semana 1

� Cuestionario II 20% Semana 4

� Exposición 20% Semana 2

� Ensayo 30% Semana 3

� Asistencia ypuntualidad 10% Semana 1-4

Page 4: Lenguajes y Automatas Unidad 1

LENGUAJE FORMAL

En matemáticas, lógica, y ciencias de la computación, un lenguaje formal es un lenguaje cuyos símbolos primitivos y reglas para unir esos símbolos están formalmente especificados. Al conjunto de los símbolos primitivos se le llama el alfabeto (o vocabulario) del lenguaje, y al conjunto de las reglas se lo llama la gramática formal (o sintaxis). A una cadena de símbolos formada de acuerdo a la gramática se la llama una fórmula bien formada (o palabra) del lenguaje. Estrictamente hablando, un lenguaje formal es idéntico al conjunto de todas sus fórmulas bien formadas. A diferencia de lo que ocurre con el alfabeto (que debe ser un conjunto finito) y con cada fórmula bien formada (que debe tener una longitud también finita), un lenguaje formal puede estar compuesto por un número infinito de fórmulas bien formadas.

Page 5: Lenguajes y Automatas Unidad 1

EJEMPLO

un alfabeto podría ser el conjunto {a,b}, y una gramática podría definir a las fórmulas bien formadas como aquellas que tienen el mismo número de símbolos a que b. Entonces, algunas fórmulas bien formadas del lenguaje serían: ab, ba, abab, ababba, etc.; y el lenguaje formal sería el conjunto de todas esas fórmulas bien formadas.

Page 6: Lenguajes y Automatas Unidad 1

EJEMPLOS DE LENGUAJES FORMALES

� Un conjunto de todas las palabras sobre {a,b}.

� La Numeración de Gödel {an : a es un número primo y n un número de Gödel}.

� El conjunto de todos los programas sintácticamente válidos en un determinado lenguaje de programación.

� El conjunto de todas las fórmulas bien formadas en la lógica de primer orden.

Page 7: Lenguajes y Automatas Unidad 1

CONCEPTOS FUNDAMENTALES DE LA TEORÍA DE AUTÓMATAS

Alfabetos� Un alfabeto es un conjunto de símbolos finito y no vacío. Convencionalmente, utilizamos el símbolo Σ para

� designar un alfabeto. Entre los alfabetos más comunes se incluyen los siguientes:

� 1. Σ={0,1}, el alfabeto binario.

� 2. Σ={a,b,...,z}, el conjunto de todas las letras minúsculas.

� 3. El conjunto de todos los caracteres ASCII o el conjunto de todos los caracteres ASCII imprimibles.

Page 8: Lenguajes y Automatas Unidad 1

CONCEPTOS FUNDAMENTALES DE LA TEORÍA DE AUTÓMATAS

Cadenas de caracteres� Una cadena de caracteres(que también se denomina en ocasiones palabra) es una secuencia finita de símbolos

seleccionados de algún alfabeto. Por ejemplo, 01101 es una cadena del alfabeto binario Σ= {0,1}. La cadena 111 es otra cadena de dicho alfabeto.

Page 9: Lenguajes y Automatas Unidad 1

CONCEPTOS FUNDAMENTALES DE LA TEORÍA DE AUTÓMATAS

Convenio de tipos para símbolos y cadenas

� Habitualmente, emplearemos las letras minúsculas del principio del alfabeto (o dígitos) para designar a

� los símbolos y las letras minúsculas del final del alfabeto, normalmente w, x, y y z, para designar cadenas.

� Debe intentar utilizar este convenio con el fin de recordar el tipo de elementos con los que está trabajando.

Page 10: Lenguajes y Automatas Unidad 1

LENGUAJES

Un conjunto de cadenas, 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 Σ. Observe que un lenguaje de Σ no necesita incluir cadenas con todos los símbolos de Σ, ya que una vez que hemos establecido que L es un lenguaje de Σ, también sabemos que es un lenguaje de cualquier alfabeto que sea un superconjunto de Σ. La elección del término “lenguaje” puede parecer extraña. Sin embargo, los lenguajes habituales pueden interpretarse como conjuntos de cadenas. Un ejemplo sería el inglés, donde la colección de las palabras correctas inglesas es un conjunto de cadenas del alfabeto que consta de todas las letras. Otro ejemplo es el lenguaje C, o cualquier otro lenguaje de programación, donde los programas correctos son un subconjunto de las posibles cadenas que pueden formarse a partir del alfabeto del lenguaje. Este alfabeto es un subconjunto de los caracteres ASCII. El alfabeto en concreto puede diferir ligeramente entre diferentes lenguajes de programación, aunque generalmente incluye las letras mayúsculas y minúsculas, los dígitos, los caracteres de puntuación y los símbolos matemáticos.

Page 11: Lenguajes y Automatas Unidad 1

HERRAMIENTAS COMPUTACIONALES LIGADASCON LENGUAJES

� Flex, versión 2.5 Un generador de analizadores léxicos rápidos.

http://es.tldp.org/Manuales-LuCAS/FLEX/flex-es-2.5.html

Page 12: Lenguajes y Automatas Unidad 1

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:

Page 13: Lenguajes y Automatas Unidad 1

FASE DE ANÁLISIS

Page 14: Lenguajes y Automatas Unidad 1

FASE DE SÍNTESIS

Page 15: Lenguajes y Automatas Unidad 1

ENSAMBLADORES

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.

Page 16: Lenguajes y Automatas Unidad 1

COMPILADORES

� 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.

Page 17: Lenguajes y Automatas Unidad 1

ESTRUCTURA DE UN COMPILADOR

Cualquier compilador debe realizar dos tareas principales: análisis del programa a compilar y síntesis de un programa en lenguaje maquina. Para el estudio de un compilador, es necesario dividir su trabajo en fases. Cada fase representa una transformación al código fuente para obtener el código objeto. En cada una de las fases se utiliza un administrador de la tabla de símbolos y un manejador de errores.

Page 18: Lenguajes y Automatas Unidad 1

COMPONENTES EN LOS 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 decompilació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.