tema 1. an´alisis léxico

Anuncio
TEMA 1. ANÁLISIS LÉXICO
PROCESADORES DE LENGUAJES
4o Informática
http://ccia.ei.uvigo.es/docencia/PL
1 de octubre de 2007
– FJRP 2007 ccia PL –
1.1 Algoritmo de Brzozowski
Construye Autómatas Finitos Deterministas (AFD) a partir de Expresiones Regulares (ER)
Basado en el concepto de derivación de una expresión regular
Derivación de una Expresión Regular
La derivación de una ER E respecto a un sı́mbolo a ∈ Σ (notado
a−1 [E]) es la nueva expresión regular que resulta de suprimir el terminal
a de todas las cadenas del lenguaje L(E) que comiencen por a.
Ejemplo:
Para la ER E = abba + ba + aa∗ c, tenemos el lenguaje
L(E) = {abba, ba, ac, aac, aaac, ...}, resultando la derivación respecto a a,
a−1 [E] = bba + a∗ c
Definición (Función Auxiliar δ(E))

Siendo E una ER, se define δ(E) =
1
0
si ε ∈ L(E)
en otro caso
Utilidad: Notación utilizada para indicar si una ER es capaz de generar
la cadena vacı́a, ε.
En los cálculos el valor 0 se hará corresponder con la ER del
conjuntos vacı́o (Φ)
El valor 1 se corresponderá con la ER del conjunto formado por la
cadena vacı́a {ε}
Se usarán las siguientes equivalencias:
0=Φ
1 = {ε}
– FJRP 2007 ccia PL –
0+E ≡E ≡E+0
0·E ≡0≡E·0
1+E ≡E ≡E+1
1·E ≡E ≡1·E
1
Reglas para el cálculo de δ(E):
δ(Φ) = 0 (ó δ(0) = 0)
δ(ε) = 1 (ó δ(1) = 1)
δ(a) = 0 ∀a ∈ Σ
δ(E1 + E2 ) = δ(E1 ) + δ(E2 )
δ(E1 · E2 ) = δ(E1 ) · δ(E2 )
δ(E1∗ ) = 1
δ(E1+ ) = δ(E1 )
Definición (Derivación de una Expresion Regular)
Dada una expresión regular E y un sı́mbolo a ∈ Σ, se define
recursivamente la derivación a−1 [E] mediante las siguientes
reglas:
a−1 [ε] = 0
a−1 [Φ] = 0
a−1 [a] = 1
a−1 [b] = 0 ∀b 6= a
a−1 [E1 + E2 ] = a−1 [E1 ] + a−1 [E2 ]
a−1 [E1 · E2 ] = a−1 [E1 ] · E2 + δ(E) · a−1 [E2 ]
ˆ ˜
a−1 E1∗ = a−1 [E1 ] · E1∗
Propiedades: La derivación a−1 [E] es compatible con los operadores ”∩” (intersección) y ”\” (diferencia).
−1
a
−1
[E ∩ F ] = a
−1
[E] ∩ a
−1
[F ] , a
−1
[E \ F ] = a
−1
[E] \ a
[F ]
Extensión a cadenas:
Siendo E una ER, dada una cadena w ∈ Σ∗, se define la derivación
de E respecto a w de la forma:
w
−1
(
[E] =
– FJRP 2007 ccia PL –
E
si w = ε
h
i
−1
−1
a
x [E]
si w = x · a, con a ∈ Σ
2
1.1.2 Funcionamiento
Idea básica:
Cada uno de los estados del AFD resultante se corresponderá con la
ER asociada a cada derivación posible.
Se establecerá una transición etiquetada con el terminal ”a” entre
un estado asociado a una ER E y el estado asociado a la ER
a−1 [E], si a−1 [E] 6= 0.
Se puede demostrar que el conjunto de derivaciones de una ER E
es finito.
• Siempre será posible comprobar la equivalencia de las ER asociadas a 2 derivaciones distintas (existe un algoritmo)
E ≡ F ⇔ L(E) = L(F )
• Con ello se garantiza la convergencia del método de Brzozowski.
Algoritmo de Brzozowski
Entrada: Una ER E
Salida: Un AFD A que reconoce las cadenas de la ER E
Paso 1: Identificación de los estados del AFD
Calcular todas las derivaciones posibles de la ER de partida, E , respecto a los
sı́mbolos a ∈ Σ.
Calcular iterativamente las derivaciones respecto a a ∈ Σ de las ER asociadas
a las derivaciones que vayan surgiendo.
Parar cuando no se generen derivaciones nuevas.
Paso 2: Establecimiento de transiciones
Enlazar el estado asociado a la ER F con el asociado a a−1 [F ] con un arco
etiquetado ”a”.
Paso 3: Identificación de estado inicial y estados finales
Estado inicial: el asociado a la ER de partida E .
Estados finales: aquellos estados cuya ER asociada pueda generar ε.
– FJRP 2007 ccia PL –
3
Ejemplo: Construcción de un AFD que reconozca la ER E = (ab + b)∗ba
– FJRP 2007 ccia PL –
4
1.1.3 Ventajas e inconvenientes
Ventajas:
Simplidad, sólo usa el concepto de derivacion (x−1 [E]).
Aplicable a ER definidas mendiante los operadores ”∩” (intersección) y ”\” (diferencia).
Inconvenientes:
Para cada nueva derivación calculada debe comprobarse la equivalencia de la ER resultante con cada una de las derivaciones anteriores.
• Necesario para asegurar la convergencia del algoritmo.
• Puede hacerse, pero es costoso.
– FJRP 2007 ccia PL –
5
1.2 Algoritmo de McNaugthon&Yamada
Construye Autómatas Finitos No Deterministas (AFN) a partir de
Expresiones Regulares (ER)
• Podrán determinizarse a posteriori.
Basado en el concepto de continuación de una Expresión Regular
Trabaja con Expresiones Regulares Marcadas
Definición (Expresión Regular Marcada)
Siendo E una ER, la Expresion Regular Marcada, E 0, obtenida
a partir de E , viene dada por la incorporación de un subı́ndice
distinto a cada sı́mbolo a ∈ Σ que aparece en E . Ejemplo:
A partir de E = (ab + b)∗ ba, se obtiene la ER marcada
E 0 = (a1 b2 + b3 )∗ b4 a5
Objetivo: Asegurar que todos los sı́mbolos terminales en E 0 son distintos.
– FJRP 2007 ccia PL –
6
1.2.1 Idea base
Funcionamiento general:
E0
−→
A0
−→
A
−→
D
exp. reg.
marcada
(1)
AFD
marcado
(2)
AFN
sin marcas en
transiciones
(3)
AFD
sin marcas en
transciones
−→
E
exp. reg.
inicial
• (1) algoritmo de construcción del AFD marcado (MacNaughton&Yamada ó Berry&Sethi)
• (2) eliminar las marcas de los sı́mbolos en las transiciones
• (3) algoritmo de determinización del AFN.
0
El algoritmo McNaugthon&Yamada construye un AFD A mediante
el cálculo de derivaciones sobre la ER marcada E 0.
• En este caso se hablará del continuaciones de sı́mbolos.
El uso de ER con sı́mbolos marcados evita tener que comprobar la
equivalencia de las derivaciones calculadas.
• Dado que todos los sı́mbolos en la ER marcada E 0 son distintos,
se puede demostrar
que
todas las derivaciones respecto a sı́mbolos
ˆ
˜
marcados (a−1
E 0 ) serán también distintas.
i
Definición (Continuación de un sı́mbolo ”a” en una ER marcada E 0)
Siendo E 0 una ER con todos sus sı́mbolos marcados y siendo
a ∈ Σ uno de esos sı́mbolos, se define la continuación de a en
0
E 0 (notación CaE ) como la expresión (wa)−1E 0 6= Φ. Nota: El marcado no es compatible con los operadores ”∩” (intersección) y ”\” (diferencia).
Es decir, siendo E 0 y F 0 las ER marcadas asociadas a e y F ,
tenemos que E ∩ F 6= E 0 ∩ F 0 y E \ F 6= E 0 \ F 0.
Ejemplo: Para E = ab∗ y F = a tenemos E 0 = a1b∗2 y F = a3,
verificándose:
E ∩ F = a 6= Φ = E 0 ∩ F 0
– FJRP 2007 ccia PL –
y
E \ F = abb∗ 6= a1 b∗2 = E 0 \ F 0
7
Consecuencias:
• Dado que todos los sı́mbolos en la ER marcada E 0 son distintos
(y aparecen sólo una vez), se deduce que todas las derivaciones de
”a” que se calculen en E 0 serán necesariamente equivalentes (esto es: (w1a)−1E 0 ≡ (w2a)−1E 0 ≡ (w3a)−1E 0 ≡ ... ∀wj ).
• Estas continuaciones darán lugar a los estados del AFD marcado
M 0.
– FJRP 2007 ccia PL –
8
1.2.2 Funcionamiento
Algoritmo de McNaugthon&Yamada
Entrada: Una ER E
Salida: Un AFN A que reconoce las cadenas de la ER E
Paso 1: Marcado de la ER E
Paso 2: Identificación de los estados del AFD marcado
Crear un estado por cada sı́mbolo presente en la ER marcada E 0 , más un
estado inicial q0 .
Paso 3: Establecimiento de transiciones
Calcular las continuaciones en E 0 de cada sı́mbolo de la ER marcada.
• Construir las posibles derivaciones de sı́mbolos marcados sobre E 0
◦ serán los sı́mbolos que puedan aparecer al comienzo de las cadenas de E 0
• Crear un arco etiquetado desde el estado inicial q0 hasta el estado correspondiente a ese sı́mbolo marcado.
Sobre las derivaciones asociadas a los estados no inicial:
• Construir sus posibles derivaciones de sı́mbolos marcados
◦ serán los sı́mbolos por los que pueden empezar las cadenas de esa derivación
• Crear un arco etiquetado hacia el estado (=sı́mbolo) implicado.
Terminar cuando se hayan calculado las derivaciones de todos los estados
(=sı́mbolos marcados)
Paso 4: Identificación de estado inicial y estados finales
Estado inicial: estado q0
Estados finales: estados (=sı́mbolos) cuya continuación sea ε
Paso 5: Eliminar las marcas en las etiquetas de las transiciones
Normalmente resultará un AFN, que habrá que determinizar si se desea.
– FJRP 2007 ccia PL –
9
Ejemplo: Construcción de un AFN que reconozca la ER E = (ab + b)∗ba
– FJRP 2007 ccia PL –
10
1.2.3 Ventajas e inconvenientes
Ventajas:
El número de derivaciones necesarias para calcular las continuaciones
está predeterminado (en Brzozowski no se conoce a priori)
• Habrá una derivación/continuación para cada uno de los sı́mbolos
en la ER marcada
El concepto de derivación junto con el uso de ER marcadas (sus
sı́mbolos son únicos) evita tener que efectuar el test de equivalencia entre ER para las derivaciones calculadas (en Brzozowki era
necesario para evitar la repetición de estados)
Inconvenientes:
No es compatible con los operadores ”∩” (intersección) y ”\”
(diferencia) (en ocasiones facilitan especificar ER complejas)
Al eliminar los ı́ndices de las transiciones se obtiene un AFN que
normalmente será necesario determinizar.
– FJRP 2007 ccia PL –
11
1.3 Algoritmo de Berry&Sethi
Evolución del algoritmo de McNaugthon&Yamada.
Construye Autómatas Finitos No Deterministas (AFN) a partir de
Expresiones Regulares (ER)
• Podrán determinizarse a posteriori.
Trabaja con Expresiones Regulares Marcadas
Evita calcular explı́citamente el conjunto de continuaciones.
Basado en la utilziación de los conjuntos f irst y f ollow
1.3.1 Idea base
Se trata de una mejora sobre el método de McNaugthon&Yamada.
Se basa
ˆ 0˜en la observación de que las continuaciones calculadas
−1
(ai E ) se utilizan únicamente para determinar las transiciones
desde el estado ai, en función de los sı́mbolos que puedan aparecer
al principio de las cadenas generadas por esa continuación
El algoritmo de Berry&Sethi evita tener que realizar el cálculo de
esas continuaciones.
En su lugar, se calcula previamente de forma estática que sı́mbolos
bj pueden ir a continuación de un sı́mbolo ai dado en las cadenas
generadas por E 0.
Se introducen los conjuntos f irst(E) y f ollow(E, a)
– FJRP 2007 ccia PL –
12
Definición (Conjuntos f irrt(E) y f ollow(E, a))
Siendo E una expresión regular, dado un sı́mbolo a ∈ Σ,
definimos:
f irst(E) = {a | aw ∈ L(E)}
f ollow(E, a) = {b | vabw ∈ L(E)}
De este modo, se verifica la siguiente propiedad:
• Si CaE es la continuación de ”a” en E ⇒ f irst(CaE ) =
f ollow(E, a)
Nota: Se utilizará el sı́mbolo a como marca de fin de entrada (EOF :
end of file)
• Siempre se podrá asegurar que:
f ollow(E· a, a) = {a} ⇔ ”a” es el último sı́mbolo en una cadena generada por E
– FJRP 2007 ccia PL –
13
1.3.2 Funcionamiento
Idea básica:
A partir de las definiciones de f irst(E 0) y f ollow(E 0, a) se llega al
principio de funcionamiento del método de Berry&Sethi.
Si x ∈ f irst(E 0) ⇒ establecer una transición desde el estado
inicial q0 al estado x.
Si y ∈ f ollow(E 0, x) ⇒ establecer una transición desde el estado
x al estado y .
(a) Cálculo del conjunto f irst
Dada una ER E , el conjunto f irst viene dado por las siguientes reglas
recursivas:
f irst(0) = Φ
f irst(1) = Φ
f irst(a) = a
f irst(E1 + E2 ) = f irst(E1 ) ∪ f irst(E2 )
f irst(E1 · E2 ) = f irst(E1 ) ∪ f irst(δ(E1 ) · E2 )
f irst(E1∗ ) = f irst(E1 )
(b) Cálculo de los conjuntos f ollow
Se usará la función auxiliar F para formalizar el mecanismo de cálculo
de los conjuntos f ollow
Definición (Función auxiliar F)
Dada una ER E y un sı́mbolo b ∈ Σ, definimos
F(E, b) = {[a, f ollow(E · b, a)]} ∀a ∈ Σ
– FJRP 2007 ccia PL –
14
Intuitivamente, la función F asocia a cada sı́mbolo a ∈ Σ el
conjunto de sı́mbolos que pueden ir inmediatamente después de a
en las cadenas generadas por la ER E · b.
El sı́mbolo b juega el papel de ”marcador” del final de las cadenas
de E .
En la práctica calcularemos la función F(E, a), que asociará a cada
sı́mbolo de E sus conjuntos f ollow.
Dada una ER E y un conjunto de ”marcadores” S , el cálculo de
F(E, S) viene dado por las siguientes reglas recursivas:
F(0, S) = Φ
F(1, S) = Φ
F(a, S) = {[a, S]}
F(E1 + E2 , S) = F(E1 , S) ∪ F(E2 , S)
F(E1 · E2 ) = F(E1 , f irst(E2 ) ∪ δ(E2 ) · S) ∪ F(E2 , S)
F(E1∗ , S) = F(E1 , f irst(E1 ) ∪ S)
(S sigue a ”a” en aS )
Ejemplo: Cáculo de F(E 0, a) para la ER marcada E 0 = (a1b2 + b3)∗b4a5
– FJRP 2007 ccia PL –
15
Algoritmo de Berry&Sethi
Entrada: Una ER E
Salida: Un AFN A que reconoce las cadenas de la ER E
Paso 1: Marcado de la ER E
Paso 2: Identificación de los estados del AFD marcado
Crear un estado por cada sı́mbolo presente en la ER marcada E 0 , más un
estado inicial q0 .
Paso 3: Establecimiento de transiciones
Calcular el conjunto f irst(E 0 ) y la función F(E 0 , a)
Establecer una transición desde el estado inicial q0 a los estados de los sı́mbolos
en f irst(E 0 )
Establecer una transición desde el estado a a los estados de los sı́mbolos en
f ollow(E 0 , a)
Paso 4: Identificación de estado inicial y estados finales
Estado inicial: estado q0
Estados finales: aquellos estados a para los que a ∈ f ollow(E 0 , a)
Si les sigue el sı́mbolo EOF (”a”) ⇒ ha acabado la expresión E 0
Paso 5: Eliminar las marcas en las etiquetas de las transiciones
Normalmente resultará un AFN, que habrá que determinizar si se desea.
Ejemplo: Construcción de un AFN que reconozca la ER E = (ab + b)∗ba
– FJRP 2007 ccia PL –
16
Descargar