Gramáticas Libres de Contexto

Post on 06-Mar-2015

1.668 views 7 download

description

Gramaticas libres de contexto GLC CFG definicion, notacion, ejemplos

Transcript of Gramáticas Libres de Contexto

1

Evander Flores (evanderex@gmail.com)

Gramáticas Libres del Contexto

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