Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Prof. Gloria Inés Alvarez V. Departamento de Ciencias e Ingenierı́a de la Computación Pontificia Universidad Javeriana Cali 6 de abril de 2008 Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Gramáticas Incontextuales Son una forma de representar lenguajes. Sus caracterı́sticas principales son: Son más poderosas que los DFAs y las expresiones regulares. Pueden describir algunas caracterı́sticas con estructura recursiva. Se utilizaron primero en el estudio de los idiomas humanos. Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Gramáticas Incontextuales Tienen múltiples aplicaciones: Para expresar la relación que hay entre las diversas categorı́as gramaticales en el estudio de los idiomas humanos. En la especificación y compilación de los lenguajes de programación. Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Gramáticas Incontextuales Definición Una gramática incontextual es una 4-tupla (V , Σ, R, S) donde: V es un conjunto finito de sı́mbolos no terminales (variables) Σ es un conjunto finito de sı́mbolos terminales R es un conjunto finito de producciones de la forma A → α donde A ∈ V y α ∈ {V ∪ Σ}∗ S ∈ V es el sı́mbolo inicial Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Ejemplo de Gramática Incontextual Sea G1 = (V , Σ, R, S), donde: V = {A, B} Σ = {0, 1, #} R = A → 0A1, A → B, B → # S =A Una gramática se utiliza para generar cadenas. Por ejemplo, G1 genera la cadena 000#111, se puede ver su derivación y dibujar su árbol de análisis sintáctico. Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Derivación Definición Sean u, v , w ∈ {V ∪ Σ}∗ y (A → w ) ∈ R se dice que uAv ⇒ uwv . Definición Se dice que u deriva v , (u ⇒∗ v ) si u = v ó si existe u1 , u2 , . . . , uk con k ≥ 0 tal que u ⇒ u1 ⇒ u2 ⇒ · · · ⇒ uk ⇒ v . Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Lenguaje de una gramática Definición El lenguaje de una gramática G es {w | w ∈ Σ∗ , S ⇒∗ w }, siendo S el sı́mbolo inicial de G . Ejemplos: G3 = ({S}, {a, b}, {S → aSb | SS | ε}, {S}) G4 = ({EXP, TERM, FACT }, {a, +, ∗, (, )}, {EXP → EXP + TERM | TERM, TERM → TERM ∗ FACT | FACT , FACT → (EXP) | a}, {EXP}) Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Diseño de Gramáticas Incontextuales Un lenguaje incontextual puede ser la unión de otros más simples Si el lenguaje es regular, se puede construir un DFA que lo reconozca y luego convertir el autómata en gramática: Construir un no terminal Ri por cada estado qi Agregar una regla Ri = aRj por cada transición δ(qi , a) = qj Agregar una regla Ri → ε por cada estado final R0 será el sı́mbolo inicial de la gramática si q0 es el estado inicial del autómata Para coordinar la primera y segunda parte de una cadena, usar reglas de la forma R → uRv Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Ambigüedad Definición Una derivación de una cadena w en una gramática incontextual G es una derivación más izquierda si a cada paso se reemplaza el sı́mbolo no terminal que se encuentra más a la izquierda. Definición Una cadena w es derivada ambiguamente de una gramática incontextual G si tiene dos o más derivaciones más izquierdas. Una gramática G es ambigua si genera alguna cadena ambiguamente. Definición Un lenguaje inherentemente ambiguo es aquel que sólo puede reconocerse con gramáticas ambiguas. Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Ejemplo 1 de Gramática ambigua EXP → EXP + EXP EXP → EXP ∗ EXP EXP → (EXP) EXP → a Ver árboles de análisis sintáctico para a + a ∗ a Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Ejemplo 2 de Gramática ambigua ORACION → F SUST F VERBAL F SUST → SUST COMP | SUST COMP F PREP FV ERBAL → VERBO COMP | VERBO COMP F PREP F PREP → PREP SUST COMP SUST COMP → ART SUST VERBO COMP → VERBO | VERBO F SUST ART →un | una | el | la SUST →juan | maria | flor | telescopio VERBO →mira | cuida PREP →con juan mira a maria con el telescopio Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Forma Normal de Chomsky Definición Una gramática incontextual está en forma normal de Chomsky si todas sus reglas son de la forma: A → BC ó A → a donde A, B, C son no terminales y B, C no son el sı́mbolo inicial de la gramática. Se permite la producción S → ε para el sı́mbolo inicial. Teorema Todo lenguaje incontextual es generado por una gramática en forma normal de Chomsky. Computabilidad y lenguajes formales: Sesión 19. Gramáticas Incontextuales (Context Free Grammars) Demostración Demostración. Toda gramática incontextual puede transformarse en una en forma normal de Chomsky que reconoce el mismo lenguaje. La transformación se realiza por etapas: 1 Se adiciona un nuevo sı́mbolo inicial 2 Se consideran las reglas vacı́as: A → ε se elimina y por cada vez que aparece A en el lado derecho de una regla se adiciona otra regla igual salvo que la ocurrencia de A no está. 3 Se considera las reglas unitarias: A → B se elimina y toda regla de la forma B → u se duplica cambiando B por A. 4 Se convierten el resto de reglas: A → u1 , u2 , . . . , uk con k ≥ 3 se reemplaza por las reglas: A → u1 A1 , A1 → u2 A2 , . . . , Ak−2 → uk−1 uk . Si ui es un terminal, se reemplaza por Ui y se adiciona Ui → ui