Carrera:
Informática
Semestre:
5to.
Semestre
Materia:
Trabajo:
Maestro:
Alumno:
I Gramáticas y Lenguajes Formales.
II. Máquinas de Estado Finito.
III Autómatas de Estado Finito.
IV Autómatas de Pila.
V Máquinas de Turing.
VI Computabilidad.
OBJETIVOS DEL CURSO:
1° Obtener los conocimientos preliminares necesarios para
el desarrollo de las etapas de análisis de un Compilador.
2° Implementar modelos matemáticos a partir de algunos
sistemas reales de tipo electrónico o computacional principalmente-
3° Profundizar en el conocimiento sobre la computabilidad
de los algoritmos.
Primer Examen Parcial 25 %
Segundo Examen Parcial 25 %
Proyecto Software 25 %
Tareas 10
%
Proyecto Terminal 15 %
TOTAL
100%
1.- Teoría dé Autómatas y Lenguajes Formales.
Deán Kelley.
Editorial Preníice Hall.
2.- Introducción a la Teoría de Autómatas, Lenguajes y
Computación.
John E. Hopcroft / Jeffrey
D. Ullman.
Editorial CECSA.
3.- Teoría de la Computacion
J. Glenn Brookshear.
Editorial Addison Wesley Iberoamericana.
BIBLIOGRAFÍA DE APOYO:
1 Ejemplo: Aho /
Sethi / Ullman. (Editorial Addison Wesley).
2.- Libros sobre Matemáticas Discretas.
Ejemplo; Johnsonbaugh. (Editorial Iberoamericana).
3.- Libros sobre Lenguajes de Programación.
Ejemplo;
Sethi.
(Editorial Addison Wesley).- Libros sobre Compiladores.
-TEORÍA DE LOS LENGUAJES FORMALES: Estudio de los Lenguajes
Formales.
Una rama importante de esta teoría se ocupa de la
descripción finita de Lenguajes Infinitas. Esta representación adopta la forma
de un mecanismo abstracto para generar o reconocer cualquier cadena del
Lenguaje. Esta rama se adapta a la sintaxis de los lenguajes de programación
(en cuanto son distintos de su semántica, que requiere elementos de trabajo
bastante diferentes). Así, el conjunto de todos los programas válidos de Pascal
o de C, puede considerarse como un Lenguaje Formal sobre el alfabeto de
símbolos de Pascal, o de C.
Las Gramáticas proporcionan una base para, describir
sintaxis, en tanto que los Autómatas de Pila sirven de base para el diseño de
tos programas de análisis sintáctico. Por otra parte, el deseo de formalizar,
los lenguajes reales que llevo a Niuman Chomsky a la iniciación de este tema en
1956.
GRAMÁTICA FORMAL: Es un esquema general para la.
representación finita de los lenguajes, es decir, un soto modelo dinámico para
generar asî frases 0 cadenas de un lenguaje.
GRAMÁTICA FORMAL: Es una de las maneras principales de
especificar un lenguaje formal aunque sea infinito por medios finitos. Los
lenguajes pueden ser finitos o infinitos.
LENGUAJE FORMAL: Lenguaje con reglas explícitas para su sintaxis y semántica. Como ejemplo
se pueden citar los lenguajes de programación y también lógica como el cálculo
de predicados. Así, los Lenguajes Formales se distinguen de los naturales tales
como el castellano, cuyas reglas a medida que evolucionan con el uso de ser una
norma completa o precisa de la sintaxis del lenguaje y mucho menos de su
semántica.
Conceptos iniciales básicos:
LENGUAJE FORMAL: Conjunto de palabras formadas por ciertas
reglas.
GRAMÁTICA FORMAL: Reglas para formar las palabras del
lenguaje.
Todo Lenguaje Formal, siempre estará relacionado a una
Gramática Formal que especifica el mecanismo de producción de las cadenas que
lo conforman.
LENGUAJE FORMAL: Sea un conjunto finito de elementos
llamado alfabetico, un lenguaje formal L definido sobre £ es un subconjunto de
£* (el conjunto de todos los arreglos o cadenas posibles de formar con los
elementos de £).
Ejemplos de Alfabetos:
E = { a, b, c, ch, d, e, f. g, h, etc.} En idioma castellano.
E = { .-,-...,-.-.,----,-..,.,..-.,....,..,etc.} En código Morse.
E ={.,-} En código Morse.
E = {x | x es un carácter del código ASCII}
E ={0, 1,2. 3.4, 5,6, 7,8,9}
E = {+,-,',/}
E = { a, e, i, o, u}
EJEMPLO:
Diseñar un Lenguaje Formal cualquiera, a partir de ciertas
reglas expresadas textualmente y con el alfabeto £ = {x, y, z}.
zn = {s | s es toda cadena de longitud n que se pueda
formar con los símbolos de I,}
¡f r=u} ^.^ .
| ^= i-íx.y.z}
S, í:2 = {xx, xy, xz, yx. yy, yz, zx, zy, zz}
^ 1¡3 = {xxx. xxy, xxz, xyx, xyy, xyz, xzx, xzy, xzz, yxx,
yxy. yxz, ... , zzy, zzz}
U Z4 = {xxxx, xxxy, xxxz, xxyx, xxyy, xxyz, xxzx, xxzy,
xxzz, ... , zzzy, 7772 }
^ £* == U Sn n e No, es decir. I* = Z° U £1 U X2 U Z3 U ...
I; £* se llama conjunto de todas las palabras sobre S.
j^. ' t:."'-^ -'^''^F I- f-~i^----t.--/ i;;.í ' <. ^
I r = Ü Sn n e N,
es decir, S' = I;1 U Z2 U I3 U £4 U ...
í £+ se llama
conjunto de todas las palabras no yacías sobre Z.
^ La forma de relacionar los dos conjuntos es: E* = S7 U { ?. }.&'
II Determinar el Lenguaje Formal, si las reglas
gramaticales (en forma textual) fuesen:
La cadena es de longitud menor o igual a tres.
" La cadena finaliza con x o con z.
a La cadena no inicia con y.
i >. i '''
L = { x, z, xx, xz, zx, zz. xxx, xxz, xyx, xyz, xzx, xzz.
zxx, zxz, zyx, zyz, zzx. zzz}.
Con otras reglas gramaticales, el Lenguaje pudiera ser:
L = {^, x. xy, yx, xz, zz, xyz, yyz, zxx, xxxx, ...}
Conceptos:
Los elementos a,e £ sfi llaman Símbolos de Y^_. '
•\(^-r\<
Los elementos arman, palabras cadenas y arreglos sobre La
longitud de una cadena se expresa como.
y consiste en la cantidad de símbolos cadena de longitud cero se llama
cadena vacía y se representa: ^. ,,A, e- Es el elemento neutro en aritmética de
cadenas.
Los Lenguajes Formales se comportan siempre en la forma más
parecida posible a los naturales, al tratar de ser un modelo de éstos.
Nomenclaturapara cadenas:
xxxyyzxxzzz = 'x^zx^3,
xyzyzyzyyyx =- xyízy)3^ = x(yz)3y3x,
a^bü^...^ z°-^
El orden en el que aparecen los símbolos sí es aportante.
Por ejemplo ab ^ ba.
"K - ri^'^ \iA \ ^\, c.
CONCEPTO: Sea S ==
una cadena cualquiera, entonces:
a) u es llamado prefijo. >
b) v es llamado infijo. >
c) w es llamado sufijo, y
Aplicado a un ejemplo;
Sea S = COSMOS
Prefijo: ?i, C, CO. COS, COSM, COSMO, COSMOS
Sufijo; ?i, S, OS, MOS. SMOS, OSMOS, COSMOS
Infijo; Á, C.O.S,M,CO, OS, SM, MO, OS, COS, OSM, SMO, MOS,
COSM, OSMO,
SMOS, COSMO, OSMOS. COSMOS.
CONCATENACIÓN DE CADENAS
, , , ^
Si ,U ^ UiU2Ua... U,n
, U*V=UV= ,Ui U2 ... Um,yi
^2 ,-.- Vn
V= ViV2V3.-. Vn
i ^ v
Por ejemplo: u = corcho, v = lata, uv = corcholata.
Las cadenas a concatenar pertenecerán al mismo conjunto £*.
Puesto que los
lenguajes formales son conjuntos, se les pueden aplicar todas las operaciones
de los mismos, sin embargo solamente son de-, utilidad para casos.
prácticos la union y la concatenación.
L u M == { s | S e L ^ S e M } > Jr c r
L"M= LM={lm|leL,meM} " r ^ ^r^,^, ,n
EJEMPLO:
Sean Li = { Á, a, ac, bca }, L2 = { ^-. b, cb, ab }, evaluar:
a) Li U L2 == { ^, a. ac, bca, b, cb, ab }
b) Li • LS = { ^, b, cb, ab, a afe, acl?, aab, ac, acb,
accb, acab, bca, bcab,
^l^1^- bcacb.bcaab^
('1^^ ,,. .vi";
{\] sin-0 ')
Ln = • Ya que se traía de una R-
de Recurrencia.
EJEMPLO:
Dado L = { a, ac, ba, cba }, evaluar Lo, L1, L2 y L3.
Lo- U}
L1^ L.LÜ^ L={a.ac, ba, cba }
L2^ L" L1 = {.aa, aac, aba, acba, acá, acac, acba,
accba, baa, baac, baba,
bacba, cbaa, cbaac, cbaba,cbacba }
Q -']
L = L* L ={ aaa, aaac, aaba. aacba, aaca, aacac, aacba...
acaa, acaac, acaba,acacha, acaca, acacac,...
baaa, baaac, baaba, baacba, baaca, baacac...
cbaaa,cbaaac, cbaaba, cbaacba. cbaaca,...}
L* = U L" | n É¿ No = Lo U L1 U L2 U ... se le llama
Cerradura-de-K4eene de L;
L^ULn |n eN= L1 U i-^U L3 U ... se le llama Cerradura
Positivaide L.
LA ==L' si
A. e L. Z=U,...}
L* ^L/Up.} si A. ^
L,L={^ ...}
GRAMÁTICA FORMAL
También se conoce como Sistema de estructuracion que
difiera en el siguiente cuarteto ordenado:
1)
1) Un
conjunto finito "N" de símbolos
2) Un conjunto finito "T" de símbolos
terminaciones. en donde N n T= 0
3) Un subconjunto finito ilP" de ((N uT)* - TA ) X (N
uT)* llamado conjunto de configuraciones o reglas de producción.
4) Un símbolo inicial Go e N.
Se expresa en forma sintética como G == (N, T, P^ oo). Es
muy importante aclarar que esta nomenclatura, al igual que en algunos otros
casos de los temas tratados en este curso, se pueden tener algunas diferencias
según el autor de la referencia que se consulta.
E! conjunto P es el más importante en la definición de una
Gramática.
EJEMPLO:
Diseñar una Gramática Forma) cualquiera y determinar alguna
cadena del Lenguaje que genera:
G=(N,T,P,ao)
N== {A,B,C,D}
T= {0,1 } -
<TO={A}
P= {A->ODA, A^BD1, A^CO, '^ ,,
B->1C1, B ^11, i1 ^
C-^10A1, C-^010, C1 -^A,
D-^CO, D-^1, D1->C}
Se acostumbra
utilizar las letras mayúsculas para designar los no terminales. Los
terminales son aquellos
Una cadena s e L(G) sería:
A-s> ODA=>01A^. 01CO.^>
010100 , que es lo mismo que (01)2 O2
En este caso se cuenta con ,toda una serie de composiciones
(que consisten en posibles sustituciones de una subcadenas por otra) en el
conjunto P, disponibles para
utilizarse en el orden que se desee, y las veces que se
requieran.
Las composiciones no son substituciones bidireccíonales.
N uT =-> Alfabeto de la Gramática : ZG.
T => Alfabeto
de el Lenguaje : SL
-^ Las reglas de producción deberán:
a) Estar formadas exclusivamente con elementos de N uT
b) Tener en .§y lado izquierdo aj menos
yn_símbQ!aJiQjemiioaL.
EJEMPLO:
Explicar por qué razón en la definición del diseño de las
composiciones se dice que éstas son de la forma ((N uT)* - T ) X (N uT)*.
N= {X,Y,Z} T=
{a,b} N uT = { X, Y, Z, a. b} ^QT^
(N uT)*: A, XY, abb. bZX, ZaY, aYZb, aabba. ... (posible lado derecho)
T*: ^, a, b, aa, ab, ba, bb, aaa, aab, ..., bbb, ... C^Üti^ - T^
(N u T)* - T* == XY, bZX, ZaY, aYZb,... (posible lado izquierdo)
NOTA: (N uT)* - T* contiene las cadenas formadas con los
elementos de N uT pero conteniendo al menos un elemento de N.
GRAMÁTICA MAL ESTRUCTURADA
En ocasiones, las reglas de producción para una Gramática
Forma! se diseñan con ciertos "errores de Lógica".
EJEMPLO:
Describir los errores que hacen de la siguiente una
Gramática mal estructurada.
G=(N,T,P,oo)
N= {A.B.C.D} T= {0,1} oo={A}
P= {A->B1. A-^BC, AC-^CA, C-> CA, DA->01,
D->Á.}
* No existe regla alguna que especifique lo que produce B.
* Ninguna regla produce D.
* Verificar que no haya reglas inútiles (nunca utilizadas),
como es el caso de la combinación DA, que nunca se presentará al derivar
Se recomienda que todo símbolo no terminal aparezca por lo
menos una vez en cada lado. de al menos una regla de producción (y en
composiciones distintas), con
excepcion del símbolo inicial que puede no aparecer al lado
derecho.
Es la acción de sustituir en una palabra no terminal,
partiendo del símbolo inicial y hasta llegar a una cadena con terminales
solamente, una subcadena por su
equivalente según las reglas de producción; se expresa: A
=> B.
Se expresa como A -> B, donde A e [N uTJ* - T y B e
(N__uT)*, y en ellas se Especifica que tiene que se puede sustituir al
construir una cadena.
Consiste en expresar las características de producción de
una Gramática presentemente por medio de una expresión algebraica, o bien, por
medio de enunciados si lo anterior no es posible. No existen métodos generales
para caracterizar los Lenguajes pero se debe tener en cuenta el orden en el que
se aplicarían las composiciones si es que van a ser usadas.
EJEMPLO:
Caracterizar la Gramática G = ({R, S}, {a, b}, {R ^ bR, R
-> aS, S ^ bS, S -> b} ,
{R}) \
R --> bR
bbR
bbbR
La caracterización sirve para expresar las características
que tienen 3 cadenas de üri-Lenguaje Formal. A partir de ella se pueden deducir
innumerables cadenas, así
descubrir simple vista si una cadena pertenece a si mismo
Por ejemplo: Las cadenas originadas pc"Na Gramática anterior tienen una
sola a y terminan en b, por to que:
b^b8 e L(G)- ab8 e L(G) bWa ^ L(G) b(r)a
^ L(G)
EJEMPLO PROPUESTO:
Diseñar la Gramática que produce L(G) = { On1n | n e N }.
¿Y sí L(G)
No?.¿YsiL(G)=={Om1n|m,neNo}?.
{OfT | n e
Una Gramática genera en la mayoría de los casos un
Lenguaje, con un número infinito de cadenas pero todas ellas de la misma
estructura gramatical
Dada una Gramática G puede construirse un Lenguaje L(G),
utilizando composiciones para derivar en las cadenas que constituyen el
Lenguaje
L(G)={s s eT* A
oo"=>s}
GRAMÁTICAS EQUIVALENTES: n
Dos gramaticas Gi Y G2 se llaman equivalentes, en símbolos
Gi - G2, sl.L(£i} =
.LíGá. S* dos Gramáticas son equivalentes, entonces tendrán
los mismos símbolos terminales y muchos problemas el mismo símbolo inicial Sin
embargo, las
composiciones serían diferentes, y muy posiblemente,
también el conjunto de los símbolos no terminales.
Se deja al alumno proponer ejemplos de Gramáticas
equivalentes.
Nótese como, si bien una Gramática debe producir un solo
Lenguaje, un Lenguaje puede ser generado por distintas Gramáticas. Esta
afirmación concuerda con el
concepto de función, recordando que L == f (G).
FORMA NORMAL DE BACKUS (BNF)
Fue la primera notación formal cuyo empleo se ha
generalizado para describir la sintaxis dé un lenguaje de fomación, Ja creó
John Backus_en 1960. Algunos
lenguaJesdé a\ia nivel como Fortran, Pascal yAIgol pueden
representarse en BNF.
La notación se adoptó de inmediato para describir Algo! 60.
Después se supo que Panini había usado una notación similar a la BNF entre 400
y 200 A.C. para describir
las complejas reglas de la Gramática del sánscrito.
Las siglas BNF comenzaron como abreviatura de Backus Normal
Form, y después
se transformo su interpretación en Backus - Naur 1-orm para
reconocer contribuciones de este último como editor del informe de ALGOL 60.
Unavariante surgida posteriormente fue la BNF extendida. Estas son
representaciones. En combinación conlos-iliagramas o esquemas de :sintaxis (que
son en sí reglas de producción en modo gráfico), pueden utilizarse para
expresar de forma como seconstruyen los programas en un Lenguaje de
programación de alto nivel.
Backus -l Naur Form
' Símbolos no terminales: <A>
-Composiciones;
A ::^B
' Composiciones múltiples:
A::^B |C | D | ... | L
i I . ,
1
EJEMPLO:
Transformar la' siguiente Gramática a la BNF
correspondiente.
G = ({R, S}. {a, b}. {R -^
bR, R -> aS, S -. bS, S -> b}, {R})
G=({<R>,
<S>},{a, b},{<R> ::= b<R> | a<S>, <S> ::==
b<S> | b}, {<R>})
En el ejemplo; anterior se empleó para fines didácticos la
conversión a la notación de BNF de una Gramática simple, siendo ésto
inadecuado. En realidad se la debe
utilizar en casos en los que para nombrar a los símbolos no
terminales se deba emplear más de un solo carácter (no confundir símbolo con
carácter).
EJEMPLO:
Mostrar que s=-318 e L(G), donde G = ( N, T, P, ao)
N = { <entero>. <entero c/signo>, <entero
s/signo>, <dígito> }
{+,-,0,1,2,3.4,5,6,7,8,9}
T=
P= í
<entero> ::= <entero c/signo>
<entero c/signo> ::= + <entero s/signo>
<entero s/signo>,
•<eníero s/signo>;
<entero s/signo> ;;= <dígito> I <dÍgito>
<entero s/signo>
<dígito> ::0/1/2/3/4/5/6/7/8/9)
GO = { <entero> } (Es lo que produce la Gramática),
NOTA: Existen otras Gramáticas equivalentes a la anterior
para el mismo fin.
<entero> --.'. <entero c/s¡Qno> =>
-<;entero s/s¡Qno> -> -<dÍQÍÍto><entero s/s¡qno> =-->
-<d¡Qito><dÍQ¡to><entero s/signo> ->
-<díQito><dígito><dígÍto&> =>
-3<dígÍtQ><dígito> •=> -31<dÍQito>
=>-318
La Gramática genera todos los números enteros válidos y
nada más. Por tanto produce, por ejemplo 1649, -65, +1000000, etc. pero
no-36.2. ni 12., ni 67+.
EJEMPLO: , i ^
¿De qué frases consta la siguiente Gramática? \
• ^' \ •' i ' 'l ")
P = { <frase> ;:== <sujeto>
<predicado><punto>.
<sujeto> ::^<sustantivo>,
<predícado> ::= <verbo intransitivo> |
<verbo transitivo> <objeto>,
<punto> ::= . ,
<sustantivo> :;- Rubén | Sandra,
<verbo trans¡tivo> '.:=- odia | golpea, •
•
<verbo Íntransitivo> :;= duerme,
<objeto> :;= a <sustantivo>} i i
Respuesta:
Rubén odia a Rubén.
Rubén golpea a Rubén.
Sandra odia a Rubén.
Sandra golpea a Rubén
Rubén duerme.
Rubén odia a Sandra-
Rubén golpea a Sandra.
Sandra odia a Sandra.
Sandra golpea a Sandra.
Sandra duerme.
Aún los Lenguajes Formales finitos, tienen una Gramática
Formal que los produce. En el Procesamiento de los Lenguajes Naturales, área de
la Inteligencia Artificial, se
emplea la Teoría de los Lenguajes Formales para su diseño.
Investigúese sobre el trabajo desarrollado por Noam Chomsky para establecer sus
primeras bases.
EJEMPLOS DE ALGUNAS REGLAS DE PRODUCCIÓN DE
TURBO PASCAL EXPRESADAS EN BNF
<ASIGNAClÓN> ::^ <IDENTIFICADOR> :-
<£XPRESIÓN>
<SENTENCIA> ::= <SENTENClASIMPLE> |
<SENTENC|A COMPUESTA>
< SENTENCIA COMPUESTA> ::- BEGIN <SENTENClAS>
END
<SELECTIVA SIMPLE> ::= IF <COND!CIÓN> THEN
<SENTENCIA>
<SELECTIVA DOBLE> ;:= IF <CONDICIÓN> TH£N
<SENTENCIA> ELSE <SENTENCIA>;
<SELECTIVA MÚLTIPL£> ::= CASE <SELECTOR> OF
<L1STA DE CONSTANTES^ <SENTENCIAS 1>;
<LISTA DE CONSTANTES> : <SENTENC1AS 2>;
[ELSE <SENTENC1A POR DEFECTO> ]
! END;
<PARA> ::= FOR <ÍNDICE> := <VALOR
INICIAL> TO <VALOR FINAL> DO <SENTENC1A>
<MIENTRAS> ::= WH1LE <CONDIC1ÓN> DO
<SENTENCIA> ;
<REPETIR> ;:=- REPEAT <SENTENCiA> UNT1L
<CONDIC1ÓN>
<FUNC)ÓN> ::= FUNCTION <IDENTIFICADOR>
(<PARÁMETROS FORMALES>) : <T1PO>;
De la misma manera cada Lenguaje de Programación tiene su
colección de reglas de producción que definen su sintaxis. Esta colección de
composiciones son el punto de
partida para el diseño de un compilador de acuerdo a las
especificaciones deseadas. También se pueden emplear eficazmente para
comprender programas escritos en
Lenguajes no conocidos por el estudiante y para comparar
Lenguajes de Programación.
TAREA PARA EL ESTUDIANTE:
Investigar en algún texto sobre un lenguaje de programación
típico, cómo se expresan sus reglas sintácticas, ya sea en BNF, BNFE o en
diagramas de sintaxis, además de comprender cómo se pueden transformar éstas
entre sí.
Es una clasificación de cuatro clases de Lenguajes Formales
cuya definición, realizada por Noam Chomsky en 1959, marcó el comienzo de esta
teoría. Estas clases de Lenguajes se denominan tipo O, 1, 2 y 3, siendo cada
una de ellas un subconjunto de la anterior. Cada tipo puede definirse por una
clase de Gramática o Lenguaje, o por una clase de Autómata, como se indica en
la tabla.
GRAMÁTICA DE CHOMSKY (TIPO 0)
No existen restricciones-en las reglas de producción,
excepto que cumplan con las características para tener sus composiciones
elaboradas en forma correcta.
EJEMPLO:
Diseñar una Gramática de Chomsky cualquiera.
G=(N,T,P,oo)
N={A.B,C,D} T={0,1,2} , GO={A}
P={A->B02 D01 0.
AB->BA D. C -> OA 1B2A 1
D->AO B02 2 \, OB->A,
B-> CA} -\
GRAMÁTICA SENSIBLE AL CONTEXTO (TIPO 1)
Toda composición es de la formal a A p -> u 5 pj donde:
a, p e (N uT)*; A e N; 5 e (N u T)^ Se interpreta como que el prefijo derecho
sea igual que el izquierdo, que el
sufijo derecho sea igual que el izquierdo, que el infijo
izquierdo sea un no terminal, y que el infijo derecho sea cualquier cosa con
excepción de Á..
EJEMPLO:
Diseñar una Gramática Sensible al Contexto cualquiera.
G=(N,T,P,<7o),
N= {S,A, B.C, D, E} T= {a, b,c}
oo = { S }
P = { S -> aAB
B -> De,
CD -^ CE
DE -> De,
aB,
r\ -7 d/AV_/
D -> b,
CE ^ DE
Ce -> Dcc}
aC,
Obtener una cadena s e L(G) y demostrar que en muchos casos
no es muy recomendable trabajar con este tipo de Gramáticas debido a la
¡ndecibilidad
S => aAB r^> aaACB => aaACDc => aaACbc =^
aaaCCbc => ?
L(G) = { ambnc[n | m, n e N}, el cual es un Lenguaje
sensible al contexto.
Dado que | a A p | ^ | a ó P . una característica de las
derivaciones en una Gramática sensible al contexto, es que la longitud de la cadena
nunca se decrementa al derivar.
(TIPO 2)
Sí toda derivación es de la forma A -"> 6 donde A e
N y ó e (N UTT; el lado izquierdo de las composiciones es un solo símbolo no
terminal y el derecho no
deberá ser ^.
EJEMPLO:
Diseñar una Gramática Libre de Contexto cualquiera:
G-(N,T,P,cyü)
N- {E,F,G,H} T= {q,r,s}
go={E}
P ^ {E->FGs rE GF
F ->Hq r,
G -^ Ers Fq SE
H->GEs sG q}
s,
En una Gramática de este tipo nunca se presenta el caso de
una derivación que no se pueda concluir.
GRAMÁTICA REGULAR (TIPO 3)
Si toda composición es de una de las formas A -> a p
bien A -> a B donde A, B e N y a e T. Al derivar una cadena aparece un solo
símbolo no terminal a la vez; la
cadena se va formando símbolo a símbolo de izquierda a
derecha.
Algunos autores consideran como Gramática Lineal a la que
cada producción contiene a lo sumo, un no terminal en el lado derecho de las
reglas. Esta es lineal
derecha si un no terminal puede aparecer, únicamente, como
su símbolo extremo derecho, es decir si cada producción tiene una de las formas
A -xo o A -> ü)B,
donde A. B son no terminales y co es una cadena de
termínales. Una Gramática lineal izquierda puede definirse como la que contiene
reglas A -HO o A -> BO).
Ejemplo de Gramática lineal derecha:
P = {S -> a? | abT | abcT | abcd T -> S | cS | bcT | abe | abcd } que
en sí es una Gramática libre de contexto. Téngase en cuenta que este tipo de
Gramática no forma parte de la Jerarquía de Chomsky, y que
su empleo es más bien debido a que en este caso se puede identificar fácilmente
la derivación que nos
lleva a alguna cadena determinada.
Ejemplo de Gramática Regular:
G= (N, T, P, oo )
N= {A, B,C, D. E} T
P = { A -> xA | yC | x,
C -> yA | xC | yE,
E^yB|yE|y }
{ x, y, z}
B -> xC
D-->xA
oo = { A }
xD | yE | x,
xB.
A => xA -^ xyC ==>
xyyE -> xyyyE ==> xyyyy .
Nótese como las cadenas se construyen símbolo por símbolo y
de izquierda a derecha en una forma muy sencilla. El no terminal siempre aparece
como sufijo.
COMENTARIO FINAL SOBRE LAS GRAMÁTICAS: Existen
algunas diferencias en los criterios para clasificarlas en alguno de los cuatro
t'pos; por ejemplo, algunos
autores consideran que. Jas.-reglas lambda son válidas en
las de tipo 2, otros reconocen a las Regulares por izquierda y por derecha;
algunos opinan que en la
Gramática sensible al contexto basta que las reglas tengan
menos símbolos a ta izquierda.que a la derecha. Ha sido considerada la
definición más provechosa para
los objetivos del curso.
DERIVACIÓN A LA IZQUIERDA Y A LA DERECHA:
Sea G una Gramática libre de contexto y s una cadena de
L(G); se le llama derivación a la i2quierda^i al derivar para obtener la
cadena, se sustitulle siempre el
símbolo no terminal qué esté más a la izquierda.
Similarmente, la derivación ala derecha ocurre cuando el símbolo que se deriva
es el de más hacia la derecha.
Estos dos tipos de derivación no se pueden expresar por
árboles de derivación, porque en éstos no sé conoce el orden en que se han aplicado
las reglas.
Es una forma de indicar como una Gramática independiente de
contexto deriva una palabra particular. Los nodos de las hojas del árbol son
símbolos terminales y
los nodos interiores son los no terminales. Puede ocurrir que secuencias de derivación
diferentes correspondan al mismo árbol de derivación.
Es útil en muchos casos presentar las derivaciones como
árboles. Estos diagramas conocidos también como árboles de análisis gramatical
suponen una estructura
$obre las palabras-de. un-lenguaje, y son de utilidad en
aplicaciones tales como la compilación de los lenguajes de programación.
Si un vértice inferior se denomina A y sus hijos están
etiquetados con Xi Xa ... , Xn entonces A - x^xa... Xn esuna regla de producción
dé la Gramática.
¿Por qué no se pueden usar los árboles de derivación en
Gramáticas que no sean libres de contexto?
EJEMPLO:
Dada G = ({a. b}, {0,1}. { a -> Oab a1 | bO.^. b -->
Oa 1 }, {a}), determinar alguna
cadena s | s e L(G):
a => Oab =,0a1b =>
Oa10a = Oa110a = ObOHOa = ObOHObO = 010110b0
01011010 2/4 n\2 s=(oir(w)
s =8
Su árbol de derivación equivalente es:
<a>
<0> <a>
<b>
<a> 1 O <a>
<a> <1> <b> O
<b> o 1
8=01011010
1
El árbol se lee en forma similar a como se hace con los que
se utilizan en las estructuras de datos: primero en profundidad.
Obsérvese como de la derivación simple al árbol no hay
ambigüedad, pero sí cuando se da como dato el árbol y deseamos saber el orden
en que ocurrieron
las derivaciones que la produjeron. Como en muchas
ocasiones no importa ese orden, esto no representa problema alguno.
EJEMPLOS PROPUESTOS:
1) Determinar el árbol de derivación para s = 000 en la
Gramática anterior.
2) Desarrollar una frase válida de un lenguaje natural
(como el castellano) utilizando
las reglas de producción adecuadas.
3) Diseñar el árbol de derivación para la expresión ( a + b
) * c . ¿Cuáles serían su
árbol de análisis sintáctico y su árbol sintáctico?
4) Diseñar un árbol que genere la cadena discurrí ;= b * b
- 4 * a * c.
5) Dada G = ( { S, A }, { a,
b }, { S -> aAS a, A -> SbA ba }, { S }), SS
demostrar con un árbol de derivación que a2 b2 e L(G).
Una Gramática puede tener más de un árbol de derivación que
genere una cadena
determinada. Para demostrar que una Gramática es ambigua lo
único que se
requiere es encontrar una cadena que tenga más de un árbol
de derivación que la
produzca. En contraposición, la unívoca es una Gramática
libre de contexto que tiene
asociado un solo árbol de derivación para toda cadena de
L(G).
Un Lenguaje L se llama UNÍVOCO si existe una Gramática
unívoca que lo genere y
si no es así se lo llama AMBIGUO.
Como la cadena a - b + c se puede producir por cualquiera
de los dos árboles, la
Gramática G es ambigua.
NOTA: Para el diseño de un compilador se utiliza una
Gramática no ambigua o bien
una ambigua con reglas adicionales para resolver las
ambigüedades.
EJEMPLOS PROPUESTOS:
a) Determinar si G es ambigua ó unvigua
P = { <cadena> ::^ <cadena> + <¡d>
<cadena> - <id> <¡d>,
<id> ;:= a b c d} Considérese la cadena a b +c.
b) Determinar si G es ambigua o unívoca:
G=({E}, {(,).+,*. id}, {E^E+E EA E
(E)
¡d }. { E }),
En este caso, como la variedad de identíficadores válidos
es muy grande, se
considera en la teoría de compiladores como si id fuera un
terminal definido.
FORMA CORRECTA PARA GENERAR REGLAS DE
PRODUCCIÓN EN GRAMÁTICAS NO AMBIGUAS
Se toman como modelo las dos operaciones múltiples del
punto anterior, y se aplica
de manera similar para cualquier otra operación válida de
un Lenguaje de
programación, que tiene que corresponder a alguno de los
dos casos.
Reglas para asignación múltiple (ASOCIATIVA POR LA
DERECHA):
<asigna>
<íd> = <asigna>
a <id> = <asígna>
b <¡d>
c
P ^ { <asigna> ::= <¡d> ^ <as¡gna> |
<id>, <¡d> ::=- a | b | c |...}
Reglas para sustracción múltiple (ASOCIATIVA POR LA
IZQUIERDA)
<resta>
<resta> = <id>
<resta> <íd> c
<id> b
a
GRAMÁTICAS CON LAMBDA O DECIDIBLES:
Son aquellas en las cuales Á e L(G). Debe existir una
derivación que nos lleve a X
partiendo del símbolo inícíal-
Ejemplo
P ^ {A ^ Á, . .} Con Reglas k Si decidible.
P =- {A ^ B, B -^ Á, ...} Con Reglas ^ Sí decidible.
P = {A -> Bx, B > ?.,
...} Con Reglas \ No decidible
TEOREMA:
Si U y La son Lenguajes regulares, entonces Li u Ls, Li •
Ls, Li" , \-z , también son
Lenguajes regulares.
JERARQUÍA DE OPERADORES DE LENGUAJES: Si una expresión
compuesta (
tal como Li * • L2 • L3 u i.^} contiene varias indicaciones
de operaciones válidas con
Lenguajes, éstas se efectuarán en el siguiente orden:
a) Paréntesis
b) Cerradura c)
Concatenación d) Unión.
TEORÍA DE COMPILADORES
Las Gramáticas tipo O y 1 muestran un buen número de
propiedades indecidibtes. En
las Gramáticas de tipo O, por ejemplo, no se puede
determinar algorítmicamente sí
una frase dada es producto de ella o no; es decir, no se
puede saber si una Máquina
de Turing diseñada para reconocer esas frases se detendrá o
no durante el
transcurso de esa computación.
La teoría de la computabilidad ha permitido descubrir
muchas propiedades de los
Lenguajes y sus reconocedores, y ha permitido también el
diseño de los Lenguajes
de programación y de sus correspondientes Autómatas
encargados de reconocerlos
y traducirlos a expresiones más simples: los compiladores.
La Gramática que describe a los Lenguajes de programación
usuales es de tipo 2 y
el analizador sintáctico de un compilador es un Autómata de
pila. Así mismo, el
analizador lexicográfico de un compilador es up Autómata
finito, porque la Gramática
que se emplea en la definición léxica de un Lenguaje como
Fortran o Pascal es de
tipo 3.
De hecho, el ejemplo de una Gramática tipo 3 mostraría como
se pueden obtener los
nombres de los componentes Léxicos para uno de esos
Lenguajes.
Et conocimiento sobre los conceptos teóricos de los
Lenguajes formales se remonta
a 1936, fecha anterior al surgimiento de las computadoras
electrónicas digitales.
Como dato interesante, se puede comentar que el primer
compilador de Fortran
requirió para su implantación de 18 años de trabajo en
grupo. Con las nuevas
técnicas, estudiadas en este curso, un compilador de
calidad aceptable se puede
diseñar en un curso de un semestre.
Programa
Fuente
(ASCII) COMPILADORP-> programa Objeto
(máquina)
Mensajes de error
Programa Fuente
Analizador Léxico
Analizador Sintáctico
Analizador
Semántico
TOKENS O COMPONENTES LÉXICOS:
Es cualquiera de los símbolos terminales que se manejan en
la construcción de
líneas de programa en un Lenguaje de alto nivel. Se definen
como un par ordenado
Token = (Tipo, Valor).
EJEMPLO:
Sea discrim := b * b - 4 * a * c ; if discrim > O then .
fragmento de programa-
(Identificador, "discrim") (operador, :=)
(operador, *)
(operador, -)
(identifícador, "a") (identifícador, "c")
(palabra reservada, ií) (op. relación, >)
(palabra reservada, then)
determinar los tokens de este
(idenííficador, "b")
(constante, 4)
(separador, ;)
(constante, 0)
CASO DE ESTUDIO
Hacer un seguimiento de la línea de programa posición :=
inicial + velocidad * 60,
y explicar como se va procesando en cada una de las etapas
de un compilador.
ANALIZADOR LÉXICO
Función: Comprobar la correcta construcción de los tokens.
A ciertos componentes
léxicos (como los id) se les introduce en la tabla de
símbolos-
Errores típicos:
Identifícadores mal estructurados: 4AC, ©quantum, yo.tu,
posición, etc.
Constantes mal estructuradas: +-4.6789, 6,900, 90+25, etc.
Operadores mal estructurados: :=,=>, o (en C), etc.
Palabras reservadas mal estructuradas: PRfNTF, print,
suitch, etc
ANALIZADOR SINTÁCTICO
Función: Comprobar el correcto acomodo de los tokens. En
esta etapa se genera el
árbol sintáctico de la expresión.
Errores típicos:
Paréntesis mal anidados:
(()((),())(()), 0(0) ) ((), etc.
a + b ^ c. ...
d + * c, ... , etc.
ANALIZADOR SEMÁNTICO
Función: Revisa e! programa fuente para tratar de encontrar
errores de este tipo y
reúne información sobre los tipos de los datos. Si es
necesario, hace un ajuste de los
mismos.
Errores típicos:
Los indicados con el mensaje Type mismatch.
Cuando se usa una variable real como argumento de un for, o
subíndice de
una matriz, etc.
S¡ se suman matrices con vectores, etc.
GENERADOR DE CÓDIGO INTERMEDIO
Función: Algunos compiladores producen una representación
intermedia explícita
de programa fuente. Se puede considerar ésta como un
programa para una máquina
abstracta. Se propone como lenguaje el "código de tres
direcciones", en el que cada
instrucción tiene como máximo tres operandos.
temp1 := enteroareal(60)
temp2 :- id3 * temp1
temp3 := id2 + temp2
id1 .^ temp3
OPTIMIZADOR DE CÓDIGO
Función: Para mejorar e! código intermedio, de modo que
resulte un código de
máquina más rápido de ejecutar. Existe mucha variación en
!a magnitud de la
optimización que realizan tos distintos compiladores, e
inclusive, algunas
optimizaciones son triviales. Es importante que el
diseñador especifique qué
entiende por este término.
Considérese el siguiente ejemplo:
_a
temp4 := id4 *temp3
temp6 := Íd4 *temp3
temp4 := id4 *íemp3
temp6 := t2mp4
témpt ;=id3 '60.0
id1 ;= ld2 + temp1
GENERADOR DE CÓDIGO
Función:' Produce el código objeto, que por lo general
consiste en código
relocalizable o código ensamblador. Las posiciones de
memoria se seleccionan para
cada una de las variables usadas por el programa; después,
cada una de las
instrucciones intermedias se traduce a una secuencia de
instrucciones de máquina
que ejecuta la misma tarea. Un aspecto decisivo es la
asignación de variables a
registros.
Destino Origen
MOVF Bx, id3
MULF Bx. #60.0
MOVF Ax, ld2
ADDF Ax, Bx
MOVF id1, Ax
Para mayor información sobre este tema, consultar el texto
de Aho
mencionado en la bibliografía.
FORMA NORMAL DE CHOMSKY (CNF)
Se presenta cuando ef lado derecho en todas las reglas de
producción de una
Gramática libre de contexto consiste en un símbolo terminal
o exactamente dos no
terminales.
Considérese el siguiente ejemplo:
temp4 := id4 *temp3
temp6 ^ ¡d4 *temp3
temp4 ;=id4 *temp3
temp6 := temp4
temp1 ;=¡d3 *60.0
¡d1 := ¡d2 + temp1
GENERADOR DE CÓDIGO
Función: Produce
el código objeto, que por lo general consiste en código
relocalizable o código ensamblador. Las posiciones de
memoria se seleccionan para
cada una de las variables usadas por el programa; después,
cada una de las
instrucciones intermedias se traduce a una secuencia de
instrucciones de máquina
que ejecuta la misma tarea. Un aspecto decisivo es la
asignación de variables a
registros. ;
Destino Origen
MOVF Bx, id3
MULF Bx, #60.0
MOVF Ax, ¡d2
ADDF Ax, Bx
MOVF ¡d1, Ax
Para mayor información sobre este tema, consultar el texto
de Aho
mencionado en la bibliografía.
FORMA NORMAL DE CHOMSKY (CNF)
Se presenta cuando el lado derecho en todas las reglas de
producción de una
Gramática libre de contexto consiste en un símbolo termina!
o exactamente dos no
terminales.
Obsérvese que. para una Gramática en Forma Normal de Chomsky, el
árbol de
derivación para cualquier derivación está bastante bien construido
ya que, excepto
en las hojas, el árbol es binario.
EJEMPLO:
P1 ={S->xSy, S->xy}
P2 = { S -> XM. S -> XY, M ^ SY. X -^ x, Y ^ y}
L(G^)=={xtY neN}^L(G2) -•-Gi - G2
Observar que Gs está en Forma Normal de Chomsky.
TEOREMA
Si G es una Gramática libre de contexto, entonces existe otra
Gramática libre de
contexto G' expresada en CNF tal que G ~ G\
Comentario: También es posible hacer la conversión cuando la
Gramática tiene en
todas sus reglas al lado izquierdo un solo no terminal, y que la Gramática
no sea
decidible.
PROCEDIMIENTO PARA TRANSFORMAR UNA GRAMÁTICA
A LA CNF:
PASO 1 ) Se transforman las combinaciones de terminales y no
terminales, o bien
donde haya más de un terminal al lado derecho de las
composiciones. Para cada
Terminal a e P, se define un no terminal específico A, y la regla
A —^ a con lo que se
sustituye cada ocurrencia de a por A.
EJEMPLOS:
S->abMa
S ^ ABMA
A -^ a
B->b
- S^-xy
•XY
X-^x
Y-^y
PASO 2 ) Se transforman las reglas en las que en el lado derecho
hay más de dos
no termínales. Se hace de la siguiente manera: La regla N -> N1
N3 N3 ... N( se
sustituye por el encadenamiento de t-1 reglas:
N->N,Ri R.,-^N2R2
R^NaRs .. Rt-2-^Nt-iNi
PASO 3 ) Se transforman las reglas que contengan a la derecha un
solo símbolo no
terminal. Se hace de la siguiente manera:
Dadas las reglas:
Mr ->Nt-i NM >N,-2
... N2 -?-Ni
Si N1 -> A, entonces N( ->- A
Si N1 -> AB, entonces Ni --> AB
y se eliminan las composiciones innecesarias.
EJEMPLO:
A-^B, B-~>R, R->0 es
sustituida por: A->0
Los pasos anteriores se resumen en la siguiente tabla:
paso A-> B Exs:
1 B e (NUT)*-N* X-^aSb2
2 B >2 X >ST2
3 B e N X^U
EJEMPLOS PROPUESTOS:
1) Reducir a CNF la siguiente Gramática:
N={S.M, N} T={a, b, c } gO-(S}
P={ S -> cMNc ac, M -> aMa | c | MN,
N -^ bNb | c }
2) Reducir a CNF la siguiente Gramática:
N=4 A, B, C, D, F}
A-^xy B
>DEF - C->y
A->Bx
C-^DC D->xx
E->FA
E-^yCy
A-->xEx
B->zC
C^xyF
C-^FA
D^yB
D-^xE
F->AC
F-^B
SISTEMA DE
PROCESAMIENTO DIGITAL DE VOZ PARA EL
RECONOCIMIENTO
DEL HABLA
NIVEL ACÚSTICO NIVEL FONÉTICO
NIVEL LÉXICOG NIVEL
SINTÁCTICO NIVEL
S&-MÁNTICO NIVEL
PROSÓDICO
APLICACIÓN
MODULO II
MÁQUINAS DE
ESTADO FINITO
Es un Modelo abstracto de una máquina con memoria interna
primitiva. Se
puede considerar a un computador como una máquina de este tipo.
Una Máquina
de Estado Finito M consiste en:
a) Un conjunto finito I de símbolos de entrada.
b) Un conjunto finito O de símbolos de salida.
c) Un conjunto finito S de estados.
d) Una función estado siguiente f de S XI en S .
e) Una función salida g de S XI en O .
f) Un estado inicial Go > incluido en S.
Se expresa de manera sintetizada como: M = (I ,0 ,S , f, g, ^o).
En una Máquina de Estado Finito cuando ingresa un símbolo de
entrada ocurre
una Transición , que consiste en que primero se produzca un
símbolo en la salida y
posteriormente (pero de manera inmediata) exista un cambio de
estado-
Símbolo de salida = f (estado actual, símbolo de entrada) = g.
Estado siguiente = f (estado actual, símbolo de entrada) == f.
Sin embargo, si el estado actual fuese D, por ejemplo, la salida
podría ser 1,
aún con la misma entrada A.
Se emplea este modelo para representar todos aquellos sistemas en
los
que la salida no es función exclusiva de la entrada, sino también
de un estado
o situación actual
implícita en el mismo.
Ejemplos sencillos de Máquinas de Estado Finito:
a Máquina para venía de refrescos.
a Sistema tetefóntco.
a Circuitos secuencíales digitales.
" Juegos de combate,
EJEMPLO:
Representar ia Máquina de Estado Finito siguiente por medio de un
diagrama
de transición y por una tabla de transición.
i -{a,b}
.-
f= {f(qo,a-)=;q:i,
f(q1,a)=^,
f(q2,a)^qü,
g^gíqo.a^x,
g(qi,a)=x,
g ( q2. a ) ^ z,
0?{x,y.z}
S^{qo, qi, q2Í c,o={qo}
'f(qo,-b'),=.q^,-,
•f(q,,b).=qi^i:--
f(q2.b)=.q;i^
gCqo.b^^y^
g ( q-,,.b,) ^ z,-
g ( q2, b ) = yí
DIAGRAMA DE TRANSICIÓN DE M: Es un digrafo G, en donde los
vértices son
los estados; el estado inicial se señala con una flecha gruesa sin
origen. Si se parte
del estado q,r, y una entrada i proporciona una salida o, y se
cambia al estado q?,
se traza un arco dirigido de qm a qn y se marca como i / o.
Cadena de salida:
Sout=x z z
z x z x x
y
Estados recorridos:
qo q1 q2 q1 q1
q2 q0 q1 q2 q1
deia^> Una ventaja
significativa di Máquina de Estado Finito s si
diagrama de transición es que el comportamiento e puede analizar en una forma
sumamente sencilla.
S/i a b
qo qi,x q2,y
qi q^,x q1z
q2 qo,z qi ,y
s/ f 9
i a b a
b
qo qi q2 x
y
qi q2 qi x
z
q2 qo qi z
y
Las dos variaciones anteriores representan la tabla de transición,
el alumno
deberá elegir la que le resulte más adecuada. Esta representación
es muy
importante en la ¡mplementación en una computadora de la Máquina.
Dada una cualquiera de las tres representaciones posibles de M
debe ser
posible, sin ambigüedades, de obtenerse ¡as otras dos.
EJEMPLO:
Diseñar un diagrama de
transición y IOSJS conjuntos que definen a M.
EJEMPLO:
Diseñar una Máquina de Estado Finito que represente un sumador
binario en
serie.
10010010+
10100111=
100111001
Ejemplo de una
suma binaria en serie
De acuerdo al conocimiento, tanto, de la operación de la suma como
de las
Máquinas de Estado Finito, se determinan tos conjuntos:
1 = {00, 01, 10, 11 } 0= {O, 1 } S= {SA,CA} GO - { SA }
Comprobación de la suma anterior::
S,,, ^ 0-1 11 01 00 10
01 00 11
Soui ^1,0.0 1 1
1 0 0
SA •,5A CA- CA 'SA . SA
SA SA CA
La versión .previa ,de sumador tiene el inconveniente de que el
bit más
significativo se pierde si el resultado excede en un bit a la
longitud de los sumandos.
Proponer una variante al sumador anterior tal que el resultado lo
entregue Íntegro.
Sin embargo, no existe una Máquina de Estado Finito que pueda
realizar la
multiplicación binaria en serie- ¿Por qué?
EJEMPLOS PROPUESTOS:
Diseñar una M en cada inciso, considerando las especificaciones y
considerando como dato de entrada posible cualquier cadena de bits
válida. Tales
podrían ser cadenas
cómo 0010001110, 1101, 11111, 010101010, etc.
a) S¡ el dato de entrada contiene una cantidad par de 1 la salida
es 1, O en casocontrario.
b) Si la entrada es una cadena con una cantidad de 1 ¡gual a un
múltiplo de 3 la
salida es 1; O en caso contrario.
c) Si la entrada contiene dos o más bits en 1 la salida es 1; O en
caso contrario.
d) La salida es 1 si la cadena de entrada es exactamente 101; O en
caso contrarío.
e) La salida es 1 si la cadena inicia con 101; O en caso
contrario.
f) La salida es 1 si la cadena contiene exactamente un 0; O en
caso contrarío.
CONCEPTOS ADICIONALES:
Existen muchos diferentes tipos de Máquinas de Estado Finito para
modelar
máquinas de cómputo, que son llamadas Máquinas secuenciales. En el
tipo
tradicional las salidas corresponden a transiciones entre estados.
Las
representaciones de este tipo son conocidas como Máquinas de
Mealy, ya que
fueron primeramente estudiadas por G. H. Mealy en 1955. Existe
otro tipo importante
de Máquina de Estado Finito con salida, donde esta última es
determinada solo por
el estado. Se le conoce como Máquina de Moore, ya que E. F. Moore
introdujo este
tipo de Máquina en 1956. Se observa una estrecha relación de las
Máquinas de
Mealy con las de Estado Finito y de la de Moore con los Autómatas
de Estado Finito.
Una Máquina de Moore puede convertirse en una de Mealy equivalente
añadiendo más estados y haciendo las modificaciones necesarias.
Queda para el
estudiante investigar más sobre estas dos variantes de M.
MODULO III
AUTÓMATAS DE ESTADO FINITO
Es toda Máquina de Estado Finito en la que el conjunto de símbolos
de
salida es {O, 1 } y donde el
estado^actLíai^Qtefrwfía-eróltimtrdate-de-saiKia--
Aquellos estados para los cualeÍTiÍI último dato de salida es 1 se
denominan
estados de aceptación. En todo Autómata A debe haber cuando menos
un
estado de aceptación y se recomienda que no todos lo sean.
La razón por la que el conjunto O debe ser { O , 1 } resulta
razonable
debido a que se les utiliza en la computación y en la electrónica
digital, donde se
opera con et sistema binario. Se observa que en un compilador la
salida es,
precisamente, et algoritmo en lenguaje máquina, obtenido a partir
de la entrada
en caracteres ASCII.
La segunda característica surge de la necesidad práctica de saber
en qué
estado se termina el recorrido en el diagrama de transición para
una cadena de
entrada, sin importar los estados intermedios que se van
obteniendo. Si se
conoce el estado final, entonces también se deberá conocer cuál
fue el último bit
de la cadena de salida.
El Autómata de Estado Finito se emplea en vez de la Máquina,
cuando no
es tan importante considerar las salidas obtenidas al ir
recibiendo los símbolos
de la cadena de entrada, sino solamente conocer el último bit de
salida.
EJEMPL:
Trazar el diagrama de transmisión de la Máquina de Estado Finito
definida
en la tabla;: demostrar que es también ;un Autómata y determinar
el conjunto de
estados de aceptación:
s i
w x y
z
q0 q1,0 q2,1
q0,1 q1,0
q1 q1,0 q0,1
q1,0 q0,1
q2 q2,1 q1,0
q1,0 q0,1
Estados de aceptación: qo, q2 Estado de no aceptación: q1
Es un Autómata de Estado Finito en razón de que en todos los arcos
que
llegan a los estados de aceptación se tiene la indicación de bit
de salida en 1, y O
en los de no aceptación. Conociendo en cuál estado se termina el
recorrido en el
Autómata, se puede conocer cuál fue el último bit de salida aún
sin conocer la
cadena de entrada.
Sin= y x
x z w y x
w // cadena de entrada.
qo qo q2 qi qo qi qi qo
qi // estados recorridos.
SÍ un Autómata de Estado Finito recibe como dato de entrada una
cadena o arreglo, se puede concluir el recorrido en el Autómata o en un estado
de
aceptación o en uno de no aceptación; la clase de estado en la
cuál se termina establece cuando una cadena es aceptada por el Autómata. Como
el recorrido
finalizó en este caso en un estado de no aceptación, la cadena
vxxzwvxw se considera que no es aceptada por el Autómata, ésto significa que no
cumple
con las especificaciones que se dieron para su diseño.
La tabla de transición para el Autómata, ya simplificada,
quedaría:
S/I w x y z
q qi q2 qo q1
qi qi Qo qi qo
q2 q2 q1 q1 qo
DEFINICIÓN FORMAL DE AUTÓMATA DE ESTADO FINITO
UN AUTÓMATA DE ESTADO FINITO CONSISTE EN:
a) Un conjunto finito I de símbolos de entrada.
b) Un conjunto finito S de esíados-
c) Una función estado siguiente f de S x I en S.
d) Un subconjunto A S de
estados de aceptación.
e) Un estado inicial go E S.
Se expresa en notación de conjuntos como: A = (1 , S , f, A , ao).
Nótese que en las tres representaciones de un Autómata, el
especificar los
estados de aceptación hace innecesario definir la función g, por
obviedad.
Para el Autómata expresado en el ejemplo anterior, se tiene:
I =={w,x, y. 2} S=={qo.qi,q2} A = { qo,q1,q2 } go={qo}
f= {f(qo,W) = q1,,.. , f(q2,z)=qo} <———son 12 en total.
AUTÓMATAS EQUIVALENTES
Si dos Autómatas aceptan exactamente las mismas palabras, se dice
que tales son equivalentes. El conjunto I debe ser el mismo para ambos,
mientras
que ao y S pueden variar y la función f necesariamente cambia
entre ellos.
EJEMPLOS PROPUESTOS:
1) Diseñar un Autómata Finito que acepte únicamente los arreglos
con I = {a, b }
pero que no contengan a.
Sm = un n e Ko
2) Diseñar un Autómata Finito que acepte cadenas no nulas formadas
con los
símbolos del conjunto I = { a. b, c } y que no contengan ni a ni
c.
S,n = un n e K
3) Diseñar un Autómata Finito con 1 :=: { a, JÜ } que acepte
cadenas con una
cantidad impar de letras a.
4) Diseñar un Autómata Finito con 1 = { a, b } que acepte palabras
en las que
siempre que aparezca una b esté seguida necesariamente por una a
(sin dos
letras b consecutivas).
5) Diseñar un Autómata Finito con t = { a, £»} que acepte arreglos
que inicien
con baa.
6) Dado el diagrama de transición determinar:
a) ¿Se puede transformar esta Máquina en un Autómata Finito?
b) ¿Qué sistema real representa?
EJEMPLO:
Diseñar e implementar un Autómata que acepte los nombres de identificadores
válidos de un lenguaje de programación típico como C o Pasca!.
Este diseño es un pequeño subconjunto de un analizador léxico.
Se definen las clases de los símbolos de entrada que se consideran
en los arcos como tipos de datos para simplificar la representación del
diagrama:
dígito: 0. 1,2,...,9
letra: A, B, C, ... , Z, a, b, c, ..,z._.
. otro: -*-,-,©, ;,sp,
-$,%, ...
Se tomará como base el criterio de que un identifícador inicia con
una letra y después puede llevar dígitos y/o letras, pero nunca caracteres
diferentes a
estos dos tipos.
Al dibujar el diagrama de transición se debe tomar en cuenta que
por conveniencia los arcos que corresponderían a situaciones de no aceptación
se
omiten, quedando como entendido que irían todos a un estado de
rechazo. En realidad el estado qi se puede omitir debido a que llegando a él,
de todos modos
la cadena no va a ser aceptada, pero se incluye para que con tres
estados el ejemplo sea más demostrativo.
La primera versión de la implementación puede ser la siguiente:
Estado <- O
LEER siguiente símbolo de entrada
MIENTRAS no (fin de cadena ) HACER
OPCIÓN (Estado) DE
0: SI ( Símbolo actual = letra )
ENTONCES ( Estado ^ 2 )
SINO SI ( Símbolo actual = dígito)
ENTONCES ( Estado <- 1 )
SINO (Error_rutina)
1: Error_rutina
2: SI (Símbolo actual = letra)
ENTONCES ( Estado <- 2 )
SINO SI ( Símbolo actual = dígito )
ENTONCES (Estado <-2)
SINO ( Error J-utina )
, FINOPCIÓN
LEER Siguiente símbolo de entrada
FINMIENTRAS
SI ( Estado =2 ) ENTONCES (Error_rutina)
Sin embargo, la opción anterior no debe utilizarse para
implementar un Autómata, pues en un diseño en el que existan varios estados con
muchas entradas posibles, como se podrá observar, resultaría en una instrucción
alternativa múltiple con un rango gigantesco.
Una segunda versión, mucho más práctica, utiliza una tabla de transiciones
en la cual se consulta cuál será el valor del siguiente estado. La gran ventaja
de esta variante es que para cambios en el diseño original del Autómata, las
modificaciones se hacen en la tabla solamente.
APLICACIÓN DE AUTÓMATAS Y MÁQUINAS DE ESTADO
FINITO
MÁQUINA PARA VENTA DE REFRESCOS:
Diseñar una máquina que reciba monedas de 5. 10 y 25 centavos y que
cuando complete 30 i entregue al usuario, una lata con refresco.
Primera versión (como Autómata):
I ={5, 10, 25}
S ={0, 5. 10, 15. 20, 25. 30+}
oo = { O }
A = { 30+ }
Limitaciones del modelo propuesto anteriormente:
a No regresa el cambio,
pues la salida es exclusivamente, entrega o no
entrega una lata de refresco, dependiendo si se llega al estado de
aceptación.
a La salida consiste en
un solo tipo de refresco por esa misma razón.
a Para regresar al estado
inicial se debe contar con una entrada que
reiniciaiize e! sistema.
Segunda versión (como Máquina):
I ={5, 10.25.Bn.Bd}
O = {n, 5, 10, 15, 20, 25, Normal, Dieta }
S ={0.5, 10, 15.20.25,30}
<yo = { O }
CIRCUITOS DIGITALES SECUENCIALES
RECONOCEDOR DE IMPARIDAD DE PULSOS.
Encontrar un Autómata Finito cuyo comportamiento corresponda al del circuito anexo, en que los estados
finales correspondan a una salida 1.
Supóngase que existe el tiempo suficiente entre cada cambio de los
valores de la entrada para que las señales se propaguen y para que la red
alcance una configuración estable.
EJEMPLO: Representar por medio de un Autómata el siguiente
circuito digital secuencia!. No tomar en cuenta la posible inestabilidad en el circuito.
S / I 0
0 0 1 1 0 1 1
a b a
b a b a
b a b
0 0 1
1 1 1 1 1 1 1
0 1 1
1 1 1 0 1 0 1
1 0 1
1 1 0 1 1 1 0
1 1 1
1 1 0 0 1 0 0
s/I 0
0 0 1 1 0 1 1
q0 q3 q3 q3 q3
q1 q3 q3 q1 q1
q2 q3 q2 qs q2
q3 q3 q2 q1 qo
Una ventaja de modelar matemáticamente los circuitos digitales
secuenciales es que el análisis es más sencillo en el diagrama de
transición que en el diagrama electrónico. Además ésto ha
permitido la
creación de aplicaciones como Workbench o Spice.
Diseñar et diagrama de transición correspondiente.
La anterior es la tabla de transición de una Máquina de Estado
Finito.
La salida y el siguiente estado no se consideran cuando la entrada
(en el
reloj) es O, porque éstos no ocasionan acción alguna en el
circuito.
El circuito contador de tres bits se obtiene a partir de tas
ecuaciones
para Di, Da y Ds, recientemente obtenidas.
Nótese que las tablas de transición se empleaban en estas
aplicaciones, aunque sin haberlas justificado, en cursos de
electrónica
digital. Para obtener mayor información detestas aplicaciones
consúltense
libros de esta materia.
Tabla de verdad para el Flip Flop Tipo D:
D CK Qn Qn+l
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1
APLICACIONES EN INTELIGENCIA ARTIFICIAL
EJEMPLO:
a) En la orilla norte de un río se encuentra un hombre junto con
un lobo,
una gallina y una cubeta con maíz- Hay un bote con capacidad
suficiente
para transportar al hombre y otra cosa. Todos los elementos deben
cruzar
al río sin que queden solos lobo-gallina o gallina-maíz. ¿Cómo se
resuelve
el problema?
Hombre (H), Lobo (L), Gallina (G), Maíz (M)
¡ =• { H, HL, HG, HM }
Indica quién está cruzando el río.
b) Redes Neuronales: .Históricamente, los Autómatas Finitos
se utilizaron
por primera vez para modelar redes de neuronas. Diseñar un AFD
cuyo
comportamiento sea equivalente a la red neurona! de la
figura. Los
estados finales del Autómata corresponden a una salida 1 de la
red. Cada
neurona tienen sinapsis excitantes ( O ) e inhibitorias ( • ). Una
neurona
produce unasalida 1 si el número de sinapsis excitantes con
entrada 1
excede al de las inhibitorias con entrada 1, por al menos el
umbral de la
neurona (el número que se encuentra dentro del triángulo).
Supóngase
que existe tiempo suficiente entre cada cambio de valor de entrada
para
que las señales se propaguen y para que la red alcance una
configuración
estable.
S / I
0 1
Y1y2y3 y1y2y3 y1y2y3
0 0 0 0 0 0 0 0 1
0 0 1
0 1 1 0 0 1
0 1 0
0 1 0 1 0 1
0 1 1
0 1 1 1 1 1
1 0 0
0 0 0 1 0 0
1 0 1
0 1 0 1 0 1
1 1 0
1 1 0 1 0 0
1 1 1
1 1 0 1 1 1
s/I 0 1
qo qo q1
q1 q3 q1
q2 q2 q5
q3 q3 q7
q4 qo q4
q5 q2 q5
q6 q6 q4
q7 Q6 q7
AUTÓMATA FINITO DETERMINISTA (AFD)
Es un dispositivo que puede estar en uno cualquiera de un número
finito de
estados, uno de los cuales es el estado inicial y por lo menos uno
es un estado
de aceptación. A este dispositivo está asociado un flujo de
entrada que consiste
en una secuencia de símbolos de, un alfabeto determinado.
La máquina tiene la capacidad de detectar los símbolos conforme
llegan y,
basándose en el estado actual y el símbolo recibido, ejecutar una
transición, que
puede ser un cambio a otro estado o la permanencia en el actual.
La representación de un AFD no debe contener ambigüedades, de lo
cual
le viene el nombre de determinista, el nombre de finito es debido
a que aunque
analice una cantidad infinita de posibles cadenas de entrada, la
cantidad de
estados es limitada.
AUTÓMATA FINITO NO DETERMINISTA (AFND)
Cuando se encuentra en un estado de donde parten arcos múltiples
con el
mismo símbolo x, si x es un dato de entrada, la situación es no
determinista, ya
que no es seguro el siguiente estado-
Un ejemplo de un AFND sería:
Dada una cadena de entrada Sm, se considera que tal arreglo es
aceptado
si existe por lo menos un recorrido en el Autómata que nos lleve a
un estado de
aceptación, sin importar que existan otros para la misma cadena
que terminen
en uno de.no aceptación.
Por ejemplo: Si la cadena de entrada es Sin = abbaab, obsérvese
que
cuando llega el segundo símbolo de entrada (b) es en una situación
en la que se
está en un estado (qi) en el cual no está definido lo que sucede
para esa b; en
ese caso la cadena de entrada se rechaza.
Sea sin = a a
b la cadena de entrada
Qo q1
q0 q0 x la
cadena es aceptada
Q2 q0
x poruqe exiate un recorrido
Q2 / que permite en el estado q2
RELACIÓN ENTRE AUTÓMATAS Y GRAMÁTICAS
Una Gramática Regular y un Autómata de Estado Finito son. en
esencia, lo
mismo ya que cualquiera de ellos es una especificación de un
Lenguaje Regular.
Dado el Autómata que reconoce números reales y exponenciales sin
signo
(véase una clase anterior), se puede construir una Gramática
Regular que
produce tal lenguaje
a) Los símbolos terminales de G son los de entrada de A.
b)J-os estados se convierten en los símbolos no terminales.
c) £1 estado inicial se transforma en el símbolo inicial.
d) Las composiciones corresponden a los arcos dirigidos. Si existe
un arco
con la marca x de A a B se escribe la regla de producción A ->
xB. Además, si
hay un lado con la marca x de un estado A a un estado de
aceptación, se incluye
la composición A --> x.
Por ejemplo:
aN={A.B,C,D}
T={a.b}
cro={A}
P = {A -> aB bC
C->aC bD,
D -> aB bB
A -y- a, A -> b
bD, B-^aB,
bD,
B->a.
C->a. D -^ a. D -> b}
Si solamente existieran los Autómatas Finitos Determinísticos,
¿Cómo se podría diseñar el Autómata asociado con esa Gramática en
particular, por ejemplo? Por otro lado, es recomendable en casos
en que
una Gramática es difícil de diseñar, mejor crear el Autómata
asociado, y
obtener del diagrama de transición las reglas gramaticales.
Problema inverso: Partiendo de una Gramática Regular, determinar
el
Autómata Finito que acepta las cadenas de L(G).
Ejemplo: Sea G = (N, T, P, oo)
N-{S,A.B}
T={a,b} oo = {S}.
P = { S -> aS | bS | aB . A -> bB , B
~> aB | aA | b}
Diseñar el AFND que acepta los arreglos de L (G), aplicando el
procedimiento anterior, en sentido inverso y obtener conclusiones.
Sea G = (N, T, P, oo) una Gramática Regular. Sean
Í=T
S=Nu{F},dondeF ¿ (NuT)
f ( A, x ) == { B | A --> xB é P } u { F | A "> x e P }
A={F}
CTO^Íüo} , .
Entonces el AFND llamado A acepta precisamente los arreglos de L
(G).
CONVERSIÓN DE UN AFND EN UN AFD
TEOREMA: Dado un AFND llamado A, puede construirse un AFD
denominado A' que sea equivalente a A.
PROCEDIMIENTO: Sea A = (I, S. f. A, ero) un AFND. Sean
I' = 1
S' - P ( S )
A'^{XcS'|XnA^0}
üo' = { Oo }
f(X,x)=/0
si X=0
\ u f(5','^) VSeX si X^0
*
Entonces el AFD A' = (1' / S' , f , A', oo') es equivalente a A.
Nota: A' consiste en los subconjuntos de S* que contienen al menos
un
estado de aceptación del AFND original.
Por ejemplo: Diseñar un AFD que reconozca las cadenas del Lenguaje
generado por la siguiente Gramática:
G - ({ S, C }. { a, b }. { S -> bS | aC
, C -> bC | b }. { S }).
La caracterización del Lenguaje es L(G) = { bm a bn | m e Ko, n e
K }.
TEOREMA: Un Lenguaje L es regular sí y sólo sí existe un AFD que
acepta únicamente las cadenas de L.
Ejemplo: Sea L el conjunto de arreglos aceptados por el siguiente
AFD.
Construyase un AFD que acepte los arreglos L^ = {Xn... Xz Xi | Xi
x^ ... Xn e L }.
Caracterizar L y LR.
Se empieza en el estado de aceptación y se traza el recorrido en
sentido
opuesto hasta llegar al estado inicial. En seguida se convierte el
AFND en un
AFD.
Ejemplo: Hacer lo mismo que en el problema anterior con el
siguiente
Autómata.
Nótese que en este caso existen dos estados de aceptación, que
serían
ambos estados iniciales según el criterio del anterior ejemplo. Se
debe construir
primeramente un AFND que contenga un solo estado de aceptación.
Enseguida
se procede como en el caso anterior.
Ejemplo: Transformar el siguiente Autómata en otro equivalente
pero con
un solo estado de aceptación.
TEOREMA: Si L es un Lenguaje Regular, el Lenguaje LR = { Xn... X2
Xi | Xi
Xa... Xn e L} también es Regular.
Ejemplos para practicar:
a) Diseñar un AFD que acepte las cadenas del Lenguaje L = {
bmababn |
m, n e No}
b) Diseñar sendos AFD que acepten: uno el 0 y el otro { Á.}
c) Diseñar un AFD que reconozca una cadena de paréntesis anidados
y
equilibrados, asegurando que la profundidad del anidamiento no
exceda un
determinado nivel y que los paréntesis se encuentren juntos los
izquierdos y
luego los derechos. L = {(" )" | n = 1, 2, 3, ...}
TEOREMA: Si un Lenguaje Regular contiene cadenas de la forma x^n
para
enteros n arbitrariamente grandes, entonces debe contener también
cadenas de
la forma x^n, donde m ^ n.
Una consecuencia inmediata de lo anterior es que L ^ { x^n | n e N
} no
es Regular. Una consecuencia un poco más sutil es que los AFD
carecen del
poder suficiente para analizar expresiones aritméticas que
contienen paréntesis.
Si un AFD aceptara tales expresiones/entonces también tendría que
aceptar las
de la forma (n )^ para enteros n arbitrariamente grandes. Sin
embargo, el
teorema anterior implica que un Autómata de este tipo también debe
aceptar
expresiones en donde el número de paréntesis izquierdos no sea
igual al de
paréntesis derechos. Así, tal máquina aceptaría expresiones tanto
incorrectas
como correctas.
REPRESENTACIÓN DE UN AFD.
Componentes de un Autómata:
n Unidad de entrada: cinta de entrada con palabra de entrada,
cabeza de
lectura.
a Unidad de memoria (opcional): cintas de memoria para resultados
auxiliares, cabezas de lectura y escritura.
a Unidad de control: Controla el Autómata según un programa.
n Unidad de salida (opcional): cinta de salida para la palabra de
salida,
cabeza de escritura-
OPERACIONES CON EXPRESIONES REGULARES
1. Unión de Lenguajes: L1 ^ L2. La unión de dos Lenguajes
Regulares
es otro Lenguaje Regular.
Ejemplo: Sean U = { xm/ | m ¿ No } y L2 = { y^ | n ¿ No }. Evaluar
L1 ^
L2.
L1 ^ L2^{x^y^ y^xim. n ¿ \o}
Entrando a la parte correspondiente del diagrama original, ya no
se puede
pasar a la otra. El nuevo estado inicial sería de aceptación sólo
si uno de los
iniciales originales lo fuera.
Dibular un arco con la misma etiqueta que tienen los que salen de
los
anteriores estados iniciales, ahora partiendo del nuevo estado
inicial (esto por si
m, n fueran 0).
2. Concatenacion de Lenguajes: L1 . L2. La concatenación de dos
Lenguajes Regulares es otro Lenguaje Regular.
Ejemplo: Sean L1 = { x^yxn | m, n e No} y L2 = { y"xy0 | ñ. o
e No} .
Evaluar L1.L2.
L1 • L2 = { xmyxnyñxyo I m, n, ñ, o e No}.
I' A partir de
cada estado de aceptación del primer diagrama, dibujar un arco
P hacia cada estado del
segundo que sea el destino de un arco del estado inicial
de éste último. Rotular cada uno de estos arcos con la etiqueta
del arco
correspondiente en el segundo esquema. Dejar que los estados de
aceptación
del primero sigan siéndolo sólo si el estado inicial del segundo
es también un
estado de aceptación.
3. Estrella de Kleene o Cerradura de un Lenguaje: ( L1 )*. La
cerradura
de cualquier lenguaje Regular es también un Lenguaje Regular.
Ejemplo: Sea L = {x^ | m e No}. Evaluar L*.
L*={(xmy)*|m e No}.
El nuevo diagrama de transición implica la concatenación del
esquema
original hacia atrás consigo mismo, además de que debe aceptar 'k.
Dibujar un nuevo estado inicial y conectarlo al diagrama original,
de forma
similar a cuando se hace con la unión de conjuntos: por cada
estado se dibuja
un arco con la misma etiqueta del nuevo estado inicial hacia el
destino de un
arco del estado inicial del diagrama original y luego se designa a
éste como
estado de aceptación.
Para que puedan aceptarse las repeticiones de las subcadenas se
añade
un arco de cada estado de aceptación a tada estado que es el
destino de un
arco del estado inicial. Cada uno de estos nuevos arcos se rotula
con la etiqueta
que corresponda al arco del estado inicial.
Dado un alfabeto particular y usando las tres operaciones
anteriores, se
pueden construir varios lenguajes a partir de bloques de
construcción.
DEFINICIÓN; Una expresión regular ( para un alfabeto £ ) se define
como
sigue:
a) 0 es una expresión regular.
b) Cada elemento de £ es una expresión regular.
c) SÍ p, q son expresiones regulares, entonces p u q también lo
es.
d) Si p, q son expresiones regulares, entonces p • q también to
es.
e) Si p es expresión regular, entonces p* también lo es.
TEOREMA: Dado un alfabeto £, los Lenguajes Regulares de £ son
exactamente los Lenguajes representados por las expresiones
regulares de £.
Si p, q, r son expresiones regulares, entonces: ( p • q )*, ( q u
p ) • r, q* u
(r • q ), etc. también son expresiones regulares-
Ejercicios para el alumno. Diseñar los diagramas de transición
para las
operaciones indicadas en los siguientes incisos:
Ejemplo: ¿Cuáles de los lenguajes descritos por las siguientes
expresiones
regulares para el alfabeto {x, y, z} son infinitos?
Ejemplo: Representar gráficamente la unión de a • ( b • a ) * con
x • ( y • x
Ejemplo: Dibujar un diagrama de transiciones que acepte la
concatenación
del lenguaje aceptado porA1 con el aceptado porA2.
Los arcos que salen del estado inicial de A2 se reproducen en
todos los
estados de aceptación. Se eliminan los de A1 excepto cuando se
acepta X en
A2.
Ejemplo: Construir una expresión regular que describa el lenguaje
aceptado por el siguiente Autómata:
MODULO IV
AUTÓMATAS DE
PILA
Los símbolos que pueden almacenarse en la pila (símbolos de pila
del Autómata) constituyen un conjunto finito que puede incluir alguno o todos
los símbolos del alfabeto de ta máquina y quizás algunos símbolos adicionales
que la máquina utiliza como marcas internas, tales como la indicación de la
Pila vacía (#).
Las transiciones que ejecutan los Autómatas de Pila deben ser
variantes de la siguiente secuencia básica: leer un símbolo de entrada, extraer
un símbolo de la Pila, insertar un símbolo en la Pila y pasar a un nuevo estado
( o continuar en el mismo). Nótese que al trabajar con más información que el Autómata
Finito, también se hacen más complejas sus transiciones.
El estado actual, el
símbolo de entrada y el símbolo ubicado en la cima de la Pila determinan
conjuntamente el nuevo estado y el símbolo que se insertará
en la Pila.
DEFINICIÓN FORMAL DEL AUTÓMATA DE PILA:
Un Autómata de Pita es un séxtuplo ordenado de la forma: S = (I,
S, r,
/ A, cTu) donde:
I es el conjunto de símbolos de entrada o alfabeto de la máquina.
S es una colección finita de estados.
r es la colección finita de símbolos de la Pila.
r es una colección finita de Transiciones.
A es un subconjunto de S, y es la colección de estados de
aceptación.
do es un elemento de S, y es el estado inicial-
¿Cómo se modificaría el diagrama anterior para que en las cadenas
de entrada, la cantidad de x, y de y sea la misma, pero sin importar el orden
en que aparezcan los símbolos?
Los Autómatas de Pita se pueden utilizar para analizar cadenas en
forma similar a como se usan los Autómatas Finitos. Una cadena que ingresa al Autómata
de Pila puede ser aceptada o rechazada.
En la cinta de entrada de la máquina colocamos la cadena que se analizará,
con la cabeza de lectura sobre la celda del extremo izquierdo de la cinta.
Luego se pone en marcha la máquina desde su estado inicial, con la Pila vacía,
y declaramos que la cadena se aceptará si es posible que la máquina llegue a un
estado de aceptación después de leer toda la cadena-
Se usa la palabra "posible" al definir la aceptación de
cadenas en un Autómata de Pila, ya que los Autómatas de este tipo son NO
DETERMINISTAS.
TEOREMA: Para toda Gramática G Libre de Contexto, existe un Autómata
de Pila S que acepta exclusivamente las mismas cadenas del Lenguaje L(G).
Los Autómatas de Pila pueden aceptar Lenguajes Libres de Contexto como
el del ejemplo anterior. Como los Lenguajes Regulares también cumplen
con las condiciones para ser Libres de Contexto, teóricamente
puede n ser manejados por Autómatas de Pila (solamente que la Pila no sería
empleada en
ningún momento).
La adición de la Pila incrementa de manera considerable el
potencial de procesamiento del Lenguaje de Autómata y proporciona un marco en
el cual se
formulan varios algoritmos eficientes para el análisis sintáctico-
Precisamente, los analizadores sintácticos, además de los
semánticos, se desarrollan principalmente a partir de Autómatas de Pila.
Victor
Iván Robles Martinez
Julio
2002