gramáticas libres de contexto
DESCRIPTION
Gramaticas libres de contexto GLC CFG definicion, notacion, ejemplosTRANSCRIPT
![Page 2: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/2.jpg)
Contenidos
2
Objetivos
Alcance
Tema de la Presentación
Resumen
Preguntas
![Page 3: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/3.jpg)
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
![Page 4: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/4.jpg)
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
![Page 5: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/5.jpg)
Lenguaje libre del Contexto
Definición y Propiedades
5
![Page 6: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/6.jpg)
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.
![Page 7: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/7.jpg)
Jerarquía
7
Lenguajes recursivamente Enumerables
Lenguajes sensibles al contexto
Lenguajes libres de contexto
Lenguajes Regulares
G3 ⊂ G2 ⊂ G1 ⊂ G0
![Page 8: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/8.jpg)
Gramáticas libres de Contexto
Definición, Características, Notación BNF, Recursividad
9
![Page 9: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/9.jpg)
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.
![Page 10: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/10.jpg)
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)*
![Page 11: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/11.jpg)
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
![Page 12: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/12.jpg)
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.
![Page 13: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/13.jpg)
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”
![Page 14: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/14.jpg)
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
![Page 15: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/15.jpg)
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”
![Page 16: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/16.jpg)
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”
![Page 17: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/17.jpg)
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.
![Page 18: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/18.jpg)
Derivación
21
Por ejemplo, para reconocer la cadena aabbb. A partir de la
siguiente Gramatica
S → AB
| A
A → aAa
| ε
B → Bb
| b
![Page 19: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/19.jpg)
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
![Page 20: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/20.jpg)
Á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
ε
![Page 21: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/21.jpg)
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.
![Page 22: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/22.jpg)
Recursividad
25
Por la Derecha
Por la izquierda
<ID> ::= <LETRA> <ID>
<Num> ::= <Num> <Dígito> | <Dígito>
![Page 23: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/23.jpg)
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>
![Page 24: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/24.jpg)
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’
| ε
![Page 25: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/25.jpg)
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 α
| β
![Page 26: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/26.jpg)
Ejemplo
29
Analizando las partes de la gramatica identificamos sus partes
E → E + T α
| T β
T → T * F α
| F β
F → (E)
| id
A → A α
| β
![Page 27: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/27.jpg)
Ejemplo
30
Aplicamos la formula
Luego de haber identificado sus partes y procedemos a
eliminar la recursividad
A → β A’
A’ → α A’
| ε
![Page 28: Gramáticas Libres de Contexto](https://reader034.vdocuments.pub/reader034/viewer/2022050710/54fab7c74a79592b098b54ed/html5/thumbnails/28.jpg)
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