La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Gramáticas Libres de Contexto

Presentaciones similares


Presentación del tema: "Gramáticas Libres de Contexto"— Transcripción de la presentación:

1 Gramáticas Libres de Contexto
Def. Una gramática libre de contexto (context free grammar) es un cuadruplo G = <Vnt, , S, P>, en donde, Vn conjunto de símbolos terminales,  alfabeto, S símbolo inicial y en la cual las producciones P son de la forma: A   en donde A es una categoría sintáctica y  una cadena de símbolos terminales o categorías sintácticas. Las gramáticas libres de contexto generan lenguajes libres de contexto. Ejemplos de lenguajes libres de contexto: a). Los palíndromes que son palabras que se leen igual si se leen en cualquier dirección. Para un vocabulario de 0’s y 1’s: {, 0, 1, 00, 11, 010, 000, 101, 111, ...} ( es la cadena vacía) R1. S   R3. S  1 R5. S  1S1 R2. S  0 R4. S  0S0 b). {ai bi | i0} R1. S   R2. S  aSb

2 Gramáticas Libres de Contexto
Def. El lenguaje definido por una gramática es el conjunto de cadenas formadas por símbolos terminales que pueden ser derivadas a partir del símbolo inicial. Def. Una derivación es el resultado de aplicar una de las reglas de la gramática a la cadena. Teorema. Toda cadena en el lenguaje definido por una gramática, es derivable bajo el método de la derivación de más a la izquierda (leftmost derivation). Def. Una gramática libre de contexto G es ambigua, si existe una cadena   L(G), tal que  puede ser derivada utilizando dos derivaciones de más a la izquierda.

3 Gramáticas Libres de Contexto
Ejemplo: Jack was given a book by Hemingway

4 Gramáticas Libres de Contexto
Ejemplo: R1. E  C ; R2. E  V R3. E  V = E ; R E  E * E | E / E ; R6-7. E  E + E | E – E ; R8-9. V  x | y ; R C  12 | 25 | 500 ; Problema: Muestre que la cadena “X = * 12” es una oración válida del lenguaje generado por esta gramática.

5 Gramáticas Libres de Contexto
Solución: Leftmost derivation E R3 V = E R8 x = E R6 x = E + E R1 x = C + E R12 x = E R4 x = E * E R1 x = C * E R11 x = * E R1 x = * C R10 x = * 12 Rightmost derivation E R3 V = E R6 V = E + E R4 V = E + E * E R1 V = E + E * C R12 V =E + E * 12 R1 V =E + C * 12 R11 V =E + 25 * 12 R1 R1 V =E + 25 * 12 R1 V = C + 25 * 12 R10 V = * 12 R8 x = * 12

6 Gramáticas Libres de Contexto
Problemas Sea G la gramática siguiente: S  S A B |  A  a A | a B  b B |  Obtenga la derivación de más a la izquierda de abbaab. Muestre dos derivaciones de aa. Construya el árbol de derivación del inciso (a). Obtenga una expresión regular que defina L(G). Defina el lenguaje generado por la gramática: S  a S b b | A A  c A | c Construya una gramática sobre {a, b} cuyo lenguaje sea {ambian | i = n + m } Construya una gramática sobre {a, b, c} cuyo lenguaje sea {anbmc2n+m | n, m > 0}

7 Análisis Sintáctico Cada lenguaje de programación posee reglas que prescriben la estructura sintáctica de los programas bien-formados. La sintaxis de las construcciones de programas puede ser descrita utilizando una gramática libre de contexto CFG.

8 Análisis Sintáctico Ejemplo:
<stat>  <if_stat> | <while_stat> | <repeat_st> | <proc_call> | <assignment> ; <if_stat  if <cond> then <stat_seq> else <stat_seq> | if <cond> then <stat_seq> ; <while_Stat>  while <cond> do <stat_seq> end ; <repeat_stat>  repeat <stat_seq> until <cond> ; <proc_call  <name> “(” <expr_seq> “)” ; <assignment>  <name> = <exp> <stat_seq>  <stat> | <stat_seq> “;” <stat> <expr_seq>  <expr> | <expr_seq> “,” <expr>

9 Analizador Sintáctico
Eliminación de la recursividad izquierda Una gramática tiene recursividad izquierda si contiene un no-terminal A tal que existe una derivación A+A para alguna cadena . Un parser del tipo top-down no puede manejar la recursividad a a la izquierda. Ej. Elimine la recursividad izquierda de la siguiente gramática: A  A  |  Solución: A  A´ ; A´ A´|  Problema: elimine la recursividad izq. de la siguiente gramática: E  E + T | T T  T * F | F F  ( E ) | id

10 Analizador Sintáctico
Solución E  T E´ ; T  F T´ ; F  ( E ) | id E´ + T E´ |  ; T´ * F T´ | 

11 Formas Normales Una forma normal se define imponiendo restricciones a la forma permitida de las reglas de una gramática. Las gramáticas en forma normal, generan la totalidad de lenguajes libres de contexto. Dos formas normales importantes son: La forma normal de Chomsky La forma normal de Greibach Las transformaciones mostradas a continuación convierten cualquier gramática a una gramática equivalente en forma normalizada. Las restricciones impuestas para las reglas de reescritura, aseguran que la gramática tenga ciertas propiedades importantes: como la garantía de que el algoritmo de reconocimiento sintáctico terminará.

12 Formas Normales Forma Normal de Chomsky En donde B, C  V – {S}
Una gramática libre de contexto G = < V, , S, P> esta en la Forma Normal de Chomsky si cada regla tiene alguna de las siguientes formas: a. A  BC b. A  a c. S   En donde B, C  V – {S} Teorema. Toda gramática libre de contexto puede ser convertida a una gramática equivalente en la forma normal de Chomsky.

13 Formas Normales Forma Normal de Greibach
Una gramática libre de contexto G = < V, , S, P> esta en la Forma Normal de Greibach si cada regla tiene alguna de las siguientes formas: a. A  a A1A2…An b. A  a c. S   En donde a   y Ai  V – {S} para i = 1,2, … n Teorema. Toda gramática libre de contexto puede ser convertida a una gramática equivalente en la forma normal de Greibach.

14 Formas Normales Transformaciones básicas
El símbolo inicial no podrá ser usado en una secuencia recursiva. Ej. S  a S Eliminación de la palabra vacía. Una variable que deriva una cadena nula, es llamada nulificable. Una gramática sin variables nulificables es llamada una gramática sin-contracciones, ya que la aplicación de una regla nunca hará decrecer la longitud de la forma sentencial. Sólo el símbolo inicial puede reescribirse como la palabra vacía .

15 Formas Normales Ejemplo:
(a) Transforme la gramática mostrada a continuación en una gramática sin variables nulificables (excepto probablemente S). G: S  A C A A  a A a | B | C B  b B | b C  c C | 

16 Formas Normales 3. Eliminación de reglas encadenadas
Una regla de la forma A B, tan solo renombra variables. Reglas de esta forma son llamadas reglas encadenadas. Su eliminación simplifica la gramática. La eliminación de las reglas encadenadas incrementa el número de reglas en la gramática pero reduce la longitud de las derivaciones. Ejemplo: A  a A | a | B B  b B | b | C C  c C | c

17 Formas Normales 4. Símbolos Inútiles
En una gramática, cada variable debe contribuir a la generación de las oraciones del lenguaje. La construcción de gramáticas grandes básicamente haciendo modificaciones a otras gramáticas ya existentes, genera invariablemente símbolos inútiles. Def. Sea G una gramática libre de contexto. Un símbolo x  (V  ) es útil si existe una derivación: S * u x v * w En donde u, v  ( V   )* y w  *. Un símbolo que no es útil, es llamado inútil.

18 Formas Normales Ejemplo: Sea G la gramática con las siguientes reglas:
S  AC | BS | B D  aD | BD | C A  aA | aF E  aA | BSA B  CF | b F  bB | b C  cC | D a). Defina el lenguaje generado por la gramática L(G). b). Elimine los símbolos inútiles.

19 Ejercicios Sea G la gramática: S  aABC | a A  aA | a B  bcB | bc
C  cC | c Transformarla a Forma Normal de Chomsky y a Forma Normal de Greibach.. 2. Sea la Gramática AE: V={S, A, T}, ={b,+, (, )} P: S  A A  T A  A + T T  b T  (A) Transformar a la Forma Normal de Chomsky.

20 Ejercicios (cont.) 3. Construya las formas normales de Chomsky y Greibach para la gramática: S  SaB | aB B  bB | 

21 Diseñando un Gramática
Las gramáticas pueden describir la mayor parte, pero no toda la sintaxis de un lenguaje de programación. Una porción limitada del análisis sintáctico es desarrollada por el analizador lexicográfico que genera secuencias de átomos (tokens). Algunas restricciones sobre la entrada, no se pueden analizar utilizando una gramática libre de contexto. Por ejemplo las siguientes: Todos los identificadores deben ser declarados al inicio del programa. El número de parámetros de una subrutina o procedimiento debe coincidir en número y tipo con los argumentos con los que se invoca el mismo.

22 Analizador Sintáctico
El rol del analizador sintáctico: token parse tree lexical analyser rest of front end parser Get next token Tabla de Símbolos

23 Analizador Sintáctico
Métodos de parsing Top-down parsers: Construyen el árbol sintáctico (parse tree) a partir de la raiz. Bottom-up parsers: Construyen el árbol sintáctico a partir de las hojas. Normalmente ambos tipos de parser recorren la entrada de izquierda a derecha barriendo un símbolo a la vez.


Descargar ppt "Gramáticas Libres de Contexto"

Presentaciones similares


Anuncios Google