Lección 3: Lenguajes independientes del contexto

Post on 15-Nov-2021

6 views 0 download

Transcript of Lección 3: Lenguajes independientes del contexto

1

Lección 3: Lenguajes independientes del contexto

Gramáticas independientes de contexto (GIC)

Conceptos básicos Ambigüedad

Autómatas con pila (AP)

Definición de autómata con pilaDeterminismo y no determinismo

Formas normales

SimplificaciónForma normal de Greibach

Equivalencia entre APs y GICs

Propiedades y aplicaciones

Lección 3: GIC 2

Gramáticas independientes del contexto

• Elementos:

• Elementos distinguidos S ∈ N símbolo inicial

• Definición formal:G = (N, Σ, S, P) con α → β ∈ P, α ∈ N , β ∈ (N ∪ Σ )*

• Derivación: δ1, δ2, σ1, σ2, β ∈ (N ∪ Σ )* Α ∈ Nδ1 ⇒ δ2 si y solo si δ1 = σ1Ασ2, δ2 = σ1βσ2 y Α → β ∈ P

• Lenguaje generado: L(G) = { w∈Σ*: S ⇒ w }*

Com ponentes Com ponentes form ales

Categorias N conjunto de no term inales

Fuente de entrada Σ alfabeto de term inales

Lección 3: GIC 3

Derivaciones y Árboles• Derivación a la izquierda:

δ1, δ2, σ, β ∈ (N ∪ Σ )* Α ∈ N, w ∈ Σ*δ1 ⇒ δ2 si y solo si δ1 = wΑσ, δ2 = wβσ y Α → β ∈ P

• Árbol de derivación o árbol 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

X1X2…Xk leídos de izquierda a derecha entonces la regla 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 ó ε el árbol es completo y la frontera es una palabra de L(G).

Lección 3: GIC 4

Ambigüedad

• G es ambigua si existe x ∈L(G) con al menos dos árboles de derivacióndiferentes.

• G es inherentemente ambigua si no existe una gramática no ambiguaequivalente a G.

Lección 3: Autómatas con pila 5

Autómatas con pila (AP)- Elementos:

- Elementos distinguidos para la inicialización y aceptación:q0 ∈Q: estado inicialF ⊆ Q: conjunto de estados finalespila vacía

- Ciclo-máquina

Componentes físicos Componentes lógicos

Unidad de Proceso Q conjunto de estados

Fuente de entrada Σ alfabeto de entrada

Pila Γ alfabeto de pila

Consultas: • estado actual • símbolo de entrada • cima de la pila

Acciones: • avance en la entrada • cambio de estado

• modificación de la pila:desempilar un elemento ó desempilar un elemento y empilar uno o más

Lección 3: Autómatas con pila 6

Autómatas con pila (AP)- Definición formal:

M = (Q, Σ, Γ, δ, q0, F) con δ : Q × Σ × Γ ∪ {⊥} - → ℘(Q × Γ*)

-Configuración:(q, w, α) ∈ Q × Σ* × Γ*

-Movimiento:

(p, sw, Aα) ├── (q, w, βα) si y solo si (q, β) ∈ δ(p, s, A)

(p, sw, ε) ├── (q, w, β) si y solo si (q, β) ∈ δ(p, s, ⊥)

- Lenguaje aceptado:

L(M) = { w∈Σ*: ∃ p∈F (q0, w, ε) ├── (p, ε, ε) }*

Lección 3: Autómatas con pila 7

Determinismo y no determinismo- Diseñar un autómata con pila que reconozca el siguiente lenguaje:

L = { wcwR: w ∈ {a,b}* }

- Diseñar un autómata con pila que reconozca el siguiente lenguaje:

L = { wwR: 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). Es decir,

L(AFD) = L(AFND) pero L(APD) ≠L(AP)

Lección 3: Formas normales 8

Formas Normales

Definiciones:

• Símbolo útil, X: S αXβ w

• Símbolo accesible, X: S αXβ

• Símbolo fecundo, X: X w

⇒*

⇒*

⇒*

⇒*

Lección 3: Formas normales 9

Eliminar símbolos inútiles (I)

entrada:G = (N, ∑, P, S) gramática independiente de contexto

salida:

G2 = (N2, ∑, P2, S) equivalente a G sin símbolos inútiles

proceso: primer paso:-- Objetivo: eliminar de G los no terminales estériles

-- Método: buscar inductivamente,los símbolos fecundos N1

-- Resultado: G1 = (N1, ∑, P1, S)

• Si A → w ∈ P con w∈Σ* entonces A∈N1

• Si A → α ∈ P con α ∈(N1 ∪Σ)*, entonces A∈N1P1 = { A → α ∈ P: α∈(Σ ∪ N1)*}

Lección 3: Formas normales 10

Eliminar símbolos inútiles (II)

segundo paso:-- Objetivo: eliminar los símbolos no accesibles-- Método: buscar inductivamente, los símbolos accesibles N2-- Resultado: G2 = (N2, ∑, P2, S)

• S ∈ N2 • Si A ∈N2, A → αBβ∈P1 y B∈N1 entonces B∈N2P2 = { A → α ∈P1: A∈N2 }

IMPORTANTE: El orden de los pasos no es conmutativo.

Lección 3: Formas normales 11

Eliminar producciones nulas (I)entrada:

G = (N, Σ, P, S) independiente de contexto con S no recursivosalida:

G2 = (N2, Σ, P2, S) equivalente a G y tal que si A → ε ∈ P2 entonces A es el símbolo inicial de la gramática.

proceso: primer paso: -- Objetivo: construcción del conjunto de símbolos anulables

AN = {A ∈ N: A ε ∈ P}

-- Método: aplicar la definición inductiva de símbolo anulable

• Si A → ε ∈ P entonces A ∈ AN• Si A → α ∈ P con α ∈ AN*, entonces A ∈ AN

⇒*

Lección 3: Formas normales 12

Eliminar producciones nulas (II)segundo paso:-- Eliminar las producciones nulas y modificar P

P1 := P - {A → ε: A∈N}; P2:= ∅;for regla in P1 loop

if regla = A → X1X2…Xn thenP2 := P2 ∪ {A → Y1 Y2…Yn |

Yi = Xi si Xi no es anulableYi = Xi ó ε si Xi es anulableYi no es ε para todo i};

end if;end loop;if S ∈ AN then P2 := P2 ∪ { S → ε } end if;

Lección 3: Formas normales 13

Eliminar producciones unitarias (I)entrada:

G = (N, Σ, P, S) independiente de contexto sin producciones nulas salida:

G1 = (N, Σ, P1, S) equivalente sin producciones unitarias

proceso: primer paso:-- Objetivo: construir para cada A ∈ N el conjunto NA = {B ∈ N : A B}-- Método: aplicar la definición inductiva

• A ∈ NA• Si B ∈ NA y B → C ∈ P entonces C ∈ NA

⇒*

Lección 3: Formas normales 14

Eliminar producciones unitarias (II)segundo paso:-- Construir P1 eliminando las producciones unitarias

P1 := Ø;for A in N loop

for B in NA loopfor regla in P loop

if regla = B → α and α ∉ N thenP1 := P1 ∪ {A → α };

end if;end loop;

end loop;end loop;

Lección 3: Formas normales 15

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β

Eliminación de la recursividad inmediata a la izquierdade un no terminal A

Sean todas las reglas con A en el lado izquierdo (A-reglas):A → Aα1 |...| Aαn| β1|...|βm

donde las reglas A → βi no son recursivas a la izquierda.

⇒*

⇒*

Lección 3: Formas normales 16

Recursividad

Las cambiamos porA → β1 A ' |...| βm A '|β1|...|βm

A '→ α1 A '|...|αn A '|α1|...|αn

donde A' es un nuevo no terminal.

La nueva gramática es equivalente y sin recursión inmediata a la izquierda de A.

A (β1∪...∪βm )(α1 ∪ ... ∪ αn)∗ ⇒*

Lección 3: Formas normales 17

Otras transformaciones

Reemplazamiento

Sea A → αBβ ∈ P una regla tal que A, B ∈N

y sean B → β1 |...| βn todas las B-reglas

si eliminamos la regla A → αBβ y añadimos las reglas

A → αβ1β|...|αβnβ

la nueva gramática es equivalente

Lección 3: Formas normales 18

Otras transformaciones

Introducción de nuevos símbolos no terminales

Sea A → αβγ ∈ P una regla tal que A ∈N, α,β,γ ∈ (N∪ Σ) ∗

y Z un nuevo no terminal

si eliminamos la regla A → αβγ y añadimos las reglas

Z → β y A → αZγ

la nueva gramática es equivalente

Lección 3: Formas normales 19

Forma normal de Greibach (I) entrada:

G independiente de contexto simplificada salida:

G3 = (N3, Σ, P3, S) equivalente en FNG

preparación: Numeración de los no terminales y de las reglas.Elegimos una ordenación de N de la forma N = {A1, A2, ..., An} y ordenamos las reglas según dicho orden.A cada regla le asignamos el grupo dependiendo del primer símbolo del lado derecho de la regla

1.- si Ai → aβ con a∈Σ 2.- si Ai → Ajβ con i<j3.- si Ai → Aiβ 4.- si Ai → Ajβ con i>j

Lección 3: Formas normales 20

Forma normal de Greibach (II) Primer paso: eliminar la recursión a la izda en G = (N, Σ, P, S)

entrada: G simplificadasalida: G1 = (N1, Σ, P1, S) equivalente sin recursión a la izquierda

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 j≤i. Es decir, eliminar las reglas de los tipos 3 y 4.

-- Método: hacer reemplazamientos siguiendo el orden de N (para eliminar las reglas en las que j<i) y cambiar la recursión inmediata a la izquierda por recursión a la derecha (para eliminar las reglas en las que j = i).

Lección 3: Formas normales 21

Forma normal de Greibach (III) Primer paso: reducción de los grupos 4 y 3 al 2 y 1

for i in 1..n loopfor j in 1..i-1 loop --eliminar reglas del grupo 4 si hay

while hay regla Ai→ Ajα loopeliminar Ai → Ajα por reemplazamiento

end loop;end loop;

--eliminar reglas del grupo 3 si hayif hay reglas del grupo 3 para Ai then

eliminar recursión inmediata a la izquierda de Aiend if;

end loop;

Lección 3: Formas normales 22

Forma normal de Greibach (IV) Segundo paso: obtención de G3 en forma normal de Greibach

entrada: G1 simplificada y no recursiva a la izquierdasalida: 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 tipo 2.-- Método: aplicar reemplazamientos en orden inverso al de N1.-- Resultado: G2 = (N2, Σ, P2, S)

Lección 3: Formas normales 23

Forma normal de Greibach (V) primera parte:

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 reemplazamientoend loop;

end loop;end loop;

Lección 3: Formas normales 24

Forma normal de Greibach (VI) segunda parte:-- Objetivo: conseguir 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;

Lección 3: APs y GICs 25

Equivalencia entre APs y GICs

PROPOSICIÓN 7: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, a, ⊥) = {(q1, α): S → aα ∈ P}δ(q1, a, A) = {(q1, α): A → aα ∈ P}

El conjunto de estados finales será F = {q0, q1} si S → ε ∈ P y F = {q1} si S → ε ∉ P

Base de la demostración: w∈Σ+, S ⇒wα si y sólo si (q0, w, ε)├── (q1, ε, α)

Lección 3: APs y GICs 26

Equivalencia entre APs y GICs

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)

Lección 3: Propiedades 27

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 contextoG = (N1∪ N2∪{S}, Σ, P1∪ P2∪{S → S1S2}, S)

- L(G1)* es independiente de contextoG = (N1∪{S}, Σ, P1∪{S → SS1 |ε}, S)

- L(G1) ∩ L(G2) no es necesariamente independiente de contexto.

{ anbjcj: n,j ≥ 0 } ∩ { akbkcp: k,p ≥ 0 }

- L(G1) no es necesariamente independiente de contexto.

Lección 3: Aplicaciones 28

Aplicaciones Los lenguajes independientes de contexto se utilizan para describir la sintaxis.

Las aplicaciones de los mismos generalmente se basan en el uso de gramáticas.

Es más intuitivo escribir gramáticasEs más sencillo entender las gramáticas

Ejemplos:

1) Analizadores sintácticos

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

Lección 3: Aplicaciones 29

Ejemplo de sintaxis de Ada

sequence_of_statements ::= statement {statement}statement ::= {label} simple_statement | {label} compound_statementsimple_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| code_statement

compound_statement ::= if_statement | case_statement| loop_statement | block_statement| accept_statement | select_statement

if_statement ::= if condition then sequence_of_statements {elsif condition then sequence_of_statements}[else sequence_of_statements]end if;

http://www.acm.org/sigada/

Lección 3: Aplicaciones 30

Gramática DTD

DTD estandar para publicar en la Web las descripciones de los distintos PCs que venden .

<!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)>

]>

Lección 3: Aplicaciones 31

Documento XML Parte de un documento que sigue la estructura de la DTD:

<PCS><PC>

<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>

Lección 3: Aplicaciones 32

GICs y Gramáticas DTD 1) Formato DTD:

<!ELEMENT PROCESADOR (FABRICANTE, MODELO, VELOCIDAD)>

Formato GIC: Procesador → Fabricante Modelo Velocidad

2) 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: PC → Modelo Precio Procesador Ram DiscosDiscos → Disco | Disco Discos