Tema 3: Lenguajes independientes del contexto Gramáticas independientes del contexto Gramáticas independientes de contexto (GIC) • Conceptos básicos Ambigüedad Ejemplos de GICs Elementos: C om ponentes C om ponentes form ales C ategorias N conju nto de no term inales Fu ente de entrada Σ alfabeto de term inales • Elementos distinguidos: S∈N símbolo inicial • Definición formal: G = (N, Σ, S, P) Autómatas con pila (AP) Definición de autómata con pila Determinismo y no determinismo. Ejemplos. Formas normales • Simplificación Forma normal de Greibach Equivalencia entre APs y GICs • con Α → β ∈P , Α∈N , β∈(N ∪ Σ)* Paso de derivación: δ1, δ2, σ1, σ2, β ∈ (N ∪ Σ)* Α∈N δ1 ⇒ δ2 si y solo si δ1 = σ1Ασ2, δ2 = σ1βσ2 y Α → β ∈ P * w} Lenguaje generado: L(G) = { w∈Σ*: S ⇒ Propiedades y aplicaciones 1 Tema 3: Leng. Indep. del Contexto Derivaciones • Paso de derivación a la izquierda: δ1 ⇒ δ2 si y solo si δ1 = wΑα, δ2 = wβα y Α → β ∈ P ∈Σ * con α, β ∈ (N ∪ Σ )* , Α∈N, w∈ • Derivación a la izquierda: * w con cada paso de derivación a la izquierda S ⇒ • Ejemplo: Dada la G.I.C: Árbol de derivación • S → ASB | ε A → aAb | ε B → bBa | ba Árbol de derivación (o de análisis) de G: Es un árbol etiquetado y ordenado tal que: - Todo nodo está etiquetado con un símbolo de N ∪ Σ ∪ {ε} - La raíz es el símbolo inicial. - Los nodos internos están etiquetados con símbolos no terminales - Si un nodo está etiquetado con A y sus k hijos están etiquetados X1 X2 … Xk (leídos de izquierda a derecha), entonces A → X1X2…Xk es una regla de la gramática. - Si un nodo está etiquetado con ε entonces es el único hijo de un nodo. Si todas las hojas son símbolos terminales ó ε entonces el árbol es completo y la frontera es una palabra de L(G). Derivación a la izquierda de la palabra aabbba: S ⇒ ASB ⇒ aAbSB ⇒ aaAbbSB ⇒ aabbSB ⇒ aabbB ⇒ aabbba Tema 3: Leng. Indep. del Contexto 2 3 Tema 3: Leng. Indep. del Contexto 4 Derivaciones y árboles (I) • Ejemplo: Derivaciones y árboles (II) La derivación Ejemplo: • Dos derivaciones a la izquierda: S ⇒ ScS ⇒ SbScS ⇒ abScS ⇒ abacS ⇒ abaca S ⇒ SbS ⇒ abS ⇒ abScS ⇒ abacS ⇒ abaca • Árboles de derivación: S ⇒ ASB ⇒ aAbSB ⇒ aaAbbSB ⇒ aabbSB ⇒ aabbB ⇒ aabbba tiene como árbol de derivación S A a a A A S b ε B b a S → ASB | ε A → aAb | ε B → bBa | ba S → SbS | ScS | a • b S ε Es un árbol completo con frontera: aabbba b a Tema 3: Leng. Indep. del Contexto 5 1. a a a S b S S c a S a 6 Gramática G que genera el lenguaje L(G) = { w.c.wR : w ∈ {a,b}* } G = (N, Σ, S, P) con N = {S}, Σ = {a,b,c} y P formado por las siguientes reglas de producción: • Equivalentemente, una gramática G es ambigua si existe x∈L(G) con al menos dos derivaciones a la izquierda. • Un lenguaje L es inherentemente ambiguo si todas las gramáticas para dicho lenguaje son ambiguas. S → aSa | bSb | c 2. Gramática G que genera el lenguaje L(G) = { w.wR : w ∈ {a,b}* } G = (N, Σ, S, P) con N = {S}, Σ = {a,b} y P formado por las siguientes reglas de producción: El lenguaje siguiente es inherentemente ambiguo: L = { aibjck | i=j ó j=k } Tema 3: Leng. Indep. del Contexto S Ejemplos de GICs (I) Una gramática G es ambigua si existe x∈L(G) con al menos dos árboles de derivación diferentes. Ej: La gramática S → SbS | ScS | a es ambigua Ej: S S Tema 3: Leng. Indep. del Contexto Ambigüedad • S c S S → aSa | bSb | ε 7 Tema 3: Leng. Indep. del Contexto 8 Ejemplos de GICs (II) 3. Ejemplos de GICs (III) Gramática G que genera el lenguaje L(G) = { anbn : n≥0 } 5. G = (N, Σ, S, P) con N = {S}, Σ = {a,b} y P formado por las siguientes reglas de producción: Primero observamos que k e i son independientes entre ellos. Usamos un nuevo no-terminal B que genere la subpalabra bk (k≥1) S → aSb | ε 4. Gramática G que genera el lenguaje L(G) = { aibkci : i≥0, k≥1 } G = (N, Σ, S, P) con N = {S,B}, Σ = {a,b,c} y P formado por las siguientes reglas de producción: Gramática G que genera el lenguaje L(G) = { anb2n : n≥0 } S → aSc | Β B → bB | b G = (N, Σ, S, P) con N = {S}, Σ = {a,b} y P formado por las siguientes reglas de producción: S → aSbb | ε 6. Tema 3: Leng. Indep. del Contexto 9 ¿ Gramática G que genera el lenguaje L(G) = { aibkci : i≥1, k≥0 } ? Tema 3: Leng. Indep. del Contexto Autómatas con pila (AP) - Elementos: C o m p on en tes físicos Autómatas con pila (AP) - Definición formal: C o m p on en tes lógicos U nidad de P roceso Q conjunto de estados F uente d e entrad a Σ alfabeto de entrad a P ila Γ alfabeto de pila M = (Q, Σ, Γ, δ, q0, F) con (q, w, α) ∈ Q × Σ* × Γ* q0 ∈Q: estado inicial F ⊆ Q: conjunto de estados finales pila (representada mediante Г*), la cima de la pila vacía (ε) se denota por ⊥ -Movimiento: - Ciclo-máquina: Acciones: • estado actual • avance en la entrada • símbolo de entrada • cambio de estado • cima de la pila Tema 3: Leng. Indep. del Contexto δ : Q × Σ × (Γ ∪ {⊥}) → ℘(Q × Γ*) -Configuración: - Elementos distinguidos para la inicialización y aceptación: Consultas: 10 - estado actual, palabra a leer, estado pila - (p∈Q, s∈Σ, w∈Σ*, A∈Γ, α∈Γ*) (p, s.w, Aα) ├── (q, w, βα) si y solo si (q, β) ∈ δ(p, s, A) (p, s.w, ε) ├── (q, w, β) si y solo si (q, β) ∈ δ(p, s, ⊥) - Lenguaje aceptado: • modificación de la pila: desapilar un elemento ó desapilar un elemento y apilar uno o más L(M) = { w∈Σ*: ∃ p∈F (q0, w, ε) ├── * (p, ε, ε) } 11 Tema 3: Leng. Indep. del Contexto 12 Ejemplo de AP Ejemplo de AP M = (Q, Σ, Γ, δ, q0, F) con Q = {q0 , qf } F = {qf } Γ = { A } Σ = {a,b} y δ como sigue: M = (Q, Σ, Γ, δ, q0, F) con Q = {q0 , qf } F = {qf } Γ = { A } Σ = {a,b} y δ como sigue: δ (q0,a,⊥) = {(q0, A), (qf, ε) } δ (qf, a, ⊥ ) = ∅ δ (q0,a,⊥) = {(q0, A), (qf, ε) } δ (qf, a, ⊥ ) = ∅ δ (q0, a, A) = { (q0, AA) , (qf, A) } δ (qf, a, A) = { (qf, ε) } δ (q0, a, A) = { (q0, AA) , (qf, A) } δ (qf, a, A) = { (qf, ε) } δ (q0, b, ⊥) = { (q0, A) } δ (qf, b, ⊥ ) = ∅ δ (q0, b, ⊥) = { (q0, A) } δ (qf, b, ⊥ ) = ∅ δ (q0, b, A) = { (q0, AA) } δ (qf, b, A) = { (qf, ε) } δ (q0, b, A) = { (q0, AA) } δ (qf, b, A) = { (qf, ε) } Cómputos posibles de M para la palabra aba: Cómputos posibles de M para la palabra baa: (q0, aba, ⊥) |-- (q0, ba, A) |-- (q0, a, AA) |-- (q0, ε, AAA) (q0, baa, ⊥) |-- (q0, aa, A) |-- (q0, a, AA) |-- (q0, ε, AAA) |-- (qf, ε, AA) |-- (qf, ba, ⊥) |-- ∅ |-- (qf, ε, AA) |-- (qf, a, A) por tanto aba ∉ L(M) Tema 3: Leng. Indep. del Contexto por tanto baa ∈ L(M) 13 Determinismo y no determinismo M = (Q, Σ, Γ, δ, q0, F) con Q = {q0 , qf } F = {qf } Γ = { A,B } Σ = {a,b,c} y δ como sigue: - Diseñar un autómata con pila que reconozca el siguiente lenguaje: δ (q0, a, ⊥ ) = {(q0, A)} : w ∈ {a,b}* } En general, a diferencia de lo que pasa entre L(AFD) y L(AFND), los lenguajes reconocidos por autómatas con pila deterministas (APD) no coinciden con los lenguajes reconocidos por autómatas con pila NO deterministas (AP): L(APD) ≠ L(AP) Tema 3: Leng. Indep. del Contexto 14 Diseñar un autómata con pila (determinista) que reconozca L = { w.c.wR : w ∈ {a,b}* } L = { w.c.wR : w ∈ {a,b}* } L={ Tema 3: Leng. Indep. del Contexto Ejemplo de AP determinista - Diseñar un autómata con pila (determinista) que reconozca el siguiente lenguaje: w.wR |-- (qf, ε, ε) δ (q0, a, Β ) = {(q0, AB)} δ (q0, b, B) = {(q0, ΒΒ)} δ (q0, a, A) = {(q0, AA)} δ (q0, b, A) = {(q0, BA)} δ (q0, c, ⊥) = {(qf, ε)} δ (qf, a, A) = { (qf, ε) } 15 δ (q0, b, ⊥) = {(q0, B)} Tema 3: Leng. Indep. del Contexto δ (q0, c, A) = {(qf, A)} δ (q0, c, B) = {(qf, B)} δ (qf, b, B) = { (qf, ε) } 16 Ejemplo de AP no determinista Formas Normales. Simplificación Diseñar un autómata con pila que reconozca L = { w.wR : w ∈ {a,b}* } Simplificación de GIC’s: M = (Q, Σ, Γ, δ, q0, F) con Q = {q0 , qf } F= {q0, qf } Γ= { A,B } Σ= {a,b} y δ como sigue: δ (q0, a, ⊥ ) = {(q0, A)} δ (q0, b, ⊥) = {(q0, B)} δ (q0, a, Β ) = {(q0, AB)} δ (q0, b, B) = {(q0, ΒΒ), (qf, ε)} δ (q0, a, A) = {(q0, AA), (qf, ε)} δ (q0, b, A) = {(q0, BA)} δ (qf, a, A) = {(qf, ε)} δ (qf, b, B) = {(qf, ε)} Tema 3: Leng. Indep. del Contexto 17 Consiste en eliminar: símbolos inútiles, producciones nulas y producciones unitarias de una gramática G, con el objetivo de obtener una gramática G’, equivalente a G y tal que cada paso de derivación α ⇒ β (en G’) verifica | α | ≤ | β | Tema 3: Leng. Indep. del Contexto Símbolo inútil Definiciones: * Símbolo accesible X si S ⇒ • Símbolo fecundo X si X ⇒ • Símbolo inútil = no accesible ó no fecundo Ejemplo: Eliminar símbolos inútiles (I) (para símbolos no terminales: X∈N) • S → AB | A A → Aa | ε B → bC C → cB D→a * entrada: G = (N, ∑, P, S) gramática independiente de contexto salida: G2 = (N2, ∑, P2, S) equivalente a G sin símbolos inútiles αXβ w 18 proceso: (con w∈Σ*) primer paso: -- Objetivo: eliminar de G los símbolos no fecundos -- Método: buscar inductivamente los símbolos fecundos, N1 • Si A → w ∈ P con w∈Σ* entonces A∈N1 ¿No fecundos? B , C ¿No accesibles? D • Si A → α ∈ P con α ∈(N1 ∪Σ)*, entonces A∈N1 -- Resultado: G1 = (N1, ∑, P1, S) con P1 = { A → α ∈ P : α∈(Σ ∪ N1)*} Tema 3: Leng. Indep. del Contexto 19 Tema 3: Leng. Indep. del Contexto 20 Eliminar símbolos inútiles (II) Eliminar producciones nulas (I) entrada: G = (N, Σ, P, S) independiente de contexto con S no recursivo salida: G2 = (N, Σ, P2, S) equivalente a G y tal que la única producción nula (A → ε) ∈ P2, si existe alguna, es con el símbolo inicial de la gramática: S → ε segundo paso: -- Objetivo: eliminar de G1=(N1, ∑, P1, S) los símbolos no accesibles -- Método: buscar inductivamente los símbolos accesibles, N2 • S ∈ N2 • Si A∈N2, A → αBβ ∈P1 y B∈N1 entonces B∈N2 proceso: primer paso: -- Objetivo: construcción del conjunto de símbolos anulables -- Resultado: G2 = (N2, ∑, P2, S) con P2 = { A → α ∈P1 : A∈N2 } ANUL = {A ∈ N: A * ⇒ε } -- Método: aplicar la definición inductiva de símbolo anulable • Si A → ε ∈ P entonces A ∈ ANUL • Si A → α ∈ P con α ∈ ANUL*, entonces A ∈ ANUL IMPORTANTE: El orden de los pasos no es conmutativo. Tema 3: Leng. Indep. del Contexto 21 Eliminar producciones nulas (II) 22 Eliminar producciones unitarias (I) segundo paso: -- Eliminar las producciones nulas y modificar P entrada: G = (N, Σ, P, S) independiente de contexto sin producciones nulas salida: G1 = (N, Σ, P1, S) equivalente a G sin producciones unitarias (A → Β) P1 := P - {A → ε : A ∈ N}; P2:= ∅; for regla in P1 loop if regla = A → X1X2…Xn then P2 := P2 ∪ { A → Y1 Y2…Yn | Yi es Xi si Xi ∉ANUL Yi es Xi ó es ε si Xi ∈ANUL Yi no es ε para todo i }; end if; end loop; if S ∈ ANUL then P2 := P2 ∪ { S → ε } end if; Tema 3: Leng. Indep. del Contexto Tema 3: Leng. Indep. del Contexto proceso: primer paso: -- Objetivo: construir para cada A ∈ N el conjunto UA = {B ∈ N : A -- Método: aplicar la definición inductiva: * ⇒ B} • A ∈ UA • Si B ∈ UA y B → C ∈ P entonces C ∈ UA 23 Tema 3: Leng. Indep. del Contexto 24 Forma Normal Eliminar producciones unitarias (II) segundo paso: -- Construir P1 eliminando las producciones unitarias Transformación de una GIC a forma normal: P1 := Ø; for A in N loop for B in UA loop for regla in P loop if regla = B → α and α ∉ N then P1 := P1 ∪ {A → α }; end if; end loop; end loop; end loop; Tema 3: Leng. Indep. del Contexto 25 Estudiaremos procedimientos para: eliminar recursión a izquierdas, reemplazamientos y otros .... con el objetivo de transformar cualquier G.I.C. G en G’, tal que G’ es equivalente a G y G’ en forma normal (de Greibach) y obtener un AP equivalente a partir de G’ (en F.N. Greibach) Tema 3: Leng. Indep. del Contexto 26 Recursividad Recursividad Producción o regla recursiva: A → αAβ * Recursividad no inmediata A ⇒ αAβ Producción o regla recursiva a la izquierda: A → Aβ * Recursividad a la izquierda A ⇒ Aβ Las cambiamos por A → β1 A’ |...| βm A’|β1|...|βm A’ → α1 A’|...|αn A’|α1|...|αn donde A’ es un nuevo no terminal. Eliminación de la recursividad inmediata a la izquierda de un símbolo no terminal A La nueva gramática es equivalente y sin recursión inmediata a la izquierda para A. Sean todas las reglas con A en el lado izquierdo (A-reglas): A → Aα1 |...| Aαn| β1|...|βm A donde las reglas A → βi no son recursivas a la izquierda. Tema 3: Leng. Indep. del Contexto 27 Tema 3: Leng. Indep. del Contexto * ⇒ (β1∪...∪βm )(α1 ∪ ... ∪ αn)∗ 28 Otras transformaciones Otras transformaciones Reemplazamiento Introducción de nuevos símbolos no terminales Sea A → αBβ ∈ P una regla tal que A, B ∈N Sea A → αβγ ∈ P una regla tal que A∈N, α,β,γ ∈ (N∪ Σ) ∗ y Z un nuevo no terminal y sean B → β1 |...| βn todas las B-reglas , si eliminamos la regla A → αβγ y añadimos las reglas si eliminamos la regla A → αBβ y añadimos las reglas Z→β A → αZγ A → αβ1β|...|αβnβ la nueva gramática es equivalente. Tema 3: Leng. Indep. del Contexto la nueva gramática es equivalente. 29 Forma normal de Greibach 30 Forma normal de Greibach (I) Definición: Una gramática independiente del contexto G = (N, Σ, P, S) está en Forma Normal de Greibach (FNG) si todas las reglas de producción (de P) son de la forma: entrada: G = (N, Σ, P, S) independiente de contexto simplificada salida: G3 = (N3, Σ, P3, S) en FNG equivalente a G preparación: Numeración de los no terminales y de las reglas. Elegimos una ordenación de N: A1 < A2 <... <An y clasificamos las reglas de P según dicho orden, de la siguiente forma: A cada regla le asignamos un grupo (1, 2, 3 ó 4) dependiendo del primer símbolo del lado derecho de la regla A → aβ con A∈N, a∈Σ, β∈N∗ Transformación a FNG: Toda GIC se puede transformar en otra GIC equivalente que esté en FNG (con la posible regla añadida S → ε para el caso en que ε pertenezca al lenguaje generado por la primera) Tema 3: Leng. Indep. del Contexto Tema 3: Leng. Indep. del Contexto 1.- si Ai → aβ con a∈Σ 3.- si Ai → Aiβ 31 Tema 3: Leng. Indep. del Contexto 2.- si Ai → Ajβ con Ai<Aj 4.- si Ai → Ajβ con Ai>Aj 32 Forma normal de Greibach (II) Forma normal de Greibach (III) Primer paso: eliminar la recursión a la izda en G = (N, Σ, P, S) Primer paso: reducción de los grupos 4 y 3 al 2 y 1 entrada: G simplificada salida: G1 = (N1, Σ, P1, S) equivalente sin recursión a la izquierda for i in 1..n loop --eliminar reglas del grupo 4 si hay for j in 1..i-1 loop while hay regla Ai → Ajα loop eliminar Ai → Ajα por reemplazamiento end loop; end loop; --eliminar reglas del grupo 3 si hay if hay reglas del grupo 3 para Ai then eliminar recursión inmediata a la izquierda de Ai end if; end loop; proceso: -- Objetivo: adecuar las reglas de la gramática de forma que "respeten" el orden establecido en N. Para ello hay que eliminar las reglas de la forma Ai → Ajα con Aj ≤ Ai. Es decir, eliminar las reglas de los grupos 3 y 4. -- Método: hacer reemplazamientos siguiendo el orden de N (para eliminar las reglas del grupo 4) y cambiar la recursión inmediata a la izquierda por recursión a la derecha (para eliminar las del grupo 3). Tema 3: Leng. Indep. del Contexto 33 Forma normal de Greibach (IV) 34 Forma normal de Greibach (V) primera parte: Segundo paso: obtención de G3 en forma normal de Greibach entrada: G1= (N1, Σ, P1, S) simplificada y no recursiva a la izquierda salida: G3 = (N3, Σ, P3, S) equivalente en FNG proceso: primera parte: -- Objetivo: poner las reglas en forma Ai → sα con s∈Σ. Es decir, eliminar las reglas del grupo 2. -- Método: aplicar reemplazamientos siguiendo el orden inverso al de N1. -- Resultado: G2 = (N2, Σ, P2, S) Tema 3: Leng. Indep. del Contexto Tema 3: Leng. Indep. del Contexto 35 N2 := N1; P2 := P1; for i in n-1.. 1 loop for j in n.. i+1 loop --eliminar reglas del grupo 2 while hay regla Ai → Ajα loop eliminar Ai → Ajα por reemplazamiento end loop; end loop; end loop; Tema 3: Leng. Indep. del Contexto 36 Forma normal de Greibach (VI) Equivalencia entre APs y GICs segunda parte: -- Objetivo: conseguir las reglas en FNG -- Método: cambiar terminales que no están en la primera posición de las partes derechas por nuevos no terminales. -- Resultado: G3 = (N3, Σ, P3, S) -- Utilizamos el conjunto de nuevos no terminales: {Zs : s∈Σ} N3 := N2; for regla in P2 loop para cada s y cada regla = A → αsβ cambiarla por A → αZsβ y Zs → s; N3 := N3 ∪ { Zs }; end loop; Tema 3: Leng. Indep. del Contexto 37 PROPOSICIÓN: Los lenguajes generados por gramáticas independientes de contexto son lenguajes reconocidos por autómatas con pila. Es decir, L(GIC) ⊆ L(AP) DEMOSTRACIÓN: Sea G = (N, Σ, P, S) una gramática independiente de contexto en FNG Construimos M = ({q0, q1}, Σ, N, δ, q0, F) donde δ(q0, s, ⊥) = {(q1, α) : S → sα ∈ P} δ(q1, s, A) = {(q1, α) : A → sα ∈ P} para s ∈Σ para s ∈Σ , A∈N (A≠S) El conjunto de estados finales: F = {q0, q1} si S → ε ∈P o bien F = {q1} si S → ε ∉P * wα si y sólo si (q , w, ε) ├── * (q , ε , α) Base de la demostración: w∈Σ+, S ⇒ 0 1 Tema 3: Leng. Indep. del Contexto Equivalencia entre APs y GICs 38 Propiedades de cierre Sean G1 = (N1, Σ, P1, S1) y G2 = (N2, Σ, P2, S2) dos GICs - L(G1) ∪ L(G2) es independiente de contexto G = (N1∪N2∪{S}, Σ, P1∪P2∪{S → S1 | S2}, S) - L(G1) • L(G2) es independiente de contexto G = (N1∪N2∪{S}, Σ, P1∪P2∪{S → S1S2}, S) Se puede demostrar que los lenguajes reconocidos por autómatas con pila son generados por gramáticas independientes de contexto. Es decir, L(AP) ⊆ L(GIC) - L(G1)* es independiente de contexto G = (N1∪{S}, Σ, P1∪{S → SS1 |ε }, S) - L(G1) ∩ L(G2) no es necesariamente independiente de contexto. Ej: { anbjcj: n,j ≥ 0 } ∩ { akbkcp: k,p ≥ 0 } - L(G1) no es necesariamente independiente de contexto. Tema 3: Leng. Indep. del Contexto 39 Tema 3: Leng. Indep. del Contexto 40 Aplicaciones Ejemplo de sintaxis de Ada http://www.acm.org/sigada/ Los lenguajes independientes de contexto se utilizan para describir la sintaxis. sequence_of_statements ::= statement {statement} statement ::= {label} simple_statement | {label} compound_statement Las aplicaciones de los mismos generalmente se basan en el uso de gramáticas. Es más intuitivo escribir gramáticas Es más sencillo entender las gramáticas simple_statement ::= null_statement | assignment_statement | exit_statement | goto_statement | procedure_call_statement | return_statement | entry_call_statement | requeue_statement | delay_statement | abort_statement | raise_statement Ejemplos: 1) | code_statement compound_statement ::= if_statement | case_statement Analizadores sintácticos | loop_statement | block_statement 2) Descripción de formatos de documentos mediante las definiciones de tipo de documento, DTD (Document Type Definition), que se usan en la comunidad XML (eXtensible Markup Language) para el intercambio de información en la Web | accept_statement | select_statement if_statement ::= if condition then sequence_of_statements {elsif condition then [else sequence_of_statements} sequence_of_statements] end if; Tema 3: Leng. Indep. del Contexto 41 Tema 3: Leng. Indep. del Contexto Gramática DTD 42 Documento XML Parte de un documento que sigue la estructura de la DTD: DTD estandar para publicar en la Web las descripciones de los distintos PCs que venden . <PCS> <PC> <!DOCTYPE PcSpecs [ <!ELEMENT PCS (PC*)> <!ELEMENT PC (MODELO, PRECIO, PROCESADOR, RAM, DISCO+)> <!ELEMENT MODELO (#PCDATA)> <!ELEMENT PRECIO (#PCDATA)> <!ELEMENT PROCESADOR (FABRICANTE, MODELO, VELOCIDAD)> <!ELEMENT FABRICANTE (#PCDATA)> <!ELEMENT MODELO (#PCDATA)> <!ELEMENT VELOCIDAD (#PCDATA)> <!ELEMENT RAM (#PCDATA)> <!ELEMENT DISCO (DISCODURO | CD |DVD)> <!ELEMENT DISCODURO (FABRICANTE, MODELO, TAMAÑO)> <!ELEMENT TAMAÑO (#PCDATA)> <!ELEMENT CD (VELOCIDAD)> <!ELEMENT DVD (VELOCIDAD)> ]> <MODELO>4560</MODELO> <PRECIO>1000€</ PRECIO > <PROCESADOR> <FABRICANTE>Intel</ FABRICANTE > <MODELO>Pentium</MODELO> <VELOCIDAD>800Mhz</ VELOCIDAD > </ PROCESADOR > <RAM>256</RAM> <DISCO><DISCODURO> <FABRICANTE>Maxtor</FABRICANTE> <MODELO>Diamond</MODELO> <TAMAÑO>30.5Gb</TAMAÑO> </DISCODURO></DISCO> <DISCO><CD> <VELOCIDAD>32x</ VELOCIDAD > </CD></DISCO> </PC> <PC> ..... </PC> </PCS> Tema 3: Leng. Indep. del Contexto 43 Tema 3: Leng. Indep. del Contexto 44 GICs y Gramáticas DTD 1) Formato DTD: <!ELEMENT PROCESADOR (FABRICANTE, MODELO, VELOCIDAD)> Formato GIC: 2) Procesador → Fabricante Modelo Velocidad Formato DTD: <!ELEMENT DISCO (DISCODURO | CD |DVD)> Formato GIC: Disco → Discoduro | Cd |Dvd 3) Formato DTD: <!ELEMENT PC (MODELO, PRECIO, PROCESADOR, RAM, DISCO+)> Formato GIC: Tema 3: Leng. Indep. del Contexto PC → Modelo Precio Procesador Ram Discos Discos → Disco | Disco Discos 45