28
1 Evander Flores ([email protected]) Gramáticas Libres del Contexto

Gramáticas Libres de Contexto

Embed Size (px)

DESCRIPTION

Gramaticas libres de contexto GLC CFG definicion, notacion, ejemplos

Citation preview

Page 1: Gramáticas Libres de Contexto

1

Evander Flores ([email protected])

Gramáticas Libres del Contexto

Page 2: Gramáticas Libres de Contexto

Contenidos

2

Objetivos

Alcance

Tema de la Presentación

Resumen

Preguntas

Page 3: Gramáticas Libres de Contexto

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

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

Lenguaje libre del Contexto

Definición y Propiedades

5

Page 6: Gramáticas Libres de Contexto

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

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

Gramáticas libres de Contexto

Definición, Características, Notación BNF, Recursividad

9

Page 9: Gramáticas Libres de Contexto

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

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

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

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

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

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

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

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

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

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

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

Á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

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

Recursividad

25

Por la Derecha

Por la izquierda

<ID> ::= <LETRA> <ID>

<Num> ::= <Num> <Dígito> | <Dígito>

Page 23: Gramáticas Libres de Contexto

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

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

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

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

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

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