Gramticas Libres del Contexto
Contenidos
Objetivos Alcance Tema de la Presentacin Resumen Preguntas
Objetivos
Identificar que es un Lenguaje Libre de Contexto Definir las caractersticas de una Gramtica Libre de
Contexto. Construir Gramticas Libres de Contexto utilizando la Notacin BNF
Alcances
Lenguajes Libres de contexto Gramticas Libres de contexto
Diseo de Gramticas libres de contexto Notacin BNF Derivacin y rboles de derivacin
Recursividad por la izquierda y por la derecha
Como eliminar la recursividad por la izquierda
Lenguaje libre del Contexto
Definicin y Propiedades
Lenguaje Libre del Contexto
La mayora lenguajes de programacin, son lenguajes libres
de contexto y estn definidos por medio de gramticas libres de contexto. Contexto se refiere al entorno en que se encuentra, como influye el entorno en el significado de cada parte. Puede ser reconocido por autmatas de pila. Esta definido dentro de la jerarqua de Chomsky en el Tipo 2.
Jerarqua
G3 G2 G1 G0
Lenguajes recursivamente Enumerables
Lenguajes sensibles al contexto
Lenguajes libres de contexto
Lenguajes Regulares
7
Gramticas libres de Contexto
Definicin, Caractersticas, Notacin BNF, Recursividad
Gramticas Libres de Contexto
Es una gramtica formal en la que cada regla de produccin
es de la forma:
Nw Donde N es un smbolo no terminal y w es una cadena de terminales y/o no terminales. El trmino libre de contexto se refiere al hecho de que el no terminal N puede siempre ser sustituido por w sin tener en cuenta el contexto en el que ocurra. Un lenguaje formal es libre de contexto si hay una gramtica libre de contexto que lo genera.
10
Definicin de la Gramtica
Es una cudrupla G = (N,T,P,S) donde: N es un alfabeto de smbolos no terminales (variables). T es un alfabeto de smbolos terminales (constantes). Pueden ser cadenas de lenguaje. S N es el smbolo inicial o axioma de la gramtica. P es el conjunto de reglas de produccin, P N (T U N)*
13
Produccin
Donde cualquier smbolo No Terminal del lado derecho de la
produccin puede ser remplazado por cualquier definicin de ese mismo terminal del lado derecho. Ejemplo:
SE EE+E E num
14
Notacin BNF
Es una meta sintaxis usada para expresar gramticas libres de
contexto. Es decir, una manera formal de describir lenguajes formales. Proviene de la definicin Backus-Naur Form. Es un sistema de reglas de derivacin que se utiliza para especificar por medio de gramticas los lenguajes de programacin.
15
Notacin BNF
<smbolo> ::= <expresin de smbolos> El lado izquierdo es un no terminal Y el lado derecho se define como una expresin de smbolos Terminales y No terminales. Que representa al conjunto de smbolos por los cuales se puede substituir el smbolo de la izquierda. Se utiliza la barra | para denotar opciones a seleccionar. Un simbolo terminal comunmente se denota entre comillas terminal
16
Ejemplo
Un ejemplo de una Gramtica Libre del contexto que reconoce operaciones de suma y multiplicacin con nmeros enteros, como {5, 52+3, (1+3)*4 }
EE+E |E * E |E |(E) |Num Num Num Dgito |Dgito Dgito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Donde E es una expresin Numrica
Num es un nmero
17
Digito es cualquier entero de 0 a 9
Ejemplo
La misma Gramtica se presenta en notacin BNF
<E> ::= <E> + <E> |<E> * <E> |<E> |(<E>) |<Num> <Num > ::= <Num> <Dgito> |<Dgito> Dgito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
18
Ejemplo
Un ejemplo de una Gramtica Libre del Contexto en notacin BNF, que reconoce nmeros telefnicos, como {(512) 45342421, 23422234}
<E> ::= <E> | ( <E> ) <E> | <Num> <Num> ::= <Num> <Dgito> | <Dgito>
<Dgito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Donde E es una expresin Numrica Num es un nmero Digito es un entero del 0 al 9
19
La Derivacin
El proceso de derivacin de una gramtica, nos permite
reconocer una cadena de entrada a travs de la gramtica. Puede darse la derivacin por la izquierda o la derecha, dependiendo del smbolo que se derive.
20
Derivacin
Por ejemplo, para reconocer la cadena aabbb. A partir de la siguiente Gramatica S AB |A A aAa | B Bb |b
21
Derivacin
Derivacin por la Izquierda S AB aAaB aaB aaBb aaBbb aabbb
Derivacin por la Derecha S AB ABb ABbb Abbb aAabbb aabbb
22
rbol de Derivacin
Puede visualizarse en rbol de derivacin, donde se reconoci la cadena aabbb.
S
A B
a
B b
B
b
23
Recursividad
La recursividad se define en una produccin cuando el
smbolo de la izquierda se encuentra tambin a la derecha de la produccin. Existe recursividad por la izquierda y por la derecha, dependiendo de la ubicacin del smbolo, ya sea al principio o final de la produccin.
24
Recursividad
Por la Derecha
<ID> ::= <LETRA> <ID>
Por la izquierda
<Num> ::= <Num> <Dgito> | <Dgito>
25
Recursividad
Tambin se puede encontrar producciones que tienen ambas
clases de recursividad.
<E> ::= <E> + <E>
Una gramtica se considera recursiva si al menos una de sus
producciones es recursiva.
26
Eliminar recursividad por la Izquierda
Es posible modificar una gramatica para eliminar la recursividad
por la izquierda Consideramos la siguiente forma
AA | Como es de notar existe recursividad por la izquierda, para eliminarla se aplica la siguiente formula A A A A |
27
Ejemplo
Dada la siguiente gramatica, se necesita eliminar la
recursividad por la izquierda
EE+T |T
AA |
TT*F |F
F (E) | id
28
Ejemplo
Analizando las partes de la gramatica identificamos sus partes
EE+T |T TT*F |F
F (E) | id
29
AA |
Ejemplo
Aplicamos la formula
A A A A |
Luego de haber identificado sus partes y procedemos a eliminar la recursividad
30
Ejemplo
Gramatica sin recursividad
E T E
EE+T |T
E +T E |
T F T T * F T |
TT*F |F
F (E) | id
31
F (E) | id