Fase de compilación vs lenguajes formales vs autómatas2

27
FASE DE COMPILACIÓN VS LENGUAJES FORMALES VS AUTÓMATAS ING . EN SISTEMA S CO M PUTAC IONALES

description

lenguajes formales autómatas

Transcript of Fase de compilación vs lenguajes formales vs autómatas2

Page 1: Fase de compilación vs lenguajes formales vs autómatas2

FASE D

E COMPI

LACIÓ

N VS

LENGUAJE

S FORMALE

S VS

AUTÓMAT

AS

I NG

. E

N S

I ST

EM

AS

CO

MP

UT A

CI O

NA

L ES

Page 2: Fase de compilación vs lenguajes formales vs autómatas2

FASES DEL PROCESO DE COMPILACIÓN

conceptos básicos:

Lenguaje: Conjunto de símbolos y reglas que permiten la comunicación, es decir, trasmitir una idea, un mensaje.

Léxico (vocabulario): Conjunto de palabras que forman parte de un lenguaje específico.

Gramática: Agrupa los elementos de forma, estructura y significado que permiten expresarse en un lenguaje determinado.

Sintaxis: Conjunto de reglas necesarias para construir frases correctas en un lenguaje.

Page 3: Fase de compilación vs lenguajes formales vs autómatas2

FASES DEL PROCESO DE COMPILACIÓN

conceptos básicos:

Semántica: Significado de frases generadas por la sintaxis y el léxico.

Lenguaje de programación: Conjunto de símbolos y reglas que permiten la comunicación con un computador.

Lenguaje de alto nivel: Lenguaje que permite la comunicación de un computador mediante símbolos convencionales cercanos a un lenguaje natural.

Lenguaje de bajo nivel: Similar al lenguaje de máquina con pequeñas modificaciones nemotécnicas que facilitan su uso, por ejemplo el lenguaje ensamblador.

Page 4: Fase de compilación vs lenguajes formales vs autómatas2

COMPILADORES Y TRADUCTORES.

• Traductor es un programa que toma como entrada un programa escrito en un lenguaje de programación (lenguaje fuente) y produce como salida un programa en otro lenguaje (lenguaje objeto). El traductor se escribe en un lenguaje denominado lenguaje de implementación.

Cuando el lenguaje fuente es de alto nivel (Pascal, C++, etc.) y el lenguaje objeto es un lenguaje de bajo nivel o de máquina, al traductor se le denomina compilador.

Page 5: Fase de compilación vs lenguajes formales vs autómatas2

ESTRUCTURA DE UN COMPILADOR.

El trabajo de un compilador consiste en tomar la cadena fuente del programa, determinar si es sintácticamente válida y, a la vez, generar un programa equivalente en un lenguaje que la computadora entienda. El trabajo del compilador se puede dividir en diferentes partes:

• Análisis lexicológico (scanner)

• Análisis sintáctico (parser)

• Análisis semántico

• Generación de código intermedio

• Optimización de código intermedio

• Generación de código ejecutable

• Tabla de símbolos

• Gestión de errores

Page 6: Fase de compilación vs lenguajes formales vs autómatas2

FASES DE UN COMPILADOR

Page 7: Fase de compilación vs lenguajes formales vs autómatas2

ANALIZADOR LÉXICO (SCANNER)

Análisis Lineal: La cadena de entrada se lee de izquierda a derecha y se agrupa en componentes léxicos (tokens)

Secuencias de caracteres con un significado colectivo

Page 8: Fase de compilación vs lenguajes formales vs autómatas2

ANALIZADOR SINTÁCTICO

Análisis Jerárquico

Agrupa los componentes léxicos en frases gramaticales que el compilador utiliza

Page 9: Fase de compilación vs lenguajes formales vs autómatas2

ANALIZADOR SEMÁNTICO

Busca errores semánticos, reúne información de tipos; identifica operadores y operandos en base al árbol sintáctico producido en el análisis anterior

Page 10: Fase de compilación vs lenguajes formales vs autómatas2

OPTIMIZACIÓN Esta fase trata de mejorar el código intermedio, o las estructuras que generaran el

código definitivo de modo de que resulte un código de maquina más rápido de ejecutar para guardarlos valores calculados por cada instrucción.

Page 11: Fase de compilación vs lenguajes formales vs autómatas2

GENERADOR DE CÓDIGO

Esta fase final de un compilador. Genera el código objeto, que por lo general consiste en un código de maquina relocalizable o código ensamblador. Las posiciones de memoria relativas se seleccionan para cada variable. El uso de los registros de la CPU es relevante.

Page 12: Fase de compilación vs lenguajes formales vs autómatas2

LENGUAJES FORMALES

Un lenguaje formal es un conjunto (finito o infinito) de cadenas finitas de símbolos primitivos.

Noan Chomsky en los años 50, fue el creador de una jerarquía de lenguajes según las gramáticas que los generan. Esta gramática está organizada en base al poder generativo formal de la gramática y donde se destaca 4 tipos de gramáticas (denominados tipo 0, tipo 1, tipo 2 y tipo 3), cada una definida por la clase de reglas que contiene.

Page 13: Fase de compilación vs lenguajes formales vs autómatas2

LENGUAJES RECURSIVAMENTE ENUMERABLES (DE TIPO 0)

Un lenguaje recursivamente enumerable es un lenguaje formal para el cual existe una máquina de Turing que acepta y se detiene con cualquier cadena del lenguaje. Pero que puede parar y rechazar, o bien iterar indefinidamente, con una cadena que no pertenece al lenguaje, en contraposición a los lenguajes recursivos en cuyo caso se requiere que la máquina de Turing pare en todos los casos.

Todos los lenguajes regulares, independientes de contexto, dependientes de contexto y recursivos son recursivamente enumerables.

Page 14: Fase de compilación vs lenguajes formales vs autómatas2

LENGUAJES RECURSIVAMENTE ENUMERABLES (DE TIPO 0)Propiedades de cierre:

Los lenguajes recursivamente enumerables son cerrados con las siguientes operaciones. Esto es, si L y P son dos lenguajes recursivamente enumerables, entonces los siguiente lenguajes son recursivamente enumerables también:

• El cierre estrella L* de L

• La concatenación L P de L y P

• La unión L U P de L y P

• La intersección L ∩ P de L y P

Nótese que los lenguajes recursivamente enumerables no son cerrados con la diferencia ni el complementario.

L \ P puede no ser recursivamente enumerable

L es recursivamente enumerable si y solo si L es también recursivo.

Page 15: Fase de compilación vs lenguajes formales vs autómatas2

LENGUAJES DEPENDIENTES DEL CONTEXTO (SENSIBLES AL CONTEXTO, DE TIPO 1) El lenguaje sensible al contexto es un lenguaje formal que puede ser

definido por gramáticas sensibles al contexto. Es uno de los cuatro tipos de gramáticas en la jerarquía de Chomsky, siendo esta gramática la menos frecuente, tanto en la teoría como en la práctica.

Propiedades:

• La unión, intersección, y concatenación de dos Lenguajes sensibles al contexto es un lenguaje sensible al contexto.

• El complemento de un lenguaje sensible al contexto es en si mismo sensible al contexto.

• Cada gramática libre de contexto es un lenguaje sensible al contexto.

• La composición de una cadena en un lenguaje definido por una gramática sensible al contexto arbitraria, o por una gramática determinista sensible al contexto arbitraria, es un problema PSPACE-completo.

Page 16: Fase de compilación vs lenguajes formales vs autómatas2

LENGUAJES INDEPENDIENTES DEL CONTEXTO (LIBRES DE CONTEXTO, DE TIPO 2) Gramática libre de contexto

Una gramática libre de contexto (o de contexto libre) es una gramática formal en la que cada regla de producción es de la forma:

V → w

Donde V es un símbolo no terminal y w es una cadena de terminales y/o no terminales. El término libre de contexto se refiere al hecho de que el no terminal V puede siempre ser sustituido por w sin tener en cuenta el contexto en el que ocurra. Un lenguaje formal es libre de contexto si hay una gramática libre de contexto que lo genera.

Page 17: Fase de compilación vs lenguajes formales vs autómatas2

LENGUAJES INDEPENDIENTES DEL CONTEXTO (LIBRES DE CONTEXTO, DE TIPO 2)Las gramáticas libres de contexto permiten describir la mayoría de los lenguajes de programación, de hecho, la síntaxis de la mayoría de lenguajes de programación está definida mediante gramáticas libres de contexto. Por otro lado, estas gramáticas son suficientemente simples como para permitir el diseño de eficientes algoritmos de análisis sintáctico que, para una cadena de caracteres dada determinen cómo puede ser generada desde la gramática. Los analizadores LL y LR tratan restringidos subconjuntos de gramáticas libres de contexto.

Definición formal

Así como cualquier gramática formal,

una gramática libre de contexto puede

ser definida mediante la 4-tupla:

Page 18: Fase de compilación vs lenguajes formales vs autómatas2

LENGUAJE REGULAR

Un lenguaje regular es un tipo de lenguaje formal que satisface las siguientes propiedades:

Los lenguajes más sencillos que se considerarán son los lenguajes regulares, es decir, los que se pueden generar a partir de los lenguajes básicos, con la aplicación de las operaciones de unión, concatenación y * de Kleene un número finito de veces.

Page 19: Fase de compilación vs lenguajes formales vs autómatas2

AUTÓMATAS

En el campo de los Traductores, Procesadores y Compiladores, lo fundamental es la simulación de procesos para tratar información. La información se codifica en cadenas de símbolos.

Un autómata es un dispositivo que manipula cadena de símbolos que se presentan a su entrada, produciendo otras tiras o cadenas de símbolos a su salida

Page 20: Fase de compilación vs lenguajes formales vs autómatas2

AUTÓMATAS FINITOS

Un autómata finito es un conjunto de nodos y aristas que representan trayectorias para generar una expresión bajo un alfabeto. Un diagrama de transición es un autómata finito.

La autómata finita se clasifica en:

Autómatas finitos no determinísticos. NFA

Autómatas finitos determinísticos. DFA

Page 21: Fase de compilación vs lenguajes formales vs autómatas2

AUTÓMATAS FINITOS NO DETERMINÍSTICOS. NFA

Un NFA es un modelo matemático que consiste de:

1.- Un conjunto de estados.

2.- Un conjunto de símbolos de entrada.

3.- Una función de transición que corresponde pares estado-símbolo a conjuntos de estados.

4.- Un estado So que denota como el estado inicial.

5.- Un conjunto de estados F que denotan los estados de aceptación o finales.

Page 22: Fase de compilación vs lenguajes formales vs autómatas2

AUTÓMATAS A PILA

Un autómata con pila, autómata a pila o autómata de pila es un modelo matemático de un sistema que recibe una cadena constituida por símbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce. El lenguaje que reconoce un autómata con pila pertenece al grupo de los lenguajes libres de contexto en la clasificación de la Jerarquía de Chomsky.

Page 23: Fase de compilación vs lenguajes formales vs autómatas2

AUTÓMATAS LINEALMENTE ACOTADOS

Un autómata linealmente acotado es una máquina de Turing cuya cinta está formada solamente por celdas de kn de largo, donde la longitud n es la secuencia de la entrada y k es una constante asociada al autómata linealmente-acotado particular, es decir la cantidad de cinta que el autómata permite usar se limita por un factor lineal k para que cuando entre una palabra de tamaño n (los símbolos de n) , la máquina determine si la palabra es aceptable, o si la palabra está en el lenguaje del autómata.

Page 24: Fase de compilación vs lenguajes formales vs autómatas2

MÁQUINA DE TURING

Es un modelo matemático que consiste en un autómata capaz de implementar cualquier problema matemático expresado por medio de un algoritmo.

Es un autómata que se mueve sobre una secuencia lineal de datos. En cada instante la máquina puede leer un solo dato de la secuencia (generalmente un carácter) y realiza ciertas acciones en base a una tabla que tiene en cuenta su "estado" actual (interno) y el último dato leído. Entre las acciones está la posibilidad de escribir nuevos datos en la secuencia; recorrer la secuencia en ambos sentidos y cambiar de "estado" dentro de un conjunto finito de estados posibles.

Page 25: Fase de compilación vs lenguajes formales vs autómatas2

Fases de la compilación

Consisten en la traducción 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 máquina directamente ejecutable.

Fase de análisis

Fase síntesis

El análisis léxico constituye la primera fase, aquí se lee el programa fuente de izquierda a derecha y se agrupa en componentes léxicos (tokens), que son secuencias de caracteres que tienen un significado.

Por ejemplo, identificadores, palabras reservadas, signos de final de instrucción. Cada componente es asociada a la categoría que pertenece.

 Realiza un análisis jerárquico agrupado de los componentes léxicos en frases gramaticales que el compilador utiliza.

El análisis semántico verifica que el árbol sintáctico tenga un significado válido dentro de las reglas semánticas del lenguaje.

 

Analizador semántico

En una asignación, el tipo de la variable concuerde con el tipo de la expresión asignada.

Que los subíndices se apliquen a variables tipo arreglo y no a otras.

Que las variables estén declaradas antes de ser usadas.

Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explícita del programa fuente. Se puede considerar esta representación intermedia como un programa para una máquina abstracta

Esta fase trata de mejorar el código intermedio, o las estructuras que generaran el código definitivo de modo de que resulte un código de maquina más rápido de ejecutar para guardarlos valores calculados por cada instrucción.

Optimización de código

Fácil de producir Fácil de traducir al

programa objeto

Lenguaje formal

Un lenguaje formal es un conjunto (finito o infinito) de cadenas finitas de símbolos primitivos

Alfabeto Gramáti

ca Chomsky clasificó jerárquicamente las gramáticas formales que generan lenguajes formales, en estos tipos:

El alfabeto es un conjunto finito no vacío de símbolos

La gramática es un conjunto finito de reglas para formar cadenas finitas juntando símbolos del alfabeto

Tipo 0: Gramáticas libres que generan lenguajes sin ningún tipo de restricción

Tipo 1: Gramáticas contextuales que generan lenguajes contextuales

Tipo 2: Gramáticas incontextuales que generan lenguajes

incontextualesTipo 3: Gramáticas regulares que generan lenguajes regulares incontextuales

Se han desarrollado como un medio para formalizar matemáticamente una teoría;

Su sintaxis es capaz de definir oraciones rigurosamente definidas;

Constituyen un poderoso instrumento para la investigación y el procesamiento del Lenguaje Natural por computadora.

Cuadro sinóptico de las fases de la compilación vs lenguajes formales vs autómatas

Page 26: Fase de compilación vs lenguajes formales vs autómatas2

Autómatas

En el campo de los Traductores, Procesadores y Compiladores, lo fundamental es la simulación de procesos para tratar información. La información se codifica en cadenas de símbolos. Un autómata es un dispositivo que manipula cadena de símbolos que se presentan a su entrada, produciendo otras tiras o cadenas de símbolos a su salida

Autómatas FinitosUn autómata finito es un conjunto de nodos y aristas que representan trayectorias para generar una expresión bajo un alfabeto. Un diagrama de transición es un autómata finito.

Autómatas finitos no determinísticos. NFA

 Un NFA es un modelo matemático que consiste de: 1.- Un conjunto de estados. 2.- Un conjunto de símbolos de entrada.

3.- Una función de transición que corresponde pares estado-símbolo a conjuntos de estados.

4.- Un estado So que denota como el estado inicial.

5.- Un conjunto de estados F que denotan los estados de aceptación o finales.

Autómatas finitos determinísticos. DFA

Un DFA es un caso especial de NFA en el que ningún estado tiene transiciones para diversos estados bajo el mismo símbolo no se permiten transiciones épsilon.

Autómatas a Pila

Un autómata con pila, autómata a pila o autómata de pila es un modelo matemático de un sistema que recibe una cadena constituida por símbolos de un alfabeto y determina si esa cadena pertenece al lenguaje que el autómata reconoce.

Autómatas linealmente acotados

Un autómata linealmente acotado es una máquina de Turing cuya cinta está formada solamente por celdas de kn de largo, donde la longitud n es la secuencia de la entrada y k es una constante asociada al autómata linealmente-acotado particular, es decir la cantidad de cinta que el autómata permite usar se limita por un factor lineal k para que cuando entre una palabra de tamaño n (los símbolos de n) , la máquina determine si la palabra es aceptable, o si la palabra está en el lenguaje del autómata.

Máquina de Turing

Es un modelo matemático que consiste en un autómata capaz de implementar cualquier problema matemático expresado por medio de un algoritmo.

Page 27: Fase de compilación vs lenguajes formales vs autómatas2

REFERENCIAS BIBLIOGRÁFICAS[1] J. Glenn Brookshear. Theory of Computation. Formal Languages, Automata, and Complexity,

The Benjamin/Cummings Publishing Company, Inc. 1989

[2] J. E. Hopcroft, R. Motwani, J. D. Ullman. Introducción a la Teoría de Autómatas, Lenguajes y Computación. Addison Wesley Longman, Pearson Education Company, Segunda Edición 2001.

[3] John C. Martin. Introduction to Languages and the theory of Computation. WCB/McGraw-Hill, Second Edition. 1996.

[4] Michael Sipser. Introduction to the theory of Computation. PWS Publishing Company, 1997.

[5] Dean Kelly. Teoría de Autómatas y Lenguajes Formales. Prentice-Hall, 1998.

[6] Pedro García, Tomás Pérez, etc. Teoría de Autómatas y Lenguajes Formales. Alfa omega Grupo Editor. 2001. Matemáticas

[7] H. Contreras: Los fundamentos de la gramática transformacional, México, siglo XXI, 1971.

[8] J. Nivette: Principios de gramática generativa. Madrid, Fragua, 1973.

[9] Vidal Lamiquiz, Lingüística Española. Publicaciones de la Universidad de Sevilla, 1973.