Lenguajes y Automatas 1 Unidad 1

También podría gustarte

Está en la página 1de 39

Lenguajes y Autómatas 1

I.S.C. Jorge Miguel Vázquez Márquez


miguel_007vm@Hotmail.com
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 unisomorfismo
entre 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.

También podría gustarte