INTRODUCCIÓN A BNF. Como se ha informado al comienzo de

Anuncio
INTRODUCCIÓN A BNF.
Como se ha informado al comienzo de este capítulo, los lenguajes
regulares tienen gran importancia en el diseño de los lenguajes de
programación ya que los componentes básicos de un LP constituyen LRs.
Esto es: los identificadores (LR infinito), las palabras reservadas (LR finito), las
constantes enteras y las constantes reales (LRs infinitos), los operadores (LR
finito) y los caracteres de puntuación (LR finito) son diferentes lenguajes
regulares que forman parte de la sintaxis de un LP.
Descripción sintáctica en BNF de componentes básicos
En 1958 se publicó un informe preliminar sobre el lenguaje ALGOL (Algorithmic
Language), un LP que, con los años, serviría de base para el desarrollo de
muchos de los LPs que se conocen desde hace casi 40 años hasta la actualidad:
Pascal, ANSI C, y luego C++, Java, etc.
Con el Manual de Referencia del ALGOL se publicó, por primera vez, una
descripción formal de la sintaxis de un LP. Esta descripción, basada en las GICs
(revise el capítulo anterior), se llamaría luego BNF (Backus Normal Form, Forma
Normal de Backus).
La notación BNF consiste en un conjunto de reglas que definen, con absoluta
precisión, la sintaxis de los componentes del LP en cuestión. Como dice el informe
revisado de 1963 [Communications of the ACM, John W. Backus editor]: “La
sintaxis será descripta con la ayuda de fórmulas metalingüísticas.”
Cada regla (o producción) en este BNF se forma con:

no terminales (o variables o categorías sintácticas), que son palabras o
frases encerradas entre corchetes angulares (ejemplo: )

terminales, que son los caracteres o palabras del alfabeto sobre el cual se
construye el LP descripto

meta símbolos, que ayudan a escribir estas reglas (ejemplo: < >)
CHOMSKY
OBJETIVO
Comprender la manera en que podemos convertir una gramática independiente
del contexto a una gramática de la Forma Normal de Chomsky.
JUSTIFICACIÓN
Las gramáticas tienen ciertas similitudes, pero cuando no es así es necesario
realizar una serie de pasos los cuales nos permitan obtener dos gramáticas
diferentes y que lleguen al mismo resultado.
INTRODUCCIÓN
Las gramáticas se pueden expresar de diferentes formas, en ocasiones podemos
llegar al mismo resultado utilizando gramáticas que difieren en su estructura, una
norma para estandarizar las gramáticas es la Forma Normal de Chomsky.
CONTENIDO
Si L es un lenguaje independiente del contexto que no contiene la cadena vacía,
entonces existe una gramática G independiente del contexto tal que L(G)=L y el
lado derecho de cualquier regla de rescritura en G consiste en un solo terminal o
exactamente dos no terminales. Se dice que una gramática cuyas reglas de
rescritura se adhieren a las restricciones del teorema 2.4 tiene la
FORMA NORMAL DE CHOMSKY
(FNC o CNF), llamada así en honor a Noam Chomsky. Por ejemplo la siguiente
gramática cuyo símbolo inicial es S tiene la forma normal de Chomsky.
S ----------- XM
M ---------- SY
X ----------- x
Y ----------- y
Una gramática libre de contexto G=(V,T,P,S) se dice estar en forma normal de
Chomsky si sus producciones son de cualquiera de las dos formas
 con , o bien
 con y .
Toda gramática libre de contexto G=(V,T,P,S) que no genere a la palabra vacía se
puede transformar en una gramática libre de contexto G'=(V',T,P',S') en forma
normal de Chomsky.
En efecto, dada una gramática G, apliquemos el último procedimiento de la
sección anterior para transformar a G en una gramática G'' sin variables inútiles ni
producciones vacías ni producciones unitarias equivalente a G. A las producciones
que quedasen de la forma con y las dejamos sin cambio alguno. A cada
producción de la forma, con y, la transformamos en una sucesión de producciones
de la forma siguiente: A cada símbolo terminal que aparezca en la palabra le
asociamos una variable nueva Xa e incorporamos la producción. Así pues las
producciones que no sean de la forma con X variable y a terminal, han de ser de la
forma, con todos variables.
FORMA NORMAL DE GREIBACH
Una gramática libre de contexto G=(V,T,P,S) se dice estar en forma normal de
Greibach si sus producciones son de la forma
Veremos que la construcción de formas normales de Greibach equivalentes
gramáticas dadas es procedimental. Para cualquier gramática libre de contexto G,
definamos, para cada variable, a los conjuntos siguientes:
Primeramente observemos que podemos ``componer producciones'' de manera
que tengamos siempre una gramática equivalente a la gramática dada.
(Composición de producciones) Si es una producción en G y las producciones
en P(Y) pueden escribirse como entonces al sustituir por las producciones
, obtenemos una gramática equivalente a G.
En efecto, en toda derivación terminal que aplique en un momento la producción
, necesariamente se ha de aplicar una producción en P(Y) para suprimir el
símbolo Y.
(Transformación
de
producciones
``reflexivas'')
Para
cada
variable enumeremos Q(X) y R(X) como
Sea Z una variable que no ocurra en V. Sea
La gramática que se obtiene al sustituir el conjunto de producciones P(X) por las
producciones
En efecto, toda derivación siniestra, en la gramática original, de una palabra
en L(G)ha de determinar una derivación diestra de la misma palabra en la
gramática transformada. La demostración de la afirmación anterior es directa.
Como mera ilustración, consideremos tan solo un ejemplo: La gramática con
producciones genera al lenguaje consistente de las palabras de la forma b(ab)*.
De acuerdo con la construcción anterior, como y , obtenemos la gramática.
Presentemos sendas derivaciones, siniestra en la gramática original y diestra en la
transformada, para la palabra bababab:
Toda gramática libre de contexto G=(V,T,P,S) que no genere a la palabra vacía se
puede transformar en una gramática libre de contexto G*=(V*,T,P*,S*) en forma
normal de Greibach.
Sea pues G=(V,T,P,S) una gramática libre de contexto que no genere a . La
transformación a una forma normal de Greibach la hacemos gradualmente
mediante los pasos siguientes:
1. Sea G'=(V',T,P',S') la forma normal de Chomsky de G.
2. Modificaremos a las producciones en P' para tenerlas tales que toda
producción, cuyo consecuente se inicie con una variable, ha de ser de la
forma con j>i, para un cierto orden en el conjunto de variables actuales, digamos
Por lo visto la gramática G'' así obtenida es equivalente a G.
3.Ahora, hecha la transformación anterior, se tiene que la última variable Xm sólo
puede ser antecedente de producciones cuyos consecuentes se inician con
símbolos terminales, las producciones en P(Xm-1) cuyos consecuentes se inician
con Xmpueden transformarse, siguiendo el lema
de ``Composición
deproducciones'', en producciones equivalentes cuyos consecuentes seinician con
símbolos terminales, de manera sucesiva para i=m-2 hasta i=1 las producciones
en P(Xi) cuyos consecuentes se inician con algún Xj, conj>i,pueden transformarse,
siguiendo el lema de ``Composición deproducciones'', en producciones
equivalentes cuyos consecuentes seinician con símbolos terminales.
Con todas estas transformaciones la gramática resultante G*=(V*,T,P*,S*) es, en
efecto, equivalente a G y está en forma normal de Greibach.
Ejemplo:
Consideremos la gramática con símbolos variables y producciones
la cual ya está en forma normal de Chomsky. Transformémosla de acuerdo con el
procedimiento anterior. Observemos que las dos primeras producciones ya tienen
el tipo de las buscadas en el paso 2. Del procedimiento anterior. La tercera tiene
un consecuente que se inicia con un símbolo variable anterior al de su propio
antecedente. Compongamos pues la producción 3. Con la 1. Obtenemos la cual
también tiene un consecuente que se inicia con un símbolo variable anterior al de
su propio antecedente. Compongamos pues la producción 4.con la 2.
Obtenemos la cual es del tipo ``reflexivo''. Para transformarla, introduzcamos una
nueva
variable Y3.
Obtenemos
Con esto terminamos el paso 2. Del procedimiento anterior. El conjunto actual de
producciones consta de las producciones 1., 2., 6. y 7.Pasemos pues al paso 3.
Del
procedimiento.
Sustituyendo
6.
En
2.obtenemos
Sustituyendo
8.
En
1.
Obtenemos
Sustituyendo
9.
En
7.
Obtenemos
10
nuevas
producciones
En resumen, la gramática equivalente, en forma normal de Greibach, tiene como
conjunto de variables a y sus producciones son la 6., 8., 9. y 10.:
Descargar