Anda di halaman 1dari 21

Lenguajes Formales y Teora de Autmatas

Introduccin:
Introduccin:
Es otra importante familia de lenguajes,
llamados Lenguajes de Contexto Libre,
abreviados de aqu en adelante como LCL
Conceptualmente, los lenguajes regulares
proporcionan la base terica para reconocer
los tokens de un lenguaje de programacin,
es decir los componentes atmicos como
palabras
reservadas,
identificadores,
smbolos especiales y otros similares.

Introduccin:
En tanto que los LCL constituyen el
fundamento para analizar la estructura de
oraciones
completas,
es
decir,
de
programas que observen una sintaxis
correcta.
As, usualmente las dos teoras se conjugan,
ya que la primera teora dar lugar a un
Analizador Lxico y la segunda a un
Verificador Sintctico en el contexto de
compiladores de Lenguajes de Programacin.

Introduccin
En captulos posteriores, se introducirn las
mquinas que reconocen este tipo de
lenguajes, mquinas que, desde luego, tendrn
que ser un poco ms complejas que los
Autmata Finitos empleados con los Lenguajes
Regulares.
Se utilizan estas mquinas para analizar ms
completamente la oracin, al descomponerla en
partes ms sencillas segn las reglas sintcticas
del lenguaje. Este proceso se denomina parsing
y a las mquinas que lo realizan usualmente se
les conoce como parsers.

Una gramtica (general) G se define como una cuaterna:


G = ( V, T, S, P ) en donde:
V es un conjunto finito y no vaco de elementos llamados variables.
T es un conjunto finito y no vaco de elementos llamados smbolos
terminales. Se requiere que V y T sean disjuntos o excluyentes. Al
conjunto T tambin se le conoce como alfabeto de la gramtica y
tambin se le designa con la letra .
S es un elemento de V, llamado smbolo inicial.
P es un conjunto finito no vaco de producciones. Estrictamente, P es una
relacin con dominio la clausura positiva de la unin de V y T y contra
dominio la clausura de la unin de V y T. Es decir:
P = {(x, y) en donde x (VT)+ en tanto que y (V T)*}

EJEMPLO:
EJEMPLO
La gramtica: G = ( {A, B, S}, {a, b}, S, P) en donde P es el
conjunto de reglas de produccin, est dado por:
1.
S AB
2.
A aaA
3.
A
4.
B Bb
5.
B
Esta gramtica es, por definicin, una GCL. Es fcil percatarse
de que:
L(G) = { a2nbm | n 0, m 0}

El ejemplo anterior nos permite ilustrar algunos


conceptos importantes relacionados con las GCL.
Consideremos la oracin aab, a continuacin se
presentan dos posibles derivaciones:
S 1 AB 2 aaAB 3 aaB 4 aaBb 5 aab

(DEI)

S 1 AB 4 ABb 5 Ab 2 aaAb 3 aab

(DED)

Por abreviacin, se ha colocado un nmero al


final de cada flecha de derivacin para indicar, de
esa manera, el nmero correlativo de la regla de
produccin utilizado en cada paso.
Como puede comprobarse, las dos derivaciones
producen al final la misma oracin aab, y de
hecho, involucran las mismas reglas de
produccin, pero en orden distinto.
As, la nica diferencia radica, a la larga, en el
orden en que se seleccionan los smbolos
variables para reescribirlos mediante las reglas
de produccin.

Sea G = (V, T, S, P) una GCL. Se dice que un rbol, desde el punto


de vista de la estructura de datos comnmente utilizada en
Computacin, es un rbol de derivacin de la gramtica G s y
solamente si cumple con las siguientes propiedades:
La raz del rbol es el smbolo inicial S.
Cada hoja del rbol es un elemento de T { }.
Cada nodo interno (i.e., que no es una hoja o la raz) es un
elemento de V.
Si un nodo interno es un smbolo A V, con hijos a1, a2, ... , an,
de izquierda a derecha, entonces el conjunto de producciones P
de G, debe contener la regla de produccin: A a1a2...an

Los rboles de derivaciones son ilustrativos, adems


de estar ntimamente vinculados con el lenguaje
generado por una gramtica. En efecto, una oracin
pertenece al lenguaje generado por una gramtica
dada s y solamente si dicha oracin posee un rbol
sintctico a partir de esa gramtica.
Es importante percatarse de que un rbol de
derivacin constituye lo que podra concebirse como
un resumen grfico de una serie de derivaciones. En
particular, un rbol de derivacin para una oracin
dada contiene, en el sentido explicado anteriormente,
la DEI y DED de la oracin.

Ejemplo:
Ejemplo
Sea la gramtica: G = ( V, T, E, P ) en donde:
V = { E, L }
T = { a, b, c, +, *, (, ) }
P={
E
E
E
E
L
}

L
E+E
E*E
(E)
a|b|c

Dada una gramtica y una oracin generada por la


gramtica, realizar un parsing de la oracin significa
verificar si esta oracin pertenece al lenguaje
generado por la gramtica. Como se trabaj en los
ejemplos anteriores, puede entenderse entonces que
un parsing establece la respuesta a la famosa
prueba de membresa a la que se haba hecho
referencia en captulos anteriores.
En el caso de GCL, realizar un parsing de la oracin
se reduce entonces a producir una derivacin de la
misma a partir de las reglas de produccin. Claro
est, al obtener un rbol de derivacin de una oracin
dada, se estara efectuando tambin un parsing, con
mayor razn.

EJEMPLO
Sea la gramtica inducida por las siguientes reglas de produccin:
S SS | aSb | bSa |
Se probar que la oracin aabb es parte del lenguaje generado por
la gramtica, mediante un parsing por generacin exhaustiva. Sin
embargo, se emplear la tcnica no tan ciegamente, pues se
descartarn algunas posibilidades que luzcan notoriamente
improcedentes, lo cual se explicar a continuacin.
Primero, se generan todas las derivaciones de largo 1:
S SS
S aSb
S bSa
S

Debido a que la oracin aabb, sobre la que se est


realizando el parsing empieza con una letra a, se
pueden descartar las derivaciones que se originen a partir
de las derivaciones 3 y 4. De esta manera se necesita
analizar solamente las derivaciones de largo 2 que
procedan de las derivaciones 1 y 2. Como se est
empleando un criterio de derivacin DEI, se selecciona la
primera instancia del smbolo S en la derivacin 1 para
obtener las siguientes derivaciones de longitud 2:
S
S
S
S

SS
SS
SS
SS

SSS
aSbS
bSaS
S

De forma similar, se toma la segunda derivacin original de largo


1, para producir, a partir de ella, las siguientes derivaciones de
largo 2:
S
S
S
S

aSb
aSb
aSb
aSb

aSSb
aaSbb
abSab
ab

Nuevamente, algunas de estas derivaciones pueden ser


descartadas en anlisis subsiguientes. En la siguiente etapa, es
decir, derivaciones de longitud 3, se obtiene la oracin en
cuestin a partir de la derivacin 6 anterior, con lo cual el
parsing se detiene con una respuesta afirmativa, refirindose a si
la oracin pertenece al lenguaje generado por la gramtica.

Como se mencion anteriormente, en el contexto de la


computacin, las GCL juegan un papel vital en la definicin
de la sintaxis de los Lenguajes Programacin.
Sin embargo, aunque la teora en esos casos es la misma
que la que se est presentando aqu, usualmente se utiliza
una notacin diferente, en cierto sentido ms clara de
entender.
Esta notacin recibe el nombre de: Forma de BackusNaur, abreviada como BNF por sus siglas en ingls
(Backus-Naur Form). La diferencia principal consiste en
que los nombres de smbolos variables, es decir los
elementos del conjunto que normalmente se denotan por
V, reciben nombres que se delimitan por los smbolos <,
>. Los smbolos terminales se escriben solos y las reglas
de produccin pueden ser abreviadas, ya que separan las
distintas partes de la derecha con el smbolo usual |.

La siguiente es una regla de produccin tpica


en notacin BNF:
<expresin>::= <expresin> + <expresin> |
<expresin> <expresin> |
<nmero>

Como puede apreciarse, la regla de produccin cobra una


apariencia menos matemtica y se torna ms intuitiva y, en
cierta forma, fcil de entender. Cuando pensamos que un
Lenguaje de Programacin necesita tpicamente de decenas de
reglas de produccin para poder definirse, se entiende que la
notacin BNF resulte no solamente ms conveniente sino
necesaria para no perderse en un mar de notaciones
matemticas.
Por ltimo, es preciso advertir algunas diferencias entre sintaxis
y semntica.
Como se explic en los primeros captulos, un Lenguaje de
Programacin y, de hecho, cualquier tipo de lenguaje tiene dos
dimensiones: sintaxis y semntica. La primera puede ser
manejada por medio de GCL, pero la mayor parte de aspectos
semnticos escapan al poder de expresin de la GCL.

Por ejemplo, en el Lenguaje de Programacin llamado: Pascal


se podra tener la siguiente definicin:
var x: integer;
Ms adelante en el programa, una instruccin del tipo:
x := 3.21
Esta situacin en particular, al igual que muchas otras, no es
posible resolverla mediante el uso exclusivo de GCL. Por esa
razn, la teora de compiladores de lenguajes de programacin
abarca muchos ms temas adicionales al de las GCL, como, por
ejemplo, la verificacin de la utilizacin adecuada de variables,
segn el tipo con que se hayan declarado.

Ejemplos y ejercicios
Encuentre GCL que generen los siguientes
lenguajes:
L = { wwR | w {a, b}* }
Solucin:
S aSa | bSb |
L = { anbm | n m+3 }
Solucin:
S aSb | a | aa | aaa

Anda mungkin juga menyukai