• No se han encontrado resultados

Gramáticas Independientes del Contexto

N/A
N/A
Protected

Academic year: 2022

Share "Gramáticas Independientes del Contexto"

Copied!
5
0
0

Texto completo

(1)

Gramáticas Independientes del Contexto

Lenguajes Formales y de Programación Vacaciones Diciembre 2010

Basado en el capítulo 5 del libro:

Introducción a la Teoría de Autómatas, Lenguajes y Computación

J. Hopcroft, et al. 2002

2010 Lenguajes Formales y de Programación 2

Gramáticas independientes del contexto

• Los lenguajes generados por gramáticas independientes del contexto son una clase más amplia de lenguajes que los regulares.

• Ayudo a la implementación del analizador sintáctico.

• Entre algunos elementos están los árboles sintácticos que representan gráficamente la estructura de la gramática.

2010 Lenguajes Formales y de Programación 3

Gramáticas independientes del contexto

• Además existen los autómatas a pila que es un mecanismo para describir lenguajes independientes del contexto.

2010 Lenguajes Formales y de Programación 4

Definición de GIC

• Hay cuatro componentes importantes en la descripción gramatical:

– Un conjunto finito de símbolos o alfabeto que se llamarán símbolos terminales.

– Un conjunto finito de variables, o símbolos no terminales.

– Un símbolo inicial que pertenece a los símbolos no terminales.

– Un conjunto de producciones o reglas

Definición de GIC

G=(N, T, S, P)

(2)

Ejemplo 1

• Mostrar las reglas o producciones que definen cadenas palíndromas que se generar a través del alfabeto {0, 1}.

• La base es que por cada 0 del lado izquierdo aparezca un 0 del lado derecho, y de igual forma para el símbolo 1.

0..0 1..1

2010 Lenguajes Formales y de Programación 7

Ejemplo 1

P  0 P 0 P  1 P 1 P  0 P  1 P  ε

2010 Lenguajes Formales y de Programación 8

Ejemplo 2

• Mostrar las producciones de una gramática que genere el lenguaje descrito por las operaciones aritméticas + y *, además de la aplicación de (), utilizando solamente los símbolos 0 y 1.

2010 Lenguajes Formales y de Programación 9

Ejemplo 2

E  E + E E  E * E E  ( E ) E  V V  0 V  1

2010 Lenguajes Formales y de Programación 10

Derivaciones

• Es uno de lo métodos para inferir que ciertas cadenas pertenecen al lenguaje.

• Otro método es la inferencia recursiva, pasando del cuerpo a la cabeza.

• En la derivación utilizamos las producciones pasando de la cabeza al cuerpo, es decir, sustituyendo el cuerpo por una producción.

2010 Lenguajes Formales y de Programación 11

Ejemplo 3

• Inferir si la cadena 1*(0+1) pertenece al lenguaje generado por la gramática del ejemplo 2.

EE*EV*E1*E1*(E)

1*(E+E)1*(V+E)1*(0+E)

1*(0+V)1*(0+1)

2010 Lenguajes Formales y de Programación 12

(3)

Derivación izquierda y derecha

• Derivación izquierda es aquella que reemplaza la variable situada más a la izquierda.

• Del mismo modo la derivación derecha es aquella que reemplaza la variable situada más a la derecha.

2010 Lenguajes Formales y de Programación 13

Ejemplo 4

• Derivación izquierda:

EE*EV*E1*E1*(E)

1*(E+E)1*(V+E)1*(0+E)

1*(0+V)1*(0+1)

• Derivación derecha:

EE*EE*(E)E*(E+E)E*(E+V)

E*(E+1)E*(V+1)E*(0+1)

V*(0+1)1*(0+1)

2010 Lenguajes Formales y de Programación 14

Árboles de derivación

• Las derivaciones se pueden representar en forma de árbol.

• Llamado árbol de derivación.

• La principal funcionalidad es que el árbol se utiliza en los compiladores para representar estructuras sintácticas del programa fuente.

2010 Lenguajes Formales y de Programación 15

Construcción de árboles de derivación

• Cada nodo interior está etiquetado por una variable.

• Cada nodo hoja está etiqueta por una variable, un terminal o un ε. Si es por ε la hoja debe ser única.

2010 Lenguajes Formales y de Programación 16

Ejemplo 5

• Supongamos la gramática de expresiones, la derivación V+E se puede representar así:

E

E + E

V

Ejemplo 6

• Construya el árbol de derivación para la derivación P0110

P

0 P 0

1 P 1

ε

(4)

Ambigüedad en las gramáticas

• Supongamos la forma sentencial E+E*E, puede generarse a través de:

– EE+EE+E*E – EE*EE+E*E

2010 Lenguajes Formales y de Programación 19

Ambigüedad en la gramáticas

• Arboles de derivación distintos:

E E

E + E E * E

E * E E + E

2010 Lenguajes Formales y de Programación 20

Eliminación de ambigüedad

• No hay un algoritmo efectivo para convertir una gramática ambigua a una no ambigua, debido a que hay gramáticas inherentemente ambiguas, es decir, es imposible quitarles la ambigüedad.

• Hay dos problemas que generan la ambigüedad:

– No respetar la precedencia – Utilización de operados idénticos

2010 Lenguajes Formales y de Programación 21

Eliminación de ambigüedad

• La forma más común es forzar la precedencia, introduciendo más variables:

– Un factor es una expresión que no puede separarse por ningún operados + o * adyacente.

– Un término es una expresión que no puede ser separada por el operados +.

– Expresión es una expresión posible, incluyendo las que pueden separarse por operadores + o * adyacentes.

2010 Lenguajes Formales y de Programación 22

Eliminación ambigüedad

• Tomando en cuenta la gramática de operadores, una gramática no ambigua sería:

F  V | (E) T  F | T*F E  T | E+T V  0 | 1

2010 Lenguajes Formales y de Programación 23

FIN

2010 Lenguajes Formales y de Programación 24

(5)

Cuestionario

1. Diseñar una GIC que genere el lenguaje que contiene el conjunto {0n1n|n>=1}

2. Obtener las derivaciones más a la izquierda y más a la derecha de la cadena 00101, que es generado por la siguiente gramática:

S  A1B A  0A | ε B  0B | 1B | ε

2010 Lenguajes Formales y de Programación 25

Cuestionario (solución)

1. S  0S1 | 01

2. Derivaciones

– Izquierda: S => A1B => 0A1B => 00A1B => 001B

=> 0010B => 00101B => 00101

– Derecha: S => A1B => A10B => A101B => A101

=> 0A101 => 00A101 => 00101

2010 Lenguajes Formales y de Programación 26

Referencias

Documento similar