You are on page 1of 26

Lenguajes y Compiladores FISI 2017-II

GUIA II
EXPRESIONES REGULARES Y AUTOMATAS
Tres clases hay de ignorancia: no saber lo que debiera
saberse, saber mal lo que se sabe, y saber lo que no debiera
saberse.

Faccois de la Rochefoucald
(1613-1680) Escritor francés

Donald Ervin Knuth Nacido el 10 de enero de


1938, es uno de los más renombrados científicos de
la computación, profesor emérito de la Universidad
de Stanford. Es conocido como autor de múltiples
volúmenes: El arte de la programación de
computadoras, considerado como una referencia en
el área de ciencias de la computación, prácticamente
fue el creador del análisis de algoritmos y
contribuyo significativamente a varias ramas de
teoría de las ciencias de la computación

Epecificar una expresion regular


Objetivos

Especificar y construir Automatas finitos no


deterministas

Especificar y construir automatas finitos


deterministas

COMPILADORES
Para subsanar los problemas que presentan los interpretes se crean los
compiladores. El traductor de un lenguaje de programación de alto nivel a código
de maquina o ensamblador se conoce como compilador.

Augusto Cortez Vásquez Pag.1/26


Lenguajes y Compiladores FISI 2017-II

PROGRAMA PROGRAMA
FUENTE OBJETO

ANALIZADOR ANALIZADOR GENERADOR

LEXICO SINTACTICO DE CODIGO

DIAGRAMA DE BLOQUE DE UN COMPILADOR


CODIGO DE MAQUINA DE UN COMPUTADOR
HIPOTETICO (IDEAL)ABSTRACTO.

PROGRAMA FUENTE
Alto Nivel

G.C.I.

CODIGO
INTERMEDIO

G.C.

CODIGO
MAQUINA

Ventajas de la máquina abstracta:

1 El compilador es independiente de la máquina destino y por tanto es más


transportable.
2 Las características del hardware destino están consideradas en el generador
del código.
3 Facilidad para llevar a cabo algunas estrategias de optimización
(Asignación de registros).

Augusto Cortez Vásquez Pag.2/26


Lenguajes y Compiladores FISI 2017-II

Desventajas:

El código de máquina generado a partir de C.I. por lo general será menos


eficiente que el código de máquina generado directamente debido al nivel
de traducción adicional.

Lenguajes de primera 001011


Generación

Lenguaje de segunda MOVE (A1), D1


Generación

lenguaje de tercera If a = b Then


generación

TRADUCTOR

Fuente Compilador Objeto

ENSAMBLADOR

lenguaje de
bajo nivel Ensamblador Objeto
ensamblador

COMPILADOR

lenguaje código
de compilador intermedio
alto nivel (ensamblador)

INTERPRETE

Lenguaje
de Interprete
alto nivel

Augusto Cortez Vásquez Pag.3/26


Lenguajes y Compiladores FISI 2017-II

no genera código objeto. Analiza y ejecuta directamente cada proposición


del código fuente.

Estructura de un compilador

Un compilador es un programa, en el que pueden distinguirse dos módulos


principales, cada uno de los cuales realiza una fase: fase de análisis en la que
descompone el código fuente y analiza su estructura, y la otra fase de síntesis en la
que integra los que descompuso en la fase previa, generando código objeto.

Fuente

Análisis lexicográfico

T
A Análisis Sintáctico
B
L
A Análisis Semántico
y de tipos

D
E

S Generación de código
I intermedio
M
B
O Generación de código
S

Código relocalizable

Enlazador

Objeto

Augusto Cortez Vásquez Pag.4/26


Lenguajes y Compiladores FISI 2017-II

Análisis del programa fuente

Estructura del
programa fuente

Pre procesador

Programa
fuente

Compilador

programa objeto
en leng.ensamblador

Ensamblador

código de maquina
relocalizable

Editor de enlace biblioteca de


Archivos objeto
relocalizables

código de maquina
absoluto

Augusto Cortez Vásquez Pag.5/26


Lenguajes y Compiladores FISI 2017-II

Ejemplo 1
Ejemplo de proceso de compilación

P I + V * 10

Analizador
lexicografico

Id1 Id2 + Id3 *10

Analizador Generador de
Sintáctico código intermedio

= T1 = Ent_real(10)
Id1 + T2 = Id3 * T1
T3 = Id2 + T2
Id2 * Id1 = T3

Id3 10

Optimizador
de código
intermedio
Analizador
semántico

T1 = Id3 * 10.0
Id1 = Id2 + T1

= Generator
de código
Id1 +

Id2 *

Id3 ent_real MOV Id3 , R2


MUL 10.0 , R2
10 MOV Id2 , R1
ADD R2 , R1
MOV R1 , Id1

Augusto Cortez Vásquez Pag.6/26


Lenguajes y Compiladores FISI 2017-II

Funciones basicas del compilador


Una proposición esta conformada por una cadena de caracteres, sin embargo por
razones de análisis el compilador agrupa los caracteres en secuencias llamadas
componentes léxicos (TOKENS). Estos componentes pueden suponerse como los
axiomas o fundamentos del lenguaje, pues vienen a ser los átomos o ladrillos con
lo que se construyen las frases de un lenguaje. Un componente léxico puede ser
una palabra clave, un nombre de variable (identificador), una constante numérica
entera o real, un operador aritmético etc. La tarea de examinar la proposición con
la finalidad de reconocer y clasificar los distintos componentes léxicos se conoce
como análisis léxico y la parte del compilador que realiza esa función analítica se
denomina analizador léxico(SCANNER). Después de analizar los componentes
léxicos, cada proposición del programa debe reconocerse como una frase del
lenguaje, como una declaración, proposición de asignación etc., es decir debe
haber un orden prescrito en los componentes léxicos que conforman la
proposición. Este proceso se denomina análisis sintáctico (PARSING), lo realiza
la parte del compilador denominada Analizador sintáctico (PARSER). El ultimo
paso en el proceso básico de traducción es la generación de código objeto.

El analizador léxico lee caracteres de un alfabeto y los agrupa en símbolos


(componentes léxicos) que son pasados al analizador sintáctico para la construcción
de las proposiciones. Cada componente léxico o símbolo construido por el
lexicográfico corresponde a una variable terminal de la gramática del lenguaje que
analizara el analizador sintáctico.
Los componentes léxicos se consideran como los fundamentos del lenguaje. La tarea
de examinar el programa fuente con el fin de reconocer y clasificar los distintos
componentes léxicos se conoce como Análisis léxico y la parte del compilador que
realiza esta función se denomina analizador léxico (Scanner) [2]

caracteres análisis símbolos análisis


léxico construidos sintáctico

Funciones características de un analizador léxico

a- Eliminar espacios, comentarios, etc.


b- Reconocer los componentes léxicos: identificadores, constantes
etc.
c- Generar un listado para el compilador.

Augusto Cortez Vásquez Pag.7/26


Lenguajes y Compiladores FISI 2017-II

AUTOMATAS
Un autómata finito es un modelo matemático que sirve como reconocedor de frases de un
lenguaje. Un AF se puede representar como un diagrama de transiciones –grafo dirigido-.
en el que todos los nodos son los estados y las aristas etiquetadas representan las funciones
de transición.

X  Y= (X)

EXPRESIONES REGULARES
Definición.- Una expresión regular es una regla de formación, que permite definir un
conjunto de secuencias llamada conjunto regular. A este conjunto también se le suele
llamar Lenguaje regular.

Si  es un alfabeto y O es un conjunto de operadores, podemos afirmar que una expresión


regular r esta constituida de operandos y operadores.

Cada operando puede ser:

- Una expresión regular simple: cuyos operandos son elementos del alfabeto

- Una expresión regular compuesta: cuyos operandos son otras expresiones


regulares.

Ejemplo 2

 = {a,b} O={*,/}

a*, a*b a/b son ejemplos de expresiones regulares


r =a* genera L(r)= { secuencias de 0 o mas a }
r =a*b genera L(r) ={ secuencias de 0 o mas as que termina con una b}
r=a / b genera L(r) = {a, b}

Si consideramos :

Si  = {L,D}, donde L: letra y D: Dígito

construimos la expresión regular r = L(L/D)*

Augusto Cortez Vásquez Pag.8/26


Lenguajes y Compiladores FISI 2017-II

que genera un conjunto de secuencias L(r)


L(r) = {Secuencia de Letra y Dígitos que empiezan con una
letra}

L(r) no es otra cosa que el conjunto de los identificadores del lenguaje Pascal.

Una expresión regular puede definirse como una composición de expresiones regulares.

Método para definición de construcciones regulares:

- Sea  : alfabeto

-r: genera L(r) = {}

-r=a genera L(r) = {a}

Si r, s son expresiones regulares con sus lenguajes L(r) y L(s) respectivamente entonces:

- (r) es una e.r. , genera L(r)


- (r)/(s) es una e.r. , genera L(r) U L(s)
- (r)(s) es una e.r. , genera L(r) . L(s)
- (r)* es una e.r. , genera (L(r))*

como ejemplo podemos ver que si  ={a,b}

r =  genera L(r) ={}


r = a genera L(r) ={a} , (r) genera el mismo L(r)
r = a/b genera L(a/b) = {a} U {b} = {a, b}
r = a* genera L(r) = {, a, aa, aaa, aaaa,...}

PROPIEDADES
Una expresión regular cumple las siguientes características:

Augusto Cortez Vásquez Pag.9/26


Lenguajes y Compiladores FISI 2017-II

r/s = s/r conmutatividad respecto a /

r/(s/t) = (r/s)/t asociatividad respecto a /

(rs)t = r(st) asociatividad respecto a la


concatenación.

r(s/t) = rs / rt distribución derecha de la


concatenación respecto de /.

(s/t) r = sr / tr Distribución por la izquierda de


La concatenación respecto de /.

 .r = r .  = r  es el idéntico de r

r** Idempotencia de r

una expresión regular puede representarse mediante un grafo, en el cual las aristas están
etiquetadas con los elementos del alfabeto.

Ejemplo 3

r = ab* r = a*b
b a

a b
A B A B

Ejemplo 4
r =0*(10*10*)* r =0*10*(10*10*)*

0 0 0 0

1 1
A B A B
1 1

Definiciones regulares

Augusto Cortez Vásquez Pag.10/26


Lenguajes y Compiladores FISI 2017-II

Partiendo del alfabeto S de símbolos básicos, pueden crearse una definición regular como
una secuencia de definiciones :

d1 r1 Para todo i , di es un nombre distinto


d2 r2 ri es una expresión regular sobre AU{d1, d2,...dn}
.
.
.
dn rn

Ejemplo 5
Si L = { ID / ID es un identificador de Pascal }
creamos una e.r. r t.q. L(r) = L

Una definición regular es :

L ───> A/B/...Z/a/.../z
D ───> 0/1/...9
ID ───> L(L/D)*

Ejemplo 6
Consideremos los siguientes lenguajes definidos algebraicamente
Construya la gramática

0m1n0m+n  m, n >0
1n+m0n0m  m, n >0

Todas las cadenas de ceros y unos con al menos dos ceros consecutivos

La expresión regular correspondiente es:

(0/1)*00(0/1) *

Todas las cadenas de ceros y unos que comienzan con uno y no tienen dos ceros
consecutivos

AUTÓMATAS FINITOS
Un Autómata finito es una maquina de estados finitos que reconoce secuencias
generados por una expresión regular.

Augusto Cortez Vásquez Pag.11/26


Lenguajes y Compiladores FISI 2017-II

formalmente un Autómata se define como un modelo matemático:


M =(E, , , 0 , F)

E : conjunto de estados
A : alfabeto de entrada ( alfabeto)
 : función de transición
0 : estado inicial
F : conjunto de estados de aceptación

: E x  E

el conjunto F contiene todos los estados que resultan de aplicar la función  a


algún estado, es decir :

F = { j / existe i donde ( i , a) = j
para algún a   }

Puede considerarse elemento de F a todos los estados de aceptación de la función ß de la


máquina de estados M.

r M(r)

El autómata M(R) puede ser determinista (AFD) o no determinista(AFND). M es


determinista cuando a partir de un estado puede pasarse a un solo estado con cada entrada
del alfabeto, además no tiene ninguna transición con  para cada estado.

Un Autómata es no determinista cuando se da el caso que existe mas de una transición


desde un estado con la misma entrada. Tanto los autómatas deterministas como los no
deterministas pueden reconocer conjuntos regulares generados por expresiones regulares o
por gramáticas regulares.

Ejemplo 7
sea r = (a/b)*ab expresión regular, construimos M(r) autómata no determinista, a
partir de la expresión regular.

a/b
a b
0 1 2

inicio

M(E, , , 0, F) E={0, 1, 2}  = { a, b} F = {2}

Augusto Cortez Vásquez Pag.12/26


Lenguajes y Compiladores FISI 2017-II

 a b

0 { o,1} {o}
1 - {2}
2 - -

puede verse que las entradas en la matriz  de una matriz no deterministas son conjuntos,
mientras que en un autómata deterministas son elementos de E.

Ejemplo 8
El siguiente autómata determinista corresponde a la expresión regular r = (a/b)*ab

b a

a b
0 1 2

a
b

M(E, , , 0, F)

E={0, 1, 2}  = { a, b} F = {2}

 a b

0 1 o
1 1 2
2 1 o

Nótese que las entradas en la matriz  corresponden a estados de M, no son conjuntos.


Esta es una diferencia fundamental entre los autómatas deterministas y los no deterministas.

Construcción de un autómata no determinista a partir de una expresión


regular
Cuando la expresión regular no es muy compleja es fácil construir su autómata
correspondiente, determinista o no, como se mostró en los ejemplos anteriores. Sin

Augusto Cortez Vásquez Pag.13/26


Lenguajes y Compiladores FISI 2017-II

embargo cuando la expresión es compleja se requiere de un método sistemático y modular


para construir el autómata.

Para construir un autómata a partir de una expresión regular utilizamos el método de


componentes, en el cual se construyen
Máquinas para cada subexpresion regular y se ensamblan en forma modular hasta obtener
el autómata final correspondiente a la expresión regular inicial.

Entrada : r ( expresión regular)

Salida : M ( autómata no determinista)

Método:
Se analiza la expresión regular r, descomponiéndola en subexpresiones regulares. En cada
caso se construye el autómata correspondiente, luego se acoplan en forma sistemática para
obtener el autómata M(r). M(r) es llamado Autómata generado por una expresión regular r.

Para construir M(r) se tiene en consideración los siguiente:

1 Sea r =  expresión regular, podemos construir M(r) :


i j M(r)

2 Sea r = a expresión regular, para algún a  


podemos construir M(r)

a
i j M(a)

3 Sea r y s son expresiones regulares, y sean M(r) y M(s)


sus maquinas asociadas:

i j M(r)

i j M(s)

Augusto Cortez Vásquez Pag.14/26


Lenguajes y Compiladores FISI 2017-II

Podemos construir M(r/s) : máquina que reconoce secuencias generadas por la


la expresión r/s.

M(r)
i j
 
i f
M(r)
 i j 

Método:
1 Se inserta un nuevo estado inicial y estado final i , f

2 El nuevo estado inicial se conecta con los estados iniciales de las maquinas.

3 Los estados finales de las maquinas se conectan con el nuevo estado final.

M(r.s) : máquina que reconoce secuencias generadas por la


La expresión r.s


 j f
i i M(S)
M(r)

Método:

1 Se inserta un nuevo estado inicial y estado final i , f


2 El nuevo estado inicial se conecta con el estado inicial de la primera máquina.
3 El estado final y el estado inicial de la primera y segunda maquina
respectivamente se convierten en uno solo.
4 El estado final de la segunda maquina se conecta con el nuevo
estado final.

M(r*) : máquina que reconoce secuencias generadas por la expresión r*


 
i i j f
M(r)


Método:

Augusto Cortez Vásquez Pag.15/26


Lenguajes y Compiladores FISI 2017-II

1 Se inserta un nuevo estado inicial y estado final i , f


2 El nuevo estado inicial se conecta con el estado inicial de la primera maquina.
3 El estado final de la segunda máquina se conecta con el nuevo estado final.
4 Se añade una arista desde el estado final hacia el estado inicial de la máquina
inicial, con la entrada .

Equivalencia entre Autómatas finitos y expresiones regulares

AF no
determinista

AF AF no determ.
Determinista con transic. 

Expresión
regular

Para toda expresión regular r, Existe M autómata finito no determinista con transiciones 
tal que L(r) = L(M)

Ejemplo 9
sea r = ab(a/b)* e.r. , construimos M(r) autómata no determinista, a partir de la expresión
regular.

sea a, b expresiones regulares, podemos construir M(a)


y M(b).

a
  M(a)

b
  M(b)

Construimos M((a/b)*)

Augusto Cortez Vásquez Pag.16/26


Lenguajes y Compiladores FISI 2017-II

a
   
 
   

  b  

Si unimos los tres autómatas obtenemos el autómata final:


a
   
a b  
     

  b  

Conversión de un Autómata no determinista a uno determinista


Se puede construir un autómata determinista a partir de uno no determinista construido por
el método de componentes.

Entrada M : autómata no determinista


Salida N : autómata determinista

Método

Construimos una nueva matriz de transiciones ’, en donde cada estado es un conjunto de
estados del autómata inicial. Para ello hacemos uso de tres funciones:

CERRADURA_(i) : conjunto de estados alcanzables desde el estado i , solamente con


transiciones 

CERRADURA_(A) : conjunto de estados alcanzables desde algún estado de A, solamente


con transiciones 

Augusto Cortez Vásquez Pag.17/26


Lenguajes y Compiladores FISI 2017-II

MUEVE(A,a) : conjunto de estados alcanzables desde algún estado de A, solamente con el


símbolo a.

Ejemplo 10
Consideremos la expresión regula r = (a/b)*ab. En los ejemplos 420 y 421 se mostraron los
autómatas no deterministas y determinista respectivamente. Presentaremos un nuevo autómata
no determinista , construido utilizando el método de componentes:

a
 2 3 
  a b
0 1 6 7 8 9

 4 b 5 

construiremos un autómata determinista equivalente.


Aplicamos el método descrito:

CERRADURA_(0) : {0,1,2,4,7}=A

MUEVE(A,a) :{3,8}
CERRADURA_( MUEVE(A,a)) = CERRADURA_( {3,8}) = {1,2,3,4,6,7,8} = B

MUEVE(A,b) :{5}
CERRADURA_( MUEVE(A,b)) = CERRADURA_( {5}) = {1,2,4,5,6,7} = C

MUEVE(B,a) :{3,8}
CERRADURA_( MUEVE(B,a)) = CERRADURA_( {3,8}) = {1,2,3,4,6,7,8} = B
MUEVE(B,b) :{5, 9}
CERRADURA_( MUEVE(B,b)) = CERRADURA_( {5,9}) ={1,2,4,5,6,7,9} = D

MUEVE(C,a) :{3,8}
CERRADURA_( MUEVE(C,a)) = CERRADURA_( {3,8}) = {1,2,3,4,6,7,8} = B

MUEVE(C,b) :{5}
CERRADURA_( MUEVE(C,b)) = CERRADURA_( {5}) = {1,2,4,5,6,7} = C
MUEVE(D,a) :{3,8}
CERRADURA_( MUEVE(D,a)) = CERRADURA_( {3,8}) = {1,2,3,4,6,7,8} = B

Augusto Cortez Vásquez Pag.18/26


Lenguajes y Compiladores FISI 2017-II

MUEVE(D,b) :{5}
CERRADURA_( MUEVE(D,b)) = CERRADURA_( {5}) ={1,2,4,5,6,7} = C

Mientas aparezcan nuevos estados se repetirá el proceso para los nuevos estados. En el
ejemplo aparecen los estados A, B, C, D.

Finalmente tenemos el autómata determinista equivalente, correspondiente e la expresión


regular r = (a/b)*ab

b
C

b b
a
a b
A B D

a a

M(E, A, , 0, F)
E={A, B, C, D} A = { a, b} F = {D}

 a b

A B C
B B D
C B C
D B C

El autómata finito es un modelo matemático que puede implementarse desde un simple


dispositivo electrónico (Flip-flop) hasta un computador completo. Tiene como función
primordial servir para describir el comportamiento de ciertos programas de computadoras
que no contienen hardware. Estos modelos son útiles en el estudio de la teoría de lenguajes
y compiladores y en otros sistemas que requieran de un análisis lexicográfico y sintáctico
de un lenguaje.

AUTÓMATAS COCIENTES

Si M es el autómata M(E, ,  , 0, F) E : conjunto de estados


 : conjunto finito de símbolos  : función siguiente
F : Conjunto de estados de aceptación o salida

Augusto Cortez Vásquez Pag.19/26


Lenguajes y Compiladores FISI 2017-II

0 : estado inicial , esta en el conjunto E

Trabajando sobre el conjunto de estados de M, podemos describir una relación R sobre E


de la siguiente forma :

Para todo p, q  E,
p R q si y solo si (p,x) R (q,x) para todo x  

Si esta relación se cumple , entonces decimos que R determina una relación de


congruencia y a su vez genera un Autómata cociente. Es decir si para un par de estados
equivalentes en R se produce siempre pares equivalentes de estados bajo cualquier x  S.

Esta relación R sobre E determina un conjunto cociente llamada Autómata cociente M/R,
donde el conjunto de estados es precisamente :
E/R = {[] /   E}

El autómata cociente será : M/R = (E/R, , ', [0] ,F/R)

E/R : conjunto de estados ( clases de equivalencia de E)


 : conjunto finito de símbolos
' : función siguiente, definida :
': E/R x  E/R

F/R : Conjunto de estados de aceptación


[0] : clase inicial , [0]  E/R

Ejemplo 11

Sea M(E, , , 0,F)


donde: E={0,1,2,3,4,5} = {a,b}

 a b
1 0 1 0 0 0
0 0 4 0 1 0 1 0 1
1 1 0 1 0 1 0 0 0
2 2 4 R = 0 1 0 1 0 1
3 5 2 0 0 0 0 1 0
4 4 3 0 1 0 1 0 1
5 3 2

Podemos verificar que R es de equivalencia por ser reflexiva, simétrica y transitiva.


Además se obtiene la partición de E determinado por R compuesta por las clases de
equivalencia sobre E
[0] = {0, 2} [1] = {1, 3, 5} [4] = {4}

Augusto Cortez Vásquez Pag.20/26


Lenguajes y Compiladores FISI 2017-II

Construimos M'(E/R, , ', 0,F)

E/R ={ [0], [1], [4] }


el alfabeto es el mismo:

Para todo p, q  [0], a   se tiene (p, a) R (q, a)


es decir que partiendo de algún estado de [0] y ocurre una
a   en la entrada, se llega a algún elemento de [0].

Lo mismo ocurre para las demás clases, cuando ocurre un a en la entrada. Sin embargo
cuando ocurre una b en la entrada, vemos que:

para todo p  [0] se tiene (p, b)  [4],

para todo p  [1] se tiene (p, b)  [0],

para todo p  [4] se tiene (p, b)  [1].


de acuerdo a esto ' es :
a a a
' a b
[0] [1] [4]
[0] [0] [4] b b
[1] [1] [0]
[4] [4] [1] b

Simplificación de un autómata finito

Para M =(E, , ,0 , F )

E : conjunto de estados
 : alfabeto de entrada
 : función de transición
0 : estado inicial
F : conjunto de estados de aceptación

:Ex E

Si definimos una relación de equivalencia R, de la forma siguiente:

Para todo a, b  E y W  *, decimos que:


a es compatible con b Si y solo si (a, w) y (b, w) pertenecen ambas a F o ninguna
pertenece a F.

R es reflexiva, simétrica y transitiva por tanto es de equivalencia.

Augusto Cortez Vásquez Pag.21/26


Lenguajes y Compiladores FISI 2017-II

Sea W  * , definimos w' = x . w (x concatenado con w)


Si a R b entonces (a, w') y (b, w') ambos pertenecen a F o ninguno pertenece a F
Pero:  (a, w') =  (a, x.w) =  ( (a, x),w)
 (b, w') =  (b, x.w) =  ( (b, x),w)

por tanto (a, x) y  (b, x) son compatibles en w

para todo W  *, es decir (a, x) R  (b, x)

luego si a, b  E y x  
a R b implica que (a, x) R (b, x)

por tanto R es de congruencia, y determina el autómata cociente M':


M'= M/R = (E/R, , ', o, F/R)
Podemos verificar que L(M) = L(M')
Sea w  L(M),
w es una secuencia del lenguaje, por tanto es reconocida por
el autómata M, es decir:
 (o ,w)  F , '([0 ],w) = [ (o ,w)]  F/R
por tanto w  L(M')

Sea w e L(M')
'([o ],w) = [ (o ,w)]  F/R
esto es para algún a  E se cumple que a R (o, w)
entonces a es compatible con (o, w) en w' para w'  *

Minimización del número de estados


Para reducir el numero de estados de un autómata se construye un nuevo autómata
cuyos estados resultan de particionar sucesivamente el conjuntos de estados de la maquina
inicial hasta obtener una partición que tengan transiciones de estados de un grupo hacia
estados del mismo grupo.

Algoritmo

Entrada : M (autómata determinista)


Salida : Ms (autómata determinista simplificado)

Método :

1 Se parte el conjunto E en dos grupos : estados finales, y estados no finales P(E) = {F,E-F}

Augusto Cortez Vásquez Pag.22/26


Lenguajes y Compiladores FISI 2017-II

2 Para cada grupo G de P(E) , hallar una partición P(G), de tal forma que dos estados
están en el mismo subgrupo, si para todos los símbolos del alfabeto, tienen transiciones
hacia el mismo subgrupo.

3 Repetir 1 y 2 hasta que se tengan grupos que ya no se puedan partir.

Al final se tendrá una partición, en el que cada grupo ya no se pueda subdividir. Los
elementos de esta partición son las clases de equivalencia de E. Estas clases se consideraran
como los estados de la maquina simplificada.

Ejemplo 12

Consideremos el autómata no determinista construido en el ejemplo 10, y consideremos su


autómata determinista obtenido a partir de el.

b
C

b b
a
a b
A B D

a a

M(E, A, , 0, F)
E={A, B, C, D} A = { a, b} F = {D}

 a b

A B C
B B D
C B C
D B C

Aplicando el método de simplificación:

Hallamos una partición de E , en dos conjuntos: los estados finales y los estados no finales:
E = {{D}{A,B,C}}

Hallamos una partición del conjunto {A,B,C}


E = {{D},{A,C},{B}}

Augusto Cortez Vásquez Pag.23/26


Lenguajes y Compiladores FISI 2017-II

Nótese que :

- Estando en el estado D, con una a, se pasa a B y con una b se pasa a C.

- Estando en el estado B, con una a, se queda en el estado B, y con una b se pasa al


estado D.

- Estando en los estados A-C, con una a se pasa al estado B, y con una b se
queda en el estado A-C

Luego la maquina simplificada, tiene como estados a las clases E ={[A],[B],[D]}

Donde [A]={A,C} ,[B]={B} y [D]={D}

La máquina simplificada es la siguiente:

b a

a b
[A] [B] [D]

a
b

M(E, , , 0, F)

E={[A], [B], [D]}  = { a, b} F = {[D]}

 a b

[A] [B] [A]


[B] [B] [D]
[D] [B] [A]

esta máquina es la misma que se construyó inicialmente en el ejemplo 10

Construcción de una gramática a partir de una


expresión regular
Sea r expresión regular , podemos construir M(r) autómata que reconoce secuencias
generadas por r, es decir L( r) = L(M)
M se define formalmente como: M = (E, , , o, F)

Augusto Cortez Vásquez Pag.24/26


Lenguajes y Compiladores FISI 2017-II

A partir de M podemos construir la gramática


G(VN, VT, S, P), tal que:

L(G) = L (M) = L( r)

Método 1 :

Paso 1: hacemos VT =  símbolos terminales


VN = E símbolos no terminales
S = 0 axioma o símbolo inicial

Paso 2: si se cumple en la matriz de transición que

 (i, a) = j para algún a  


entonces construimos la regla de producción

p : i aj

Paso 3: si se cumple en la matriz de transición que

i  F ( i es estado final )

entonces construimos la regla de producción


p : i 

Método 2 :

Se cumplen los Paso 1 y Paso 2 del método 1


y añadimos un nuevo paso 3:

Paso 3: si se cumple en la matriz de transición que

 (i, a)  F , para algún a  

entonces construimos la regla de producción


p : i a

la gramática construida por el método 2 no posee producciones


.

EJERCICIOS PROPUESTOS
1 Defina la expresión regular para
a. El conjunto de frases de ceros y unos que inician con uno
b. Conjunto de frases que inician con 1 y nunca hay dos a consecutivas

Augusto Cortez Vásquez Pag.25/26


Lenguajes y Compiladores FISI 2017-II

c. El conjunto de ceros y unos cuyo número de unos es múltiplo de tres


d. El conjunto de números decimales en binario múltiplos de tres

2 Defina tres conjuntos regulares en forma algebraica y en forma regular (expresión


regular)

3 De un ejemplo de una expresión regular no trivial sobre un alfabeto

a) Construya el autómata no determinista N.


b) A partir de N Construya el autómata determinista D
c) Reduzca el autómata D
d) Construya la gramática a partir de R
4 Descríba la sintaxis para

a) L = {w / w es una formula del calculo proposicional}


b) L = {w / w es una expresión aritmética}

REFERENCIAS BIBLIOGRAFICAS
[AHO 2013] Aho A., Sethi R.., Ullman J. - “Compiladores, Principios, Técnicas y herramientas”. Adisson-Wesley. 2013.
Wilmington Delaware EUA

[BROOKSHEAR 1989] Brookshear J. “Teoría de la computación, lenguajes formales, autómatas y complejidad”. Adisson-
Wesley. 1989. Wilmington Delaware EUA

[CORTEZ 2013] Augusto Cortez Vásquez. “Lenguajes y traductores”. UCSS Lima Perú 2013 ISBN 978-612-4030-50-5

[CORTEZ 2011] Augusto Cortez Vásquez. “Matemáticas Discretas”. Edit San Marcos Lima Perú ISBN 20260100808
[CORTEZ 2004] Teoría de la complejidad computacional y teoría de la computabilidad

Rev. RISI 1(1), 102-105 (2004) Facultad de Ingeniería de Sistemas e Informática Universidad
Nacional Mayor de San
15-0268 (impreso)
http://sisbib.unmsm.edu.pe/BibVirtualData/publicaciones/risi/N1_2004/a14.pdf

[CORTEZ 2013] Sistema de Aprendizaje de Patrones de Navegación Web Mediante Gramáticas


Probabilísticas de Hipertexto INGWE CUC ISSN 2382-4700, Vol. 11, Nº. 1, 2015, págs. 72-7
https://dialnet.unirioja.es/servlet/articulo?codigo=5178333

[GRASSMANN 1997] Grassmann W., Tremblay J. “Matemática discreta y lógica”. 1997. Prentice Hall Hispanoamericana

[HOPCROFT 1993] Hopcroft J., Ullman J. “Introducción a la teoría de autómatas, lenguajes y computación”. CECSA 1993 EUA

[KOLMAN 1989] Kolman B. Busby R. “Estructuras de matemáticas discretas para la computación”. 1989. Prentice Hall
Hispanoamericana

[PRATT 1998] Pratt, T. - Zelkowitz, M. “Lenguajes de programación, diseño e


Implementación”. 1998. Prentice Hall Hispanoamericana

[SETHI 1992] Sethi R. - “Lenguajes de programación, Conceptos y constructores”. Adisson-Wesley. 1992. Wilmington
Delaware EUA

[TEUFEL 1995] Teufel – Schmidt – Teufel “Compiladores Conceptos fundamentales”. Adisson-Wesley. 1995. Wilmington
Delaware EUA

Augusto Cortez Vásquez Pag.26/26

You might also like