INSTITUTO TECNOLÓGICO DE TLÁHUAC Ingeniería Mecatrónica Materia: PROGRAMACIÓN EN TIEMPO REAL UNIDAD 4: LENGUAJES Y AUTÓMATAS Grupo: 8M2 Integrantes Equipo 1: Alcántara Gutiérrez Fanny Gómez Escobar Jorge Arnulfo López Jiménez Violeta Martínez Martínez Luis Velázquez De La Rosa Iván Profesor: Ing. Romualdo Jonatan Quintero Hernández México, D.F., a 02 de Mayo de 2013.
Información relacionada con los lenguajes para programación y su representación para automatas
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Los términos más importantes empleados en la teoría de autómatas son:
“alfabeto” (un conjunto de símbolos), “cadenas de caracteres” (una lista de símbolos de un alfabeto) y “lenguaje” (un conjunto de cadenas de caracteres de un mismo alfabeto).
Alfabetos
Un alfabeto es un conjunto de símbolos finito y no vacío. Convencionalmente, utilizamos el símbolo Σ (sigma) 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.
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.
La Cadena Vacía
La cadena vacía es aquella cadena que presenta cero apariciones de símbolos.
Esta cadena, designada por ε (épsilon) o λ (lambda), es una cadena que puede construirse en cualquier alfabeto.
Longitud de una Cadena
Suele ser útil clasificar las cadenas por su longitud, es decir, el número de posiciones ocupadas por símbolos dentro de la cadena. Por ejemplo, 01101 tiene una longitud de 5.
Es habitual decir que la longitud de una cadena es igual al “número de símbolos” que contiene; esta proposición está aceptada coloquialmente, sin embargo, no es estrictamente correcta. Así, en la cadena 01101 sólo hay dos símbolos, 0 y 1, aunque tiene cinco posiciones para los mismos y su longitud es igual a 5. Sin embargo, generalmente podremos utilizar la expresión “número de símbolos” cuando realmente a lo que se está haciendo referencia es al “número de posiciones”.
La notación estándar para indicar la longitud de una cadena w es |w|. Por ejemplo, |011|=3 y |ε|= 0.
Si Σ es un alfabeto, podemos expresar el conjunto de todas las cadenas de una
determinada longitud de dicho alfabeto utilizando una notación exponencial. Definimos
para que sea el conjunto de las cadenas de longitud k, tales que cada uno de los símbolos de las mismas pertenece a Σ.
EJEMPLO
Observe que = {ε}, independientemente de cuál sea el alfabeto Σ. Es decir, εes la
única cadena cuya longitud es 0.
Si Σ={0,1}, entonces Σ1={0,1}, Σ={00,01,10,11}, Σ={000,001,010,011,100,101,110,111},
etc.
Observe que existe una ligera confusión entre Σy Σ. Lo primero es un alfabeto; sus elementos 0 y 1 son los símbolos. Lo segundo es un conjunto de cadenas; sus elementos son las cadenas 0 y 1, cuya longitud es igual a 1. No vamos a utilizar notaciones
diferentes para los dos conjuntos, confiando en que el contexto deje claro si {0,1} o algún
otro conjunto similar representa un alfabeto o un conjunto de cadenas.
Por convenio, el conjunto de todas las cadenas de un alfabeto Σse designa mediante Σ.
Por ejemplo, {0,1}* = {ε, 0, 1, 00, 01, 10, 11, 000,…}. Expresado de otra forma,
Σ= Σ0 U Σ1 U Σ2 U…U Σn
En ocasiones, desearemos excluir la cadena vacía del conjunto de cadenas. El conjunto
de cadenas no vacías del alfabeto Σse designa como Σ+. Por tanto, dos equivalencias apropiadas son:
Σ+= Σ1 U Σ2 U Σ3 U… U Σn.
Σ*= Σ+ U {ε}.
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 Σ.
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.
Algunos ejemplos son los siguientes:
1) El lenguaje de todas las cadenas que constan de n ceros seguidos de n unos para cualquier n ≥ 0: {ε, 01, 0011, 000111,…}.
2) El conjunto de cadenas formadas por el mismo número de ceros que de unos: {ε, 01, 10, 0011, 0101, 1001,…}
3) El conjunto de números binarios cuyo valor es un número primo: {10, 11, 101, 111, 1011,…}
4) Σ* es un lenguaje para cualquier alfabeto Σ. 5) Ø, el lenguaje vacío, es un lenguaje de cualquier alfabeto. 6) {ε}, el lenguaje que consta sólo de la cadena vacía, también es un lenguaje de
cualquier alfabeto. Observe que Ø ≠ {ε}; el primero no contiene ninguna cadena y el segundo sólo tiene una cadena.
La única restricción importante sobre lo que puede ser un lenguaje es que todos los alfabetos son finitos. De este modo, los lenguajes, aunque pueden tener un número infinito de cadenas, están restringidos a que dichas cadenas estén formadas por los símbolos que definen un alfabeto finito y prefijado.
4.2 CIRCUITOS SECUENCIALES Y MÁQUINAS DE ESTADO FINITO
Circuitos Secuenciales
Los sistemas digitales que introducen la dependencia temporal son conocidos como sistemas secuenciales. Una definición más rigurosa de sistema secuencial puede ser la siguiente:
Un circuito de conmutación secuencial se define como un circuito bivaluado en el cual, la salida en cualquier instante depende de las entradas en dicho instante y de la historia pasada (o secuencia) de entradas.
Sistemas combinacionales: la salida depende solamente de lo que haya en las entradas en ese instante.
Sistemas secuenciales: La salida depende de los valores de las entradas en ese instante y también de los
valores que tuvieron en los instantes anteriores Circuitos que “recuerdan” o tienen memoria de las situaciones de interés por las
que ha pasado el sistema, a las situaciones se denominan estados. Variables de estado: en cada caso concreto definen los estados a recordar.
Sistema Secuencial
La forma de operar de un sistema secuencial
A. Operación secuencial del sistema: dado un estado y una entrada el sistema produce una salida y el estado siguiente:
B. Se describe mediante un diagrama de estados (Secuencia de grafos) por los que
pasa el circuito como consecuencia de las sucesivas entradas y las salidas que produce.
Sólo se observa el sistema durante el pulso de reloj marcapasos.
El reloj establece cuando se modifica el estado (no la salida: sistemas Mealy).
Sistemas asíncronos:
El sistema es permanentemente activo.
Un cambio en alguna de las entradas del sistema: induce un transitorio que evoluciona hasta el siguiente estado.
ESTRUCTURA GENERAL DE UN SISTEMA SECUENCIAL SÍNCRONO
Dos bloques básicos: en coincidencia con el pulso de reloj
Un bloque combinacional que : Lee las variables de entrada y de estado. Genera las funciones booleanas de salida y de excitación.
Un bloque de memoria que: “Recuerda” la evolución del sistema. Configura el estado anterior.
El nuevo estado se generará y será leído con el nuevo pulso de reloj.
ELEMENTOS DE MEMORIA: FLIP-FLOP o BIESTABLE
BIESTABLE: circuito secuencial que se caracteriza por:
Tener dos estados estables: almacena permanentemente un bit “0” y “1”: Estado: contenido de la memoria Se mantiene indefinidamente en uno de los estados posibles
Entradas o señales externas de excitación hacen que el BIESTABLE cambie de estado.
NOTA: La función de excitación es característica de cada tipo de biestable (D, T, RS o JK).
Las máquinas de estado finito son modelos abstractos de máquinas con una memoria interna primitiva.
Una máquina de estados se denomina máquina de estados finitos si el conjunto de estados de la máquina es finito, este es el único tipo de máquinas de estados que podemos modelar en un computador en la actualidad.
Todas las versiones de máquinas de estado finito incluyen un conjunto de estados finito (Q), uno de los cuales es el estado inicial, un alfabeto de entrada (Σ) y una función de transición (δ) que asigna a cada pareja de estado y dato de entrada el siguiente estado.
Las máquinas de estado finito se utilizan con mucha frecuencia en aplicaciones de ciencias de la computación y en redes de datos como por ejemplo base de los correctores ortográficos y gramaticales.
Tenemos, que se clasifican en:
Máquinas de Estado Finito con Salida
Máquinas de Estado Finito sin Salida
Máquinas de Estado Finito con Salida
Una máquina de estado finito M= (Q, I, O, δ, g, q0) consiste en un conjunto finito de estados Q; un alfabeto de entradas finito I; un alfabeto finito de salidas O; una función de transición δ, que asigna a cada par de estado y entrada un nuevo estado; una función de salida g, que asigna a cada par de estado y entrada una salida, y un estado inicial q0.
Máquina de Estado Finito sin Salida
Una de las aplicaciones más importantes de las máquinas de estado finito es el reconocimiento de lenguajes. Esta aplicación desempeña un papel fundamental en el diseño y construcción de compiladores para los lenguajes de programación. Se puede utilizar una máquina de estado finito con salida para reconocer un lenguaje produciendo la salida 1 cuando lee una cadena del lenguaje y 0 en caso contrario. Sin embargo, hay otros tipos de máquinas de estado finito que están especialmente diseñadas para el reconocimiento de lenguajes. En lugar de producir una salida, estás máquinas tienen estados finales. Una cadena es reconocida por la máquina si, y sólo si, se produce una transición del estado inicial a unos de estos estados finales.
Las máquinas de estado finito sin salida son los llamados Autómatas Finitos.
Los autómatas finitos utilizan estados y transiciones entre estados en respuesta a las entradas. Resultan útiles para construir diversos tipos de software, incluyendo el componente de análisis léxico de un compilador y los sistemas que permiten verificar la corrección de, por ejemplo, circuitos o protocolos.
Estos se separan en Autómatas Finitos Deterministas (AFD) y Autómatas Finitos No Deterministas (AFN).
Autómatas Finitos Deterministas
Es aquel que sólo puede estar en un único estado después de leer cualquier secuencia de entradas. El término “determinista” hace referencia al hecho de que para cada entrada sólo existe uno y sólo un estado al que el autómata puede hacer la transición a partir de su estado actual.
Por el contrario, un autómata finito “no determinista” puede estar en varios estados a la vez.
Un autómata finito determinista consta de:
1) Un conjunto finito de estados, a menudo designado como Q.
2) Un conjunto finito de símbolos de entrada, a menudo designado como Σ.
3) Una función de transición que toma como argumentos un estado y un símbolo de entrada y devuelve un estado. La función de transición se designa habitualmente
como δ (delta). En nuestra representación gráfica informal del autómata, δ se ha
representa mediante arcos entre los estados y las etiquetas sobre los arcos. Si q es
un estado y a es un símbolo de entrada, entonces δ (q, a) es el estado p tal que
existe un arco etiquetado a que va desde q hasta p.
4) Un estado inicial, uno de los estados de Q.
5) Un conjunto de estados finales o de aceptación F. El conjunto F es un subconjunto de
Q.
A menudo haremos referencia a un autómata finito determinista mediante su acrónimo: AFD.
La representación más sucinta de un AFD consiste en un listado de los cinco componentes anteriores. Normalmente, en las demostraciones, definiremos un AFD utilizando la notación de “quíntupla” siguiente:
Donde A es el nombre del AFD, Q es su conjunto de estados, Σ son los símbolos de
entrada, δ es la función de transición, q0 es el estado inicial y F es el conjunto de estados finales.
Cómo se procesa una cadena AFD
Lo primero que tenemos que entender sobre un AFD es cómo decide si “aceptar” o no una secuencia de símbolos de entrada. El “lenguaje” del AFD es el conjunto de todas las
cadenas que acepta. Supongamos que a1a2… an es una secuencia de símbolos de
entrada. Comenzaremos con el AFD en el estado inicial, q0. Consultamos la función de
transición δ, por ejemplo δ (q0, a1)= q1 para hallar el estado al que pasará el AFD A
después de procesar el primer símbolo de entrada a1. A continuación procesamos el
siguiente símbolo de entrada, a2, evaluando δ (q1, a2); supongamos que este estado es
q2. Continuamos aplicando el mismo procedimiento para hallar los estados q3, q4,…, qn
tal que δ (qi-1, ai)= qi para todo i. Si qn pertenece a F, entonces la entrada a1a2… an se acepta y, si no lo es se “rechaza”.
Notaciones más Simples para los AFD
Especificar un AFD utilizando una quíntupla con una descripción detallada de la función
de transición δ resulta bastante tedioso y complicado de leer. Hay disponibles dos notaciones más cómodas para describir los autómatas:
1) Un diagrama de transiciones, que es un grafo.
2) Una tabla de transiciones, que es una ordenación tabular de la función δ, la cual especifica el conjunto de estados y el alfabeto de entrada.
Diagrama de Transiciones
Un diagrama de transiciones de un AFD A= (Q, Σ, δ, q0, F) es un grafo definido como sigue:
a) Para cada estado de Q, existe un nodo.
b) Para cada estado q de Q y cada símbolo de entrada a de Σ, sea δ (q, a)= p.
Entonces, el diagrama de transiciones tiene un arco desde el nodo q hasta el nodo
p, etiquetado como a. Si existen varios símbolos de entrada que dan lugar a
transiciones desde q hasta p, entonces el diagrama de transiciones puede tener un único arco etiquetado con la lista de estos símbolos.
c) Existe una flecha dirigida al estado inicial q0, etiquetada como Inicio. Esta flecha no tiene origen en ningún nodo.
d) Los nodos correspondientes a los estados de aceptación (los que pertenecen a F)
están marcados con un doble círculo. Los estados que no pertenecen a F tienen un círculo simple.
Una tabla de transiciones es una representación tabular convencional de una función,
como por ejemplo δ, que toma dos argumentos y devuelve un valor. Las filas de la tabla corresponden a los estados y las columnas a las entradas. La entrada para la fila
correspondiente al estado q y la columna correspondiente a la entrada a es el estado