Upload
evander-flores
View
1.667
Download
7
Embed Size (px)
DESCRIPTION
Gramaticas libres de contexto GLC CFG definicion, notacion, ejemplos
Citation preview
Contenidos
2
Objetivos
Alcance
Tema de la Presentación
Resumen
Preguntas
Objetivos
3
Identificar que es un Lenguaje Libre de Contexto
Definir las características de una Gramática Libre de
Contexto.
Construir Gramáticas Libres de Contexto utilizando la
Notación BNF
Alcances
4
Lenguajes Libres de contexto
Gramáticas Libres de contexto
Diseño de Gramáticas libres de contexto
Notación BNF
Derivación y árboles de derivación
Recursividad por la izquierda y por la derecha
Como eliminar la recursividad por la izquierda
Lenguaje libre del Contexto
Definición y Propiedades
5
Lenguaje Libre del Contexto
6
La mayoría lenguajes de programación, son lenguajes libres
de contexto y están definidos por medio de gramáticas 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 autómatas de pila.
Esta definido dentro de la jerarquía de Chomsky en el Tipo 2.
Jerarquía
7
Lenguajes recursivamente Enumerables
Lenguajes sensibles al contexto
Lenguajes libres de contexto
Lenguajes Regulares
G3 ⊂ G2 ⊂ G1 ⊂ G0
Gramáticas libres de Contexto
Definición, Características, Notación BNF, Recursividad
9
Gramáticas Libres de Contexto
10
Es una gramática formal en la que cada regla de producción es de la forma:
N → w
Donde N es un símbolo no terminal y w es una cadena de terminales y/o no terminales. El término 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 gramática libre de contexto que lo genera.
Definición de la Gramática
13
Es una cuádrupla G = (N,T,P,S) donde:
N es un alfabeto de símbolos no terminales
(variables).
T es un alfabeto de símbolos terminales
(constantes). Pueden ser cadenas de lenguaje.
S Є N es el símbolo inicial o axioma de la gramática.
P es el conjunto de reglas de producción, P N (T
U N)*
Producción
14
Donde cualquier símbolo No Terminal del lado derecho de la
producción puede ser remplazado por cualquier definición de
ese mismo terminal del lado derecho. Ejemplo:
S → E
E → E + E
E → num
Notación BNF
15
Es una meta sintaxis usada para expresar gramáticas libres de
contexto. Es decir, una manera formal de describir lenguajes
formales.
Proviene de la definición Backus-Naur Form.
Es un sistema de reglas de derivación que se utiliza para
especificar por medio de gramáticas los lenguajes de
programación.
Notación BNF
16
<símbolo> ::= <expresión de símbolos>
El lado izquierdo es un no terminal
Y el lado derecho se define como una expresión de símbolos
Terminales y No terminales. Que representa al conjunto de
símbolos por los cuales se puede substituir el símbolo de la
izquierda.
Se utiliza la barra | para denotar opciones a seleccionar.
Un simbolo terminal comunmente se denota entre comillas
“terminal”
Ejemplo
17
Un ejemplo de una Gramática Libre del contexto que reconoce
operaciones de suma y multiplicación con números enteros,
como {5, 52+3, (1+3)*4 }
Donde E es una expresión Numérica
Num es un número
Digito es cualquier entero de 0 a 9
E → E + E
|E * E
|E
|(E)
|Num
Num → Num Dígito
|Dígito
Dígito → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Ejemplo
18
La misma Gramática se presenta en notación BNF
<E> ::= <E> “+” <E>
|<E> “*” <E>
|<E>
|”(“<E>”)”
|<Num>
<Num > ::= <Num> <Dígito>
|<Dígito>
Dígito → “0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9”
Ejemplo
19
Un ejemplo de una Gramática Libre del Contexto en notación BNF, que reconoce números telefónicos, como {(512) 45342421, 23422234}
Donde E es una expresión Numérica
Num es un número
Digito es un entero del 0 al 9
<E> ::= <E>
| “(“ <E> “)” <E>
| <Num>
<Num> ::= <Num> <Dígito>
| <Dígito>
<Dígito> ::= “0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9”
La Derivación
20
El proceso de derivación de una gramática, nos permite
reconocer una cadena de entrada a través de la gramática.
Puede darse la derivación por la izquierda o la derecha,
dependiendo del símbolo que se derive.
Derivación
21
Por ejemplo, para reconocer la cadena aabbb. A partir de la
siguiente Gramatica
S → AB
| A
A → aAa
| ε
B → Bb
| b
Derivación
22
Derivación por la Izquierda
S ⇒ AB ⇒ aAaB ⇒ aaB ⇒ aaBb ⇒ aaBbb ⇒ aabbb
Derivación por la Derecha
S ⇒ AB ⇒ ABb ⇒ ABbb ⇒ Abbb ⇒ aAabbb ⇒ aabbb
Árbol de Derivación
23
Puede visualizarse en árbol de derivación, donde se
reconoció la cadena aabbb.
S
A B
a A a B b
B b
b
ε
Recursividad
24
La recursividad se define en una producción cuando el
símbolo de la izquierda se encuentra también a la derecha de
la producción.
Existe recursividad por la izquierda y por la derecha,
dependiendo de la ubicación del símbolo, ya sea al principio
o final de la producción.
Recursividad
25
Por la Derecha
Por la izquierda
<ID> ::= <LETRA> <ID>
<Num> ::= <Num> <Dígito> | <Dígito>
Recursividad
26
También se puede encontrar producciones que tienen ambas
clases de recursividad.
Una gramática se considera recursiva si al menos una de sus
producciones es recursiva.
<E> ::= <E> “+” <E>
Eliminar recursividad por la Izquierda
27
Es posible modificar una gramatica para eliminar la recursividad por la izquierda
Consideramos la siguiente forma
A → A α
| β
Como es de notar existe recursividad por la izquierda, para eliminarla se aplica la siguiente formula
A → β A’
A’ → α A’
| ε
Ejemplo
28
Dada la siguiente gramatica, se necesita eliminar la
recursividad por la izquierda
E → E + T
| T
T → T * F
| F
F → (E)
| id
A → A α
| β
Ejemplo
29
Analizando las partes de la gramatica identificamos sus partes
E → E + T α
| T β
T → T * F α
| F β
F → (E)
| id
A → A α
| β
Ejemplo
30
Aplicamos la formula
Luego de haber identificado sus partes y procedemos a
eliminar la recursividad
A → β A’
A’ → α A’
| ε
Ejemplo
31
Gramatica sin recursividad
E → E + T
| T
T → T * F
| F
F → (E)
| id
E → T E’
E’ → +T E’
| ε
T → F T’
T’ → * F T’
| ε
F → (E)
| id