Gramáticas libres de contexto

Documentos relacionados
Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars)

Proyecto Intermedio Algoritmo de Earley

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

Lenguajes y Compiladores Aspectos Formales (Parte 1) Compiladores

1. Define que es un Autómatas finitos determinanticos y cuáles son sus elementos constitutivos (explique cada uno de ellos).

Conceptos básicos sobre gramáticas

LENGUAJES Y GRAMÁTICAS

Compiladores. Análisis Sintáctico Ascendente. Adrian Ulises Mercado Martínez. Facultad de Ingeniería, UNAM. 5 de septiembre de 2013

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Procesadores de Lenguaje

Lenguajes independientes de contexto o incontextuales

16 Análisis sintáctico I

GRAMATICAS LIBRES DEL CONTEXTO

GRAMÁTICAS LIBRES DE CONTEXTO

Modelos De Computación. Guía Modelos de Computación. Tema I: Lenguajes y Gramáticas

Gramáticas tipo 0 o Estructura de frase En este tipo de gramáticas no hay restricción en su producciones y tienen la forma siguiente.

Nombre de la asignatura: Lenguajes y Autómatas I. Créditos: Aportación al perfil

1. Cadenas EJERCICIO 1

Lenguajes y Compiladores Aspectos Formales (Parte 2) Compiladores

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Introducción a la lingüística computacional

Introducción. Las gramáticas definen las reglas que definen a los lenguajes Las reglas pueden tener una diversa variedad de esquemas

Lenguajes Incontextuales

Capítulo 9. Introducción a los lenguajes formales. Continuar

Ingeniería en Computación. Autómatas y Lenguajes Formales. Unidad de competencia IV: Conocer, utilizar y diseñar gramáticas de libre contexto

Tema 2. Concepto de Algoritmo

Introducción a la lingüística computacional

Expresiones regulares, gramáticas regulares

Controla el flujo de tokens reconocidos por parte del analizador léxico. 4.2 Introduccion a las gramaticas libres de contexto y arboles de derivacion

ESCUELA: UNIVERSIDAD DEL ISTMO

5 Autómatas de pila 5.1 Descripción informal. 5.2 Definiciones

PROGRAMACIÓN II AÑO 2009 TALLER 3: TEORÍA DE LENGUAJES Y AUTÓMATAS

Tema 3: Gramáticas regulares. Teoría de autómatas y lenguajes formales I

LENGUAJES Y GRAMÁTICAS

Ejercicio. Usando la formulación del principio de inducción mostrada en la transparencia anterior, demuestre que: 2 2 n 1esdivisiblepor3. =2 n.

INTRODUCCIÓN A COMPILADORES Y LENGUAJES FORMALES LENGUAJES FORMALES

El proceso del Análisis Léxico

Compiladores: Sesión 3. Análisis léxico, expresiones regulares

Interrogación 2. Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. Segundo Semestre, 2003

Tema: Autómata de Pila

Autómatas de Pila y Lenguajes Incontextuales

Unidad 4. Autómatas de Pila

Departamento de Tecnologías de la Información. Tema 5. Decidibilidad. Ciencias de la Computación e Inteligencia Artificial

Computabilidad y Lenguajes Formales: Autómatas Finitos

Unidad 4. Autómatas de Pila

Expresiones regulares, gramáticas regulares Unidad 3

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

ÁRBOLES DE SINTAXIS. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales.

PRACTICA 5: Autómatas Finitos Deterministas

Diseño de Compiladores I. Estructura General de un Compilador

CAPITULO 5: GRAMÁTICAS

Introducción al Diseño de Compiladores. Año

Unidad II: Análisis semántico

MODELOS DE COMPUTACION I Preguntas Tipo Test. 1. El lema de bombeo puede usarse para demostrar que un lenguaje determinado es regular.

3.3. TEORÍA BÁSICA DE CONJUNTOS Utilizar tablas de verdad para comprobar la equivalencia lógica p q p q.

Autómatas de Estados Finitos

DEFINICIÓN FORMAL DE UN AFP

Examen. Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación. Segundo Semestre, 2003.

22, 23 y 24 Análisis sintáctico V Compiladores - Profr. Edgardo Adrián Franco Martínez

Coordinación de Ciencias Computacionales INAOE. Teoría de Autómatas y Lenguajes Formales. Temario detallado para examen de ingreso 2012

ANÁLISIS LÉXICO AUTÓMATAS FINITOS

CUP. Diseño de compiladores. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP 20/04/2014

Área: INFORMÁTICA. Saber- Saber: Identificar DFD como herramienta para escribir los algoritmos de forma lógica.

10 Análisis léxico VI Compiladores - Profr. Edgardo Adrián Franco Martínez

La Forma Normal de Chomsky

DATOS DE IDENTIFICACIÓN. Materia: Introducción a la teoría de los lenguajes formales Definición de alfabeto ETAPA PREINSTRUCCIONAL

Los parámetros: son los campos que se comunican a los métodos de los objetos.

Sintaxis y Semántica. Tema 3. Sintaxis y Semántica. Expresiones y Lenguajes Regulares. Dr. Luis A. Pineda ISBN:

No todos los LRs finitos se representan mejor con ERs. Observe el siguiente ejemplo:

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

INAOE. Expresiones Regulares. Operadores y Operandos. Equivalencia de Lenguajes de FA y Lenguajes RE. Leyes Algebraicas de las. Expresiones Regulares

UNIDAD DE APRENDIZAJE I

Teoría de Autómatas y Lenguajes Formales. Introducción a las Gramáticas. Gramáticas incontextuales

El simbolismo del lenguaje algebraico ha ido modificándose al paso del tiempo. Sus orígenes se remontan a Babilonia, Egipto, Grecia y Arabia.

1.-DEFINE EN QUE CONSISTEN LAS GRAMÁTICAS LIBRES DE CONTEXTO

Introducción a la Lógica y la Computación

Universidad de Valladolid

Máquinas de estado finito y expresiones regulares

Tema 1: Introducción. Teoría de autómatas y lenguajes formales I

TIPOS DE GRAMATICAS JERARQUIAS DE CHOMSKY

Las expresiones son combinaciones de constantes, variables, símbolos de operación, paréntesis y nombres de funciones especiales.

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

Compiladores: Parsing ascendente

Operaciones algebraicas

Tema 01: Algoritmia y diagramas de flujo. Estructuras de datos (Prof. Edgardo A. Franco)

Introducción a la Lógica y la Computación

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

John Venn Matemático y filósofo británico creador de los diagramas de Venn

SSL Guia de Ejercicios

Máquinas Secuenciales, Autómatas y Lenguajes. Tema 4: Expresiones Regulares. Luis Peña

INFORMATICA TECNICATURA DE NIVEL SUPERIOR ALGUNOS EJERCICIOS DE SELECCIÓN E ITERACION

Transcripción:

Gramáticas libres de contexto Conceptos básicos El siguientes es un ejemplo de una gramática libre de contexto, a la cual llamaremos G1. A 0A1 A B B # Una gramática consiste de una colección de reglas de sustitución, también llamadas producciones. Cada regla aparece como una línea en la gramática, comprendiendo un símbolo y una palabra separada por una flecha, en donde el símbolo es llamado variable. La palabra consta de variables y otros símbolos llamados terminales. Las variables a menudo son representadas con letras mayúsculas. Las terminales son análogas al alfabeto de entrada y a menudo son representadas por letras minúsculas, números o símbolos especiales. Una variable es designada como la variable de inicio. Esto usualmente ocurre en el lado izquierdo en lo más alto de la regla. Por ejemplo, la gramática G1 contiene tres reglas, siendo las variables A y B, donde A es la variable de inicio y sus terminales son 0, 1, y #. Se usan las gramáticas para describir un lenguaje mediante la generación de cada palabra del lenguaje de la siguiente manera: 1. Se escribe la variable de entrada. 2. Se encuentra una variable para sustituirse y una regla que empiece con esa variable. Se remplaza la variable con el lado derecho de esa regla. 3. Se repite el paso 2 hasta que no queden variables. Por ejemplo en la G1 genera la palabra 000#111. La secuencia de sustituciones para obtener una palabra es llamada derivación. Una derivación de la palabra 000#111 en la gramática G1 es: A 0A1 00A11 000A111 000B111 000#111 Se puede representar la misma información gráficamente mediante un árbol parser de la siguiente manera: DIBUJO DE PARSER Todas las palabras generadas de esta forma constituyen el lenguaje de la gramática. Escribimos L(G1) para el lenguaje de la gramática G1. Experimentando con la gramática G1 se muestra que L(G1) es {0 n #1 n n 0}. Cualquier lenguaje que pueda ser generado por alguna gramática libre de contexto es llamado un lenguaje 1 Prof. Juan Juárez Fuentes

libre de contexto (CFL por sus siglas en ingles context-free language). Por conveniencia se muestra una gramática libre de contexto, abreviamos varias reglas con la misma variable del lado izquierdo, tal como A A1 y A B, en un sola línea A 0A1 B, usando el símbolo como un or. El siguiente es un ejemplo de una gramática libre de contexto, llamada G2, que describe un fragmento del lenguaje Ingles. [SENTENCE] [NOUN-PHRASE] [VERB-PHRASE] [NOUN-PHRASE] [CMPLX-NOUN] [CMPLX-NOUN] [PREP- PHRASE] [VERB-PHRASE] [CMPLX-VERB] [CMPLX-VERB] [PREP-PHRASE] [PREP-PHRASE] [PREP] [CMPLX-NOUN] [CMPLX-NOUN] [ARTICLE] [MOUN] [CMPLX-VERB] [VERB] [VERB] [NOUN-PHRASE] [ARTICLE] a the [NOUN] boy girl flower [VERB] touches likes sees [PREP] with La gramática G2 tiene 10 variables (los términos gramaticales en mayúsculas escritos entre corchetes); 27 terminales (el alfabeto Ingles estándar mas un carácter de espacio); y 18 reglas. Las palabras en L(G2) incluyen A boy sees The boy sees a flower A girl with aflower likes theboy Cada una de estas oraciones tiene una derivación en la gramática G2. La siguiente es una derivación de la primera oración en la lista. [SENTENCE] [NOUN-PHRASE] [VERB-PHRASE] [CMPLX-NOUN] [VERB-PHRASE] [ARTICLE] [MOUN] [VERB-PHRASE] a [MOUN] [VERB-PHRASE] a boy [VERB-PHRASE] a boy [CMPLX-VERB] a boy [VERB] a boy sees Definición formal de una gramática libre de contexto Una gramática libre de contexto es una 4-tupla (V, Σ, R, S), donde: 2 Prof. Juan Juárez Fuentes

1. V es un conjunto finito llamado variables, 2. Σ es un conjunto finito disjunto de V, llamado terminales, 3. R es un conjunto finito de reglas, con cada regla siendo una variable y una palabra de variables y terminales, y 4. S V es la variable de inicio. Si u, v, y w son palabras con variables y terminales, y A w es una regla de la gramática, decimos que uav produce uwv, escrito como uav uwv. Decimos que u deriva a v, escrito u -> v, si u = v o si una secuencia u1, u2,,uk existe para k 0 y u -> u1 -> u2 -> -> uk -> v. El lenguaje de la gramática es {w Σ* S -> w}. En la gramática G1, V = {A, B}, Σ = {0,1,#}, S = A, y R = {A 0A1, A B, B #} En la gramática G2: V = {[SENTENCE], [NOUN-PHRASE], [VERB-PHRASE], [PREP-PHRASE], [CMPLX-NOUN], [CMPLX-VERB], [ARTICLE], [NOUN], [VERB], [PREP] }, y Σ = {a, b, d,,z, }. El símbolo es el símbolo blanco, que es invisible después de cada palabra de un lenguaje (a, boy, etc.), por lo que las palabras de un lenguaje no pueden estar juntas. A menudo especificamos una gramática escribiendo sólo sus reglas. Podemos identificar las variables como los símbolos que aparecen en el lado izquierdo de las reglas y los terminales como los símbolos restantes. Por convención, la variable de inicio es la variable del lado izquierdo de la primera regla. Ejemplos de gramáticas liebres de contexto Ejemplo 3: Considere la gramática G3 = ({S}, {a, b}. R, S). El conjunto de reglas, R, es S -> asb SS ε Esta gramática genera palabras tales como abab, aaabbb, y aababb. Se puede ver muy fácilmente que este lenguaje es si se toma a la terminal a como el paréntesis izquierdo ( y a b como el paréntesis de la derecha ). Visto de esta forma, L(G3) es el lenguaje de todas las palabras o strings con paréntesis anidados apropiadamente. Ejemplo 4: Considere la gramática G4 = (V, Σ. R, ). V es {,, } y Σ es {a, +, x, (, )}. Las reglas son: -> + -> x 3 Prof. Juan Juárez Fuentes

-> ( ) a Las dos palabras a+axa y (a+a)xa pueden ser generadas con la gramática G4. Los árboles parse son los siguientes: a + a x a ( a + a ) x a Un compilador traduce código escrito en un lenguaje de programación en otra forma, usualmente una mas adecuada para su ejecución. Para hacer esto el compilador extrae el significado del código a ser compilado en un proceso llamado parsing. Una representación de este significado es el arbol parse para dicho código, en la gramática libre de contexto para el lenguaje de programación. La gramática G4 describe un fragmento de un lenguaje de programación que trata con expresiones aritméticas. 4 Prof. Juan Juárez Fuentes

Los árboles parse de la gramática G4 agrupan operaciones, el árbol para a+axa agrupa el operador x y sus operandos (las segundas dos a s) como un operando del operador +. En el árbol para (a+a)xa, la agrupación es al revés. Estos agrupamientos muestran la precedencia estándar de la multiplicación antes que la adición y el uso de los paréntesis para hacer caso omiso de la precedencia estándar. La gramática G4 es diseñada para capturar estas relaciones de precedencia. Diseño de gramáticas libres de contexto Así como el diseño de un autómata finito, el diseño de una gramática libre de contexto requiere creatividad. Ciertamente las gramáticas libres de contexto son mas difíciles de construir que un autómata finito porque estamos mas acostumbrados a programar maquinas para tareas especificas. Cuando tenemos el problemas de construir una gramática libre de contexto, debemos tomar en cuenta: Primero, Que muchos lenguajes libres de contexto son la unión de lenguajes libres de contexto más simples. Si se debe construir una gramática libre de contexto para un lenguaje libre de contexto que se puede partir en partes mas simples, realizamos esa división y entonces construimos gramáticas individuales para cada pieza. Esas gramáticas individuales pueden ser fácilmente unidas en una gramática para el lenguaje original mediante la combinación de sus reglas y posteriormente adicionamos una nueva regla S S1 S2 Sk, donde las variables Si son las variables de inicio para las gramáticas individuales. Resolver varios problemas simples es a menudo más fácil que resolver uno complicado. Por ejemplo, para obtener la gramática para el lenguaje {0 n 1 n n 0} {1 n 0 n n 0}, 1. primero construimos la gramática: S1 0S11 ε Para el lenguaje {0 n 1 n n 0} y 2. la gramática: S2 1S20 ε Para el lenguaje {1 n 0 n n 0} 3. y entonces sumamos la regla S S1 S2 para dar la gramática: S S1 S2 S1 0S11 ε S2 1S20 ε Segundo, Construir una GLC para un lenguaje que sucede que es regular es fácil si primero se construye un AFD para ese lenguaje. Se puede convertir cualquier AFD en su equivalente GLC como sigue: 5 Prof. Juan Juárez Fuentes

1. Hacer una variable Ri para cada estado qi del AFD. 2. Adiciona la regla Ri arj a la GLC si δ(qi, a) = qj es una transición en el AFD. 3. Adiciona la regla Ri ε si qi es un estado de aceptación del AFD. 4. Hacer R0 la variable de inicio de la gramática, donde q0 es el estado de inicio de la maquina. 5. Verificar que la GLC resultante genere el mismo lenguaje que el AFD reconoce. Tercero, Ciertos lenguajes libres de contexto contienen strings con dos substrings que son enlazados en el sentido de que una maquina para tal lenguaje podría necesitar recordar una ilimitada cantidad de información acerca de uno de los substrings para verificar que corresponda apropiadamente al otro substring. Esta situación ocurre en el lenguaje {0 n 1 n n 0} porque la maquina podría necesitar recordar el numero de 0 s en orden para verificar que es igual al numero de 1 s. Se puedes construir una GLC para manejar esta situación mediante el uso de la regla de la forma R urv, que genera strings donde la porción que contiene las u s corresponde a la porción que contiene las v s. Finalmente, en lenguajes mas complejos, los strings pueden contener ciertas estructuras que aparecen recursivamente como parte de otras (o las mismas) estructuras. Esta situación ocurre en la gramática que genera expresiones aritméticas. Ambigüedad Algunas veces una gramática puede generar el mismo string de diferentes maneras, tal string tendrá diferentes árboles parser y por lo tanto diferentes significados. Este resultado puede ser indeseable para ciertas aplicaciones, tal como para los lenguajes de programación, donde dado un programa debe tener una única interpretación. Si una gramática genera el mismo string de diferentes maneras, se dice que el string es derivado ambiguamente en la gramática. Si una gramática genera algún string ambiguamente decimos que la gramática es ambigua. Por ejemplo, considere la gramática G5: + x ( ) a Esta gramática genera el string a+axa ambiguamente, con dos árboles parser como se muestra: 6 Prof. Juan Juárez Fuentes

a + a x a a + a x a Esta gramática no sigue la usual relación de precedencia y puede agrupar el + antes que x y viceversa. En contraste la gramática G4 genera exactamente el mismo lenguaje, dado que cada string generado tiene un único árbol parser. De aquí que G4 no es ambigua, mientras que G5 si lo es. La gramática G2 es otro ejemplo de gramática ambigua, debido a que la sentencia the girl touches the boy with the flower tiene dos derivaciones diferentes. Formalizando la noción de ambigüedad se puede decir que una gramática genera un string ambiguamente, lo que significa que el string tiene dos árboles parser diferentes (con derivaciones por la izquierda), no dos diferentes derivaciones (puesto que puede haber derivaciones por la derecha también). Dos derivaciones pueden diferir meramente en el orden en que son remplazadas las variables y no en toda su estructura. Cuando nos referimos a estructura definimos un tipo de derivación que remplaza variables en un orden determinado. La derivación de un string w en la gramática G es una derivación por la izquierda si en cada paso de la derivación se remplaza la variable restante que se encuentra más a la izquierda. Definición: Un string w es derivado ambiguamente en una gramática libre de contexto G, si w tiene dos o más derivaciones por la izquierda que sean diferentes. La gramática G es ambigua si genera algún string ambiguamente. Algunas veces cuando tenemos una gramática ambigua se puede encontrar una gramática no ambigua que genere el mismo lenguaje. Algunos lenguajes libres de contexto, sin embargo, pueden ser generados solo por gramáticas ambiguas, tales lenguajes son llamados inherentemente ambiguos. Formal Normal de Chomsky Adicionar esta parte para terminar. 7 Prof. Juan Juárez Fuentes