Anda di halaman 1dari 9

Ciencias de la Computacin I

Gramticas Libres del Contexto y Lenguajes Libres del Contexto

Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Gramticas Formales
Una gramtica formal es una cuadrupla G = (N, T, P, S)

N = conjunto finito de smbolos no terminales NT= T = conjunto finito de smbolos terminales S = smbolo distinguido o axioma S (N T)

P = conjunto finito de reglas de produccin (permiten generar cadenas a partir de S)

= A =

A N {S}

, , (N T)*

De acuerdo a formato de reglas se pueden definir 4 tipos de gramticas y sus correspondientes lenguajes

Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Gramticas Libres del Contexto (GLC) (Tipo 2)


Generan los lenguajes libres del contexto (reconocidos por Autmatas de Pila) Son importantes para definir la sintaxis de lenguajes de programacin Se definen como una cuadrupla G = (N, T, P, S) N = conjunto finito de smbolos no terminales T = conjunto finito de smbolos terminales S = smbolo distinguido o axioma S (N T)

P = conjunto finito de reglas de produccin (con formato de tipo 2)

Aw

A N {S} w (N T)* - {}

Del lado izquierdo de la regla un no terminal o el simbolo distinguido S Del lado derecho de la regla una combinacin de terminales y/o no terminales excepto . Si L se agrega S

Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Gramticas Libres del Contexto (Tipo 2)


Ejemplo:

Sea G = ({A}, {a, b}, S, P)

donde P = { S A, A aAb, A ab }

Derivaciones de cadenas

S A ab S A aAb aabb

ab L(G) aabb L(G)

G es libre del contexto y genera : L = {an bn / n > 0 }

S A aAb aaAbb aaabbb aaabbb L(G) Se pueden generar infinitas cadenas ..

Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Gramticas Libres del Contexto (Tipo 2)


Las reglas de produccin indican cmo reemplazar un no terminal sin considerar el contexto en el que se encuentra Ejemplo: G gramtica libre del contexto

Sea G = ({A}, {a, b}, S, P)

donde P = { S A, A aAb, A ab }

Del lado izquierdo siempre un no terminal o el smbolo distinguido

S A a A b aabb S A a A b aa A bb aaabbb

No importa en qu contexto est el no terminal A Se lo reemplaza por la cadena en el lado derecho de la regla de produccin

Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Gramticas Libres del Contexto (Tipo 2)


Derivacin inmediata : La cadena 2 se obtiene de la cadena 1 en un paso usando reglas de P de una gramtica G =( N, T, P, S) 1 2 s y slo s A w

Caso 1)

A w es regla de P , (N T)* A N {S} w (N T)* - { }


si w2= S es regla de P

Caso 2)

Ejemplo G = ({A}, {a, b}, S, {S A, A aAb, A ab }>

SA

aAb aaAbb aaabbb


A w

Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Gramticas Libres del Contexto (Tipo 2)


* (clausura reflexiva y transitiva de la derivacin inmediata )
La cadena n se obtiene de la cadena 1 en cero o ms pasos usando las reglas de P

1 2 n

* decimos que 1 n

i (N T)*

Ejemplo G = ({A}, {a, b}, S, {S A, A aAb, A ab }>

S A aAb aaAbb aaabbb


En varios pasos

* S aaabbb

Lenguaje generado por una gramtica libre del contexto G = (N, T, P, S):

* L(G) = { x / S x y x T* }
Una cadena x L(G), si se puede generar a partir de S y solo est formada por smbolos terminales
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Backus-Naur Form (BNF)


Notacin utilizada frecuentemente para escribir gramticas de tipo 2 o libres del contexto. Esta notacin sigue las siguientes convenciones: - no terminales se escriben entre < > - terminales son cadenas de caracteres sin < > - en lugar de se utiliza :: = que se lee se define como - varias reglas del tipo
<A> :: = <B1> <A> :: = <B2> ... <A> :: = <Bn>
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Se pueden escribir como <A> :: = <B1> <B2> ... <Bn>

Backus-Naur Form (BNF)


Ejemplos: L = { x / x { (, ) }* y x es una cadena de parntesis balanceados } BNF para L <cadena_par> :: = <parentesis> <parentesis> <cadena_par> <parentesis> :: = ( <cadena_par > ) ( )

Ejemplos ((())) ( ( ) )( ) (( )

L L L

Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Backus-Naur Form (BNF)


BNF para sentencia for de Pascal <sentencia_for> :: = for <variable> := <lista_for> do <sentencia> <lista_for> :: = <exparit> to <exparit> <exparit> downto <exparit> <variable> :: = a z <sentencia> :: = <variable> := <variable> <exparit> :: = 0 9
/*en este ejemplo simplificamos*/ /*en este ejemplo simplificamos*/ /*en este ejemplo simplificamos*/

Ejemplos for i := 1 to 3 do i := j for i := 1 to 9 do sum:= i for i = 2 to 9 do k:=i

bien definida segn BNF anterior mal definida segn BNF anterior mal definida segn BNF anterior

Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

rbol
El concepto de rbol es muy usado en computacin. Un rbol es un conjunto de puntos, llamados nodos, unidos por lneas, llamadas arcos. Un arco conecta dos nodos distintos.
Nodo raz Nodo interior Rama Nodo hoja

Propiedades del rbol: - hay un nico nodo distinguido, llamado raz. - Un nodo padre puede tener conectados uno o mas nodos hijos. El padre de un nodo se dibuja por encima de los nodos hijos. El nodo raz no tiene padre. Los nodos hojas no tienen hijos. - cada nodo es alcanzable desde el nodo raz mediante un nico camino
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

rbol de derivacin
Permite mostrar grficamente la derivacin de cualquier cadena de un lenguaje a partir del smbolo distinguido de una gramtica que genera el lenguaje. Un rbol es un rbol de derivacin para una gramtica G = (N, T, P, S) si: - La raz del rbol se rotula con S, el smbolo distinguido de G - Cada nodo interior est rotulado con un smbolo de N - Cada hoja est rotulada con un smbolo de N T - Si un nodo interior tiene rtulo A y sus hijos tienen rtulos x1, x2, ..., xn entonces la regla A x1 x2 ...xn P Para cada cadena del lenguaje generado por una gramtica es posible construir al menos un rbol de derivacin en el cual cada hoja tiene como rtulo un smbolo terminal y si se leen las hojas de izquierda a derecha se obtiene la cadena.
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

rbol de derivacin
Ejemplo:

Sea G = ({A, B}, {a, b, c}, S, P)

donde

P = { S AB, A aAb, A ab, B cB, B c } - La cadena aabbccc L(G)? S A a a A b b c c B B B c


Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Cadena derivada: aabbccc

rbol de derivacin
Ejemplo: BNF para expresiones aritmticas simplificadas <exparit> :: = <exparit> + <exparit> <exparit> - <exparit> <exparit> * <exparit> <exparit> / <exparit> (<exparit>) <numero> <numero> :: =<digito> <digito><numero> <digito> :: =0 1 2 3 4 5 6 7 8 9

<exparit> <exparit> <numero> <digito> 4

4 + 53
+
<exparit> <numero> <digito><numero> 5 <digito> 3

4+5*
<exparit> <exparit> <numero> <digito> 4 <numero> <digito> 5

<exparit>

<exparit>

<exparit>

no se llega a un terminal

4+53 es exparit

4+5* no es exparit

Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

rbol de derivacin
Ejemplo: BNF para expresiones aritmticas simplificadas <exparit> :: = <exparit> + <exparit> <exparit> - <exparit> <exparit> * <exparit> <exparit> / <exparit> (<exparit>) <numero> <numero> :: =<digito> <digito><numero> <digito> :: =0 1 2 3 4 5 6 7 8 9 Se quiere derivar la expresin aritmtica 3*4 + 5
<exparit> <exparit> <exparit> <numero> <digito> 3

3*4 + 5

<exparit> <exparit> <exparit> <numero> <digito> <digito>

3*4 + 5

Si para la misma cadena 3*4+5 hay dos rboles diferentes: BNF es ambiguo
<exparit>

<exparit> <numero> <digito>

<exparit> <numero> <digito>

<numero>

<exparit> <numero> <digito> 5

3 4 5 4
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Gramticas ambiguas
En el ejemplo anterior, existen dos rboles de derivacin para la misma cadena gramtica ambigua Una GLC G es ambigua si existe al menos una cadena de L(G) para la cual hay dos o ms rboles de derivacin distintos. Una GLC G es no ambigua si toda cadena de L(G) tiene un nico rbol de derivacin. La ambigedad puede ser un problema para los lenguajes en los que el significado depende, en parte, de la estructura (lenguaje natural, lenguajes de programacin). En el ejemplo anterior 3*4+5 puede ser igual a 17 o 27 segn el rbol de derivacin que se construya. Una cadena que tiene ms de un rbol de derivacin suele tener ms de un significado entonces en aplicaciones de compilacin es necesario disear, cuando sea posible, gramticas no ambiguas.
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

Gramticas ambiguas
En algunos casos, dada una gramtica ambigua, se puede encontrar otra no ambigua que genera el mismo lenguaje. Por ejemplo, es posible definir una GLC no ambigua para generar las expresiones aritmticas del ejemplo anterior. Si todas las GLC para un lenguaje L son ambiguas se dice que L es inherentemente ambiguo. Por ejemplo, L = {ai bj ck / i, j, k 0 y (i = j j = k )} es inherentemente ambiguo Intuitivamente, cualquier GLC para L debe tener reglas generar cadenas en las que i = j y tambin reglas para generar cadenas en las que j = k. Si una cadena tiene i = j = k claramente tendr dos derivaciones posibles. Teorema: No existe un algoritmo para determinar si una GLC es ambigua o no.
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

BNF no ambiguo
Ejemplo: BNF no ambiguo para expresiones aritmticas simplificadas <exparit> :: = <exparit> + <termino> <exparit> - <termino> <termino> <termino> :: = <termino> * <factor> <termino> / <factor> <factor> <factor> :: =(<exparit>) <numero> <numero> :: =<digito> <digito><numero> <digito> :: =0 1 2 3 4 5 6 7 8 9
<exparit> <exparit> <termino> <termino> <factor> <numero> <digito> 3 4
Ciencias de la Computacin I - Filminas de Clase Facultad Cs. Exactas UNCPBA - 2009

3*4 + 5

<termino> <factor> <numero> <digito> 5

Para 3*4+5 un nico rbol de derivacin


En general, toda cadena un rbol de derivacin entonces este BNF es no ambiguo

<factor> <numero> <digito>

Anda mungkin juga menyukai