Este documento describe los autómatas de estados finitos (FSA), incluyendo que son diagramas con nodos y arcos etiquetados que reconocen lenguajes regulares. Explica que un FSA puede tener múltiples estados finales y puede ser determinista o no determinista. También cubre cómo las expresiones regulares y gramáticas regulares son equivalentes a los lenguajes reconocidos por los FSA.
1. 6/9/2008
Autómata de estados finito
Un autómata de estados finito (FSA) es un grafo con
arcos dirigidos y con etiqueta, dos tipos de nodos
(estado final y no final), y un estado inicial único:
Esto es también llamado
máquina de estados.
Gramáticas Regulares
¿que cadena, que se inicia en
estado A, termina en estado C?
Sección 3.3.2
El lenguaje aceptado por la máquina M es un conjunto de
cadenas que se mueve del nodo inicial a un nodo
final, o más formalmente: T(M) = { | (A,) = C}
donde A es el nodo inicial y C un nodo final.
1 2
Mas FSA Autómatas Deterministicos
Deterministicos: Para cada estado y para cada miembro
Un FSA puede tener más de un estado final: del alfabeto existe exactamente una transición.
No-deterministicos FSA (NDFSA): remueve la restricción.
• En cada nodo existe 0, 1, o más de una transición
para cada símbolo del alfabeto.
• Una cadena es aceptada si existe algún sendero del
estado inicial a algún estado final.
Ejemplo de un FSA no deterministico (NDFSA):
01 es aceptado vía el sendero:
ABD
A pesar de que 01 puede tomar
también los siguientes senderos:
ACC o ABC
y C no es el estado final.
3 4
1
2. 6/9/2008
Equivalencia de FSA y NDFSA Expresiones regulares
Resultado inicial importante: Se puede escribir lenguaje regular como una expresión:
NDFSA = DFSA
Subconjuntos de estados son
Estados en DFSA.
Siga el subconjunto en que 0*11*(0|100*1)1*|0*11*1
puede estar.
Cualquier cadena desde
{A} a {D} o {CD} Operadores:
representa un sendero • Concatenación
desde A a D en el • O (| o algunas veces escrito como )
NDFA original. • Cerramiento de Kleene (* - 0 o más instancias)
5 6
Gramáticas regulares Equivalencia de FSA y gramáticas regulares
Una gramática regular es una gramática
de contexto libre donde toda
producción es una gramática de
contexto libre de una de dos formas:
• X aY
•X a
para X, Y N, a T
Teorema: L(G) para una gramática regular G es un
equivalente a T(M) para FSA M.
La prueba es “constructiva”. Esto es dado G o M,
podemos construir el otro [siguiente slide]
7 8
2
3. 6/9/2008
BNF extendido Notación EBNF para sentencias de asignación
Existe una notación extendida para las reglas de BNF. <sentencia de asignación>::= <variable>= <expresión aritmética>
No le añade poder a la sintaxis, es solo una manera <expresión aritmética>::= <término> {[ + | - ] <término>}*
de escribir las producciones: <término>::= <primario> {[ * | -]<primario>}*
| - Escoger <primario>::= <variable>|<número>|
( ) - Agrupar (<expresión aritmética>)
{}* - Repetir - 0 o más veces <variable>::= <identificador>|
{}+ - Repetir - 1 o más veces <identificador>[<lista subscrita>]
[ ] - Opcional <lista subscrita>::=<expresión aritmética>
Ejemplo: identificador – una letra seguida de 0 o más {,<expresión aritmética>}*
letras o dígitos:
BNF extendido BNF regular
I L { L | D }* I L | L M
L a | b |... M CM | C
D 0 | 1 |... C L | D
L a | b |...
D 0 | 1 |...
9 10
Diagramas sintácticos Diagrama sintáctico para expresiones regulares
También llamados diagramas de ferrocarril.
Trace un sendero en la red: Una L seguida o repetida
por mallas a través de L y D, por ejemplo, BNF
extendido:
L L (L | D)*
11 12
3
4. 6/9/2008
¿Por que nos preocupamos de lenguajes
regulares?
Programas están compuestos de tokens:
• Identificador
• Número
• Palabra clave
• Símbolos especiales
Cada una de estas puede ser definidas por gramáticas
regulares. (siguiente slide.)
Problema: Como podemos manejar operadores de símbolos
múltiples (por Ej.., ++ en C, =+ en C, := en Pascal)?
?? –estados finales múltiples?
13 14
Muestras de clases de token Resumen de FSA
Barrido (Scanner) para un lenguajes tiende a ser un
gigante NDFSA para la gramática (es decir, tiene
reglas desde el estado inicial al estado inicial de
cada tipo de token del slide anterior).
integer
identifier
keyword
symbol
15 16
4