39
Lenguajes y Autómatas 1 I.S.C. Jorge Miguel Vázquez Márquez [email protected]

Lenguajes y Autómatas 1 Unidad 1

Embed Size (px)

Citation preview

Lenguajes y Autómatas 1I.S.C. Jorge Miguel Vázquez Márquez

[email protected]

Unidad 1. Introducción a la Teoría de

Lenguajes Formales.

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

El porqué de la Teoría de Autómatas

Disciplinas de la Computación según La “Educational Activities Board Of

IEEE”:

El porqué de la Teoría de Autómatas

El porqué de la Teoría de Autómatas

Primera inmersión en la “Teoría de la Computación”:

Es anterior al invento del Computador (incluso del transistor)

Propiedades MATEMÁTICAS FUNDAMENTALES de Software, Hardware y aplicaciones de los mismos. Responder a preguntas como:

¿Cómo puede construirse un programa para resolver un problema?

¿Resuelve el programa realmente el problema?

Cuánto se tarda en realizar un cómputo (complejidad temporal).

Cuanta memoria se necesita para realizar el computo (complejidad espacial).

Y el “modelo de computación” (ImperaDvo, POO, Programación. Lógica, etc.)

Qué se puede computar y qué NO se puede computar.

El porqué de la Teoría de Autómatas

El porqué de la Teoría de Autómatas

El porqué de la Teoría de Autómatas

Conceptos Basicos

• Lenguaje:

– Forma de representar información basada en un conjunto

finito de signos o símbolos

• Alfabeto:

– Conjunto de símbolos que forman parte de un lenguaje

• Sentencia o palabra o fórmula bien formada:

– Secuencia de símbolos correcta.

• Lenguaje formal:

– Lenguaje descrito mediante un formalismo matemático

Otras definiciones

Los conceptos básicos de símbolos, palabras, alfabetos y strings son comunes en la mayoría de las descripciones de los autómatas. Estos son:

Símbolo

Un dato arbitrario que tiene algún significado a o efecto en la máquina. A estos símbolos también se les llama "letras" o "átomos".

Palabra

Una cadena finita formada por la concatenación de un número de símbolos.

Alfabeto

Conjunto finito de símbolos. Un alfabeto se indica normalmente con ∑ , que es el conjunto de letras en un alfabeto.

Lenguaje

Un conjunto de palabras, formado por símbolos en un alfabeto dado. Puede ser infinito.

Alfabeto

Un alfabeto es un conjunto finito y no vacío de elementos llamados símbolos o letras.

Una palabra o cadena sobre un alfabeto V es una cadena finita 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 único elemento es la palabra vacía, es decir, V0 = {λ}.

V∗ denota al conjunto de todas las cadenas de cualquier longitud sobre V.

V+ denota al conjunto de todas las cadenas de cualquier longitud sobre V, excepto la vacía.

Un elemento de Vn es una cadena del tipo a1a2 ...an donde cada ai ∈ V.

Cadenas, Alfabetos y Lenguajes

Las principales ideas matemáticas necesarias para la compresión a la Teoría de Autómatas son

conceptos que incluyen grafos, árboles, conjuntos, relaciones, cadenas, lenguajes abstractos e

inducción matemática. Un "símbolo" es una entidad abstracta. Las letras y los dígitos son ejemplos

de símbolos usados con frecuencia. Una cadena (o palabra) es una secuencia finita de símbolos

yuxtapuestos. Por ejemplo a, b y c son símbolos y casa es una cadena. La longitud de una cadena

w que se denota como |w|, es el número de símbolos que componen la cadena.

Por ejemplo casa tiene una longitud 4.

Habitualmente, se emplean 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.

Cadenas, Alfabetos y Lenguajes

La cadena vacía, denotada por E es aquella que presenta cero

apariciones de símbolos, es una cadena que puede construirse en

cualquier alfabeto.

La concatenación de dos cadenas es la cadena que se forma al escribir

la primera seguida de la segunda, sin que haya espacio entre ellas, Por

ejemplo la concatenación de padre y madre es padremadre. La

yuxtaposición se utiliza como el operador de concatenación. Esto es si w y x

son cadenas, entonces wx es la concatenación de estas dos cadenas. La

cadena vacía es la identidad para el operador de concatenación, es

decir Ew=wE para cada cadena de w.

Un alfabeto es un conjunto de símbolos finito y no vacío.

Convencionalmente se utiliza el símbolo S para designar un alfabeto.

Cadenas, Alfabetos y Lenguajes

Un lenguaje es un conjunto de cadenas, todas ellas seleccionadas de un S* donde S es un determinado

alfabeto

El conjunto vacío Ø y el conjunto formado por la cadena vacía { E } son lenguajes.

El conjunto de palíndromos (cadenas que se leen igual de izquierda a derecha y viceversa) sobre

el alfabeto {0,1} es un lenguaje infinito. Algunos elementos de este lenguaje son E,0,1, 00, 01,010, y 1101011.

Por consiguiente vemos que el conjunto de todos los palíndromos sobre una colección finita de símbolos

no es, técnicamente hablando, un lenguaje, porque sus cadenas no se construyen colectivamente a partir de

un alfabeto.

Otro lenguaje es el conjunto de cadenas sobre un alfabeto fijo S Denotamos a este lenguaje como S*

Por ejemplo:

Si S = {a}, entonces S* = {E, a, aa, aaa,...}.

Si S = {0,1}, entonces S* = {E,0,1,00,01,10,11,000,...}

Cadenas, Alfabetos y Lenguajes

Como comentamos anteriormente el asterísco (*) representa cualquier

número de apariciones de la expresión anterior.

En la teoría de autómatas, un problemas es la cuestión de decidir si una

determinada cadena es un elemento de un determinado lenguaje.

Cualquier cosa que coloquialmente denominamos "problema" podemos

expresarlo como lenguaje. De manera precisa, si S es un alfabeto y L es un

lenguaje de S, entonces el problema de L es:

Data una cadena w de S*, decidir si w pertenece o no a L

Lenguajes

En matemáticas, lógica, y las ciencias computacionales, un lenguaje

formal es un conjunto de palabras (cadenas de caracteres) de longitud

finita formadas a partir de un alfabeto (conjunto de caracteres) finito.

Informalmente, el término lenguaje formal se utiliza en muchos contextos

(en las ciencias, en derecho, etc.) para referirse a un modo de expresión

más cuidadoso y preciso que el habla cotidiana. Hasta finales de la

década de 1990, el consenso general era que un lenguaje formal, era en

cierto modo la versión «límite» de este uso antes mencionado: un lenguaje

tan formalizado que podía ser usado en forma escrita para describir

métodos computacionales. Sin embargo, hoy en día, el punto de vista de

que la naturaleza esencial de los lenguajes naturales (sin importar su grado

de «formalidad» en el sentido informal antes descrito) difiere de manera

importante de aquella de los verdaderos lenguajes formales, gana cada

vez más adeptos.

Tipos de Lenguajes

Llamamos lenguaje sobre el alfabeto V a cualquier subconjunto de V.

Especificación de lenguajes:

Extensión (lenguajes finitos)

L = fa; aa; aaag es un lenguaje sobre el alfabeto V = fag

L = faba; cab; aaabcg es un lenguaje sobre el alfabeto V = fa; b; cg

Comprensión (lenguajes infinitos)

L = fa(bc)njn >= 1g

Tipos de Lenguajes

Chomsky clasificará los lenguajes formales de acuerdo a una jerarquía de

cuatro niveles, conteniendo cada uno de todos los siguientes.

El lenguaje más general será, pues, de tipo 0,y no posee restricción alguna.

Este conjunto engloba el conjunto de todos los lenguajes posibles.

En el segundo nivel aparecen los lenguajes de tipo1,también llamados

lenguajes “sensibles al contexto”, al permitir que el “papel” de las palabras

dependa de la posición en que aparezcan(es decir, del contexto).La

mayor parte de los lenguajes de ordenador pertenecen a este tipo.

En tercer lugar aparecen los lenguajes de tipo 2, o lenguajes

“independientes del contexto”. En ellas el significado de una palabra es

independiente del lugar que ocupa en la frase.

Finalmente, los lenguajes de tipo 3,o lenguajes regulares, son los que

presentan una estructura más sencilla.

Tipos de Lenguajes Resulta curioso observar como paralelamente a la jerarquía de lenguajes

aparece otra de máquinas abstractas equivalentes, como se observa en el esquema siguiente:

Cada uno de estos tipos de máquinas es capaz de resolver problemas cada vez más complicados, hasta llegar a las máquinas de Turing. Como descubrió Turing, existen una serie de problemas que no son computacionalmente abordables y que reciben el nombre de “problemas no enumerables”.

La relación estrecha entre la Teoría de Lenguajes Formales y la Teoría de Autómatas se pone de manifiesto en este tema. Se establece unisomorfismoentre ambas, estableciendo una conexión entre la clase de lenguajes generados por ciertos tipos de gramáticas y la clase de lenguajes reconocibles por ciertas máqinas.

Los lenguajes del tipo 0 con los lenguajes reconocidos por una máquina de Turing,

Los lenguajes de tipo 1 con los Autómatas Linealmente Acotados,

Los lenguajes de tipo 2 con los Autómatas a Pila

Los lenguajes de tipo 3 con los Autómatas Finitos, los Autómatas Probabilísticos y los Autómatas de Células de McCulloch-Pitts.

•Cada uno de estos tipos/máquinas añade restricciones al tipo/máquina del nivel superior.

Herramientas computacionales

ligadas con lenguajes

básicamente son las siguientes:

1- Diagramas Funcionales.

2- Interpretación de Datos.

3- Bases de Datos.

4- Algoritmos.

5- Seudo-códigos.

(Realizar cuadros comparativos entre estas herramientas)

¿Qué es un Traductor?

Un traductor es un mediador entre dos entidades: emisoras y

receptoras, los mediadores enmascaran la complejidad y

heterogeneidad de los lenguajes.

Un traductor convierte un lenguaje de entrada (código fuente) a

una de salida (código objeto).

Ensambladores

Ensamblador se refiere a un tipo de programa, informático

que se encarga de traducir un fichero fuente escrito en un

lenguaje ensamblador, a un fichero objeto que contiene

código máquina ejecutable directamente por la máquina

para la que se ha generado.

Ejemplos: MASM

Función De Un Ensamblador:

La tarea fundamental de un ensamblador es

traducir un programa en lenguaje de

ensamblador al código correspondiente en

lenguaje de máquina.

.

MOTIVOS PARA USAR ENSAMBLADOR

Mayor control de la computadora.

Independencia de lenguaje.

La mayoría de las computadoras pueden

ensamblar.

Los programas hechos en lenguaje

ensamblador son generalmente más

rápidos y consumen menos recursos del

sistema.

MOTIVOS PARA NO UTILIZAR

Demasiado complejo.

Comprensión más profunda de la computadora.

Errores más frecuentes en el programa.

Mayor tiempo de codificación.

Difícilmente portable, es decir, un código escrito para un

microprocesador en particular necesita ser modificado

muchas veces en su totalidad para poder ser usado en otro

microprocesador.

Tipos de Ensambladores

ENSAMBLADORES CRUZADOS: Se denominan así a los

ensambladores que se utilizan en una computadora que

posee el procesador diferente al que tendrán las

computadoras donde se va a ejecutar el programa objeto

producido.

ENSAMBLADORES RESIDENTES: Son aquellas que permanecen

en la memoria principal de la computadora y cargar para su

ejecución al programa objeto producido.

MICRO ENSAMBLADORES: Al programa que indica al

intérprete de instrucciones de la CPU como debe actuar se le

denomina microprograma. El programa que ayuda a realizar

este microprograma se llama micro ensamblador.

MACRO ENSAMBLADORES: Son ensambladores que permiten

el uso de macroinstrucciones.

ENSAMBLADORES DE UNA FASE: leen una línea y la traducen

directamente para producir una instrucción de lenguaje

maquina o la ejecuta si se trata de una pseudosinstrucción. Se

construye la tabla de símbolos a medida que aparecen las

definiciones de variables, etiquetas, etc.

ENSAMBLADORES DE DOS FASES: Realiza la traducción en dos

etapas: 1° fase leen el programa fuente y construyen la tabla

de símbolos, 2° fase vuelve a leer el programa fuente y

pueden ir traduciendo totalmente pues reconocen la

totalidad de los símbolos.

Compiladores

Un compilador es querer traducir un programa de un

lenguaje de alto nivel, a otro lenguaje de nivel inferior

(típicamente lenguaje máquina).

Los compiladores son programas o herramientas encargadas

de compilar. Un compilador toma un texto (código fuente)

escrito en un lenguaje de alto nivel y lo traduce a un lenguaje

comprensible por las computadoras (código objeto).

Fases del Compilador

CLASIFICACIÓN DE COMPILADORES

DE UNA PASADA: Examina el código fuente una vez,

generando el código o programa objeto.

PASADAS MÚLTIPLES: Requiere pasos intermedios para

producir código en otro lenguaje y una pasada final para

producir y optimizar el código producido durante pasos

anteriores.

COMPILADORES INCREMENTALES: Generan un código objeto,

instrucción por instrucción cuando el usuario teclea cada

orden individual.

COMPILADOR CRUZADO: Se genera código en lenguaje

objeto para una maquina diferente a la que se esta utilizando

para compilar.

COMPILADOR CON MONTADOR: Compila distintos módulos

de forma independiente y después es capaz de aplazarlos.

AUTO COMPILADORES: Compilador que esta escrito en el mismo

lenguaje que va a compilar.

META COMPILADOR: Es programa que recibe como entrada las

especificaciones del lenguaje para el que se desea obtener un

compilador y genera como salida el compilador para ese

lenguaje.

DESCOMPILADOR: Es un programa que acepta como entrada

código maquina y la traduce a un lenguaje de alto nivel

realizando el proceso inverso a la compilación.

1.4.3 Interpretes

Un intérprete es un programa capaz de analizar y ejecutar

otros programas, escritos en un lenguaje de alto nivel. Los

intérpretes suelen contraponerse a los compiladores, ya que

mientras que los segundos se encargan de traducir un

programa desde su descripción en un lenguaje de

programación al código máquina del sistema destino, los

primeros sólo realizan la traducción a medida que sea

necesario y normalmente, no guardan el resultado de dicha

traducción.

JavaScript, BASIC, LISP, Smalltalk y Python son ejemplos de

lenguajes que son normalmente interpretados en vez de

compilados.

El intérprete tiene estas características

Traduce y ejecuta una línea del programa a la vez.

Si hay error, detiene ejecución del programa

Programas más lentos pero más portables y flexibles

Conclusiones Gran parte del temario se basará en problemas que tienen que ver con el

procesamiento del lenguaje, por tanto, se repasa la terminología y algunos de los conceptos asociados al proceso de traducción.

Se establecen los términos de lenguaje formal, definidos por reglas preestablecidas, y de lenguaje natural, no cuentan con reglas gramaticales formales.

Así, el estudio de los lenguajes se reduce al análisis de la estructura de las frases (Gramática)y del significado de las mismas(Semántica).

A su vez, la Gramática puede analizar las formas que toman las palabras(Morfología),su combinación para formar frases correctas(Sintaxis),y las propiedades del lenguaje hablado(Fonética)(única no aplicable a los lenguajes de ordenador).

–Para realzar el papel de la gramática en el proceso de traducción se indican los componentes básicos de que consta compilador para un determinado lenguaje de programación: análisis léxico, análisis sintáctico y generación de código.