lexical analysis (scanning) - cs.upc.edurferrericancho/teaching/cl/scanning.pdflexical analysis...

46
Lexical Analysis (Scanning) Jos ´ e Miguel Rivero [email protected] Barcelona School of Informatics (FIB) Technical University of Catalonia (UPC) Jos ´ e Miguel Rivero Lexical Analysis – p. 1/46

Upload: others

Post on 28-Oct-2019

11 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Lexical Analysis (Scanning)Jose Miguel Rivero

[email protected]

Barcelona School of Informatics (FIB)

Technical University of Catalonia (UPC)

Jose Miguel Rivero Lexical Analysis – p. 1/46

Page 2: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Lexical Analysis. Summary

2.1 El análisis léxico en la compilación

2.2 Motivación

2.3 Descripción del problema

2.4 Construcción de Thompson de AFN(er)a partir de una er

2.5 Algoritmo para decidir si AFN(er) reconoce w

2.6 Alternativa: calcular el AFD(er) para AFN(er)

2.7 Comparación de los dos métodos

2.8 Algoritmo de análisis léxico

2.9 Tratamiento de errores léxicos

2.10 Generación automática de analizadores léxicos:ANTLR, flex, . . .

Jose Miguel Rivero Lexical Analysis – p. 2/46

Page 3: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

2.1 Análisis léxico en la compilación

Estructura conceptual vs. estructura real

Objetivo. Tokens

Otros componentes léxicos

Atributos de los tokens

Ejemplo

Jose Miguel Rivero Lexical Analysis – p. 3/46

Page 4: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Estructura conceptual vs. estructura real

Estructura conceptual

programa

fuente ANALISIS LEXICO SINTACTICO

ANALISISSEMANTICO ANALISIS

sintactico

arbol

decorado

lista de

tokens sintactico

arbol

Estructura procedural (real)

ANALISIS LEXICO SINTACTICO

ANALISISSEMANTICO ANALISIS

token

necesito token

fuente

programa

1ª pasada 2ª pasada

sintactico

arbol

decorado sintactico

arbol

representaciones internas

Jose Miguel Rivero Lexical Analysis – p. 4/46

Page 5: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Objetivo. TokensObjetivo:

descomponer la secuencia de caracteresdel programa fuente en una secuencia decomponentes léxicos (tokens)

¿Cúales son los tokens que debemos reconocer yenviar al analizador sintáctico?:

palabras clave del lenguaje (while , endvars ,write , . . .)operadores (+, / , “<=”, OR, “:= ”, . . .)otros símbolos del lenguaje (paréntesis, coma,punto y coma, etc)identificadores (numels ), valores enteros (834 ),cadenas de caracteres ("Hello world!" ),reales (3.04E-3 ), . . .. . .

Jose Miguel Rivero Lexical Analysis – p. 5/46

Page 6: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Otros componentes léxicos

Existen componentes léxicos que deben reconocerseaunque no tengan interés para etapas posteriores delcompilador:

separadores: espacios, tabuladores, . . .comentarios: / * ... * / en C, // ... en C++cambios de línea. Interesa conocer en que líneaencontramos los tokens para situar los errores decompilación

Atributos de los tokensen todos: el número de línea

en identificadores, constantes numéricas, strings, . . . :el texto del token (el prefijo reconocido)

Jose Miguel Rivero Lexical Analysis – p. 6/46

Page 7: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

EjemploPrograma fuente:Program

EndVars

i := 1 ; r := 1.17

EndWhile r := r / i ; i := i + 1

Vars

EndProgram

While i < 25 Do // 24 vueltas

Integer i Real r

EndVars

i := 1 ; r := 1.17 While i < 25 Do // 24 vueltas

EndWhile r := r / i ; i := i + 1

EndProgram

Vars Integer i Real r

Write ( "fin" ) Write ( "fin" )

Program1:

2:

3:

4:

5:

6:

7:

8:

9:

10:

11:

12:

Secuencia de tokens: PROGRAM VARS INTEGER IDENT("i") REAL

IDENT("r") ENDVARS IDENT("i") ASIG INTCONST("1") PUNTCOM IDENT("r") ASIG

REALCONST("3.14") WHILE IDENT("i") MENOR INTCONST("24") DO IDENT("r") ASIG IDENT("r")

DIVREAL IDENT("i") PUNTCOM IDENT("i") ASIG IDENT("i") MAS INTCONST("1") ENDWHILE

WRITE PARABR STRINGCONST("fin") PARCERR ENDPROGRAM

Jose Miguel Rivero Lexical Analysis – p. 7/46

Page 8: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

2.2 Motivación

¿Por qué definir una etapa específica que realiza el análisisléxico de un programa?:

Conceptualmente es una tarea diferenciada: filtra laentrada y la descompone en aquellos elementos quetienen interés para la siguiente etapa, el análisissintáctico.

Las técnicas que veremos seránsencillas y eficientes (no debemos matar moscasa cañonazos)flexibles (los cambios a nivel léxico se puedenresolver fácilmente)transportables y generales

Estas técnicas tienen otras muchas aplicaciones.

Jose Miguel Rivero Lexical Analysis – p. 8/46

Page 9: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Otras aplicaciones

Recuperación de información (análisis de queries)

Problemas de genética

Editores de texto (editores dirigidos por la sintaxis, . . . )

Sistemas operativos (lenguajes de commandos, grep)Ejemplo (en unix): % rm prog * .[ch]

Lenguajes de programación (del tipo patrón/acción :(AWK )

Verificación de circuitos

. . .

Jose Miguel Rivero Lexical Analysis – p. 9/46

Page 10: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

2.3 Descripción del problema

Expresiones regulares

Poder expresivo de las expresionesregulares

Problema a resolver por el analizador léxico

Ejemplos

Criterio para deshacer ambigüedades

¡Cuidado al definir el lenguaje!

Jose Miguel Rivero Lexical Analysis – p. 10/46

Page 11: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Expresiones regulares

Los elementos léxicos de un lenguaje de programación seespecifican con expresiones regulares sobre un ciertoalfabeto Σ.Reglas de formación:

er = ǫ es una expresión regular

er = a es una expresión regular para todo a ∈ Σ

si er1 y er2 son expresiones regulares,er = er1| er2 es una expresión regular

si er1 y er2 son expresiones regulares,er = er1er2 es una expresión regular

si er1 es una expresión regular, er = er∗1

es una expresión regular

si er1 es una expresión regular, er = (er1)

es una expresión regular

Jose Miguel Rivero Lexical Analysis – p. 11/46

Page 12: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Poder expresivo de laser’s

Mediante expresiones regulares no podemosreconocer, por ejemplo, expresiones bien parentizadaspor ejemplo del tipo {anbn}: los autómatas finitos nosaben contar.

Tampoco podemos reconocer las palabras del lenguaje{nan : n ≥ 0} ={ 0, 1a, 2aa, 3aaa, . . . }

Strings repetidos no pueden ser especificados conexpresiones regulares. El conjunto {w c w | w ∈ (a|b)∗ }no es un lenguaje regular, ni tampoco puede serdescrito con gramáticas incontextuales.

Jose Miguel Rivero Lexical Analysis – p. 12/46

Page 13: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Problema a resolver en elscanning

Tenemos una lista de expresiones regulares er1, . . . , ern

que describen los componentes léxicos del lenguaje, y unprograma fuente a descomponer (la palabra w).

Dadas las expresiones regulares er1, . . . , ern

y la palabra w, se trata de encontrar el prefijomás largo v de w t.q. v ∈ L(eri) para alguna i.

En caso de encontrar más de una expresión regular para elprefijo v, se elegirá la eri con la i mínima.La siguiente llamada al analizador léxico vuelve a hacer lomismo con el resto de la entrada por tratar (si w = v w′

después buscará el prefijo más largo de w′) y así hastaagotar la entrada.

Jose Miguel Rivero Lexical Analysis – p. 13/46

Page 14: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Ejemplos

Se trata de encontrar el prefijo más largo, por tantosi tenemos "programacion ..." no nos dirá quetenemos la palabra clave program seguido delidentificador acion

si tenemos "while ..." no nos dirá que tenemosel identificador "while"

si tenemos "ab24.8 ..." no nos dirá quetenemos el identificador "ab" seguido del real"24.8" (a menos que los identificadores sólocontengan caracteres alfabéticos)

Jose Miguel Rivero Lexical Analysis – p. 14/46

Page 15: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Ejemplos (cont.)

Si tenemos "10..20 ..." nos dirá que tenemos elentero "10" porque aunque intenta reconocer unreal que empieza por "10." cuando ve el segundo’.’ se da cuenta que no puede y tiene que volver allugar en el que ya había reconocido algo. Despuésreconocerá los dos puntos y por último el segundoentero. ¡Ojo, no linealidad!

Por tanto, se tiene que recordar el punto en que acabóel último prefijo aceptado (y por qué eri) por si nopodemos encontrar uno aún más largo.Si en cambio sí encontramos un prefijo aún más largonos olvidamos del anterior.

Para no perder linealidad podemos exigir que al buscarun prefijo aún más largo, sólo podemos atravesarestados aceptadores.

Jose Miguel Rivero Lexical Analysis – p. 15/46

Page 16: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Deshacer ambigüedades léxicasSe tiene que reconocer el prefijo más largo posible

Se tienen que especificar primero (menor i) lasexpresiones regulares que corresponden a palabrasclave, que la que define los identificadores: una palabraclave forma parte del lenguaje de las dos, pero latenemos que reconocer como palabra clave y no comoidentificador.

Ejemplo de analizador léxico en flex :

program {...; return(PROGRAM) }

vars {...; return(VARS) }

...

"," {...; return(COMA) }

...

[0-9]+ {...; return(ENTERO) }

[A-Za-z][A-Za-z0-9] * {...; return(IDENT) }

... Jose Miguel Rivero Lexical Analysis – p. 16/46

Page 17: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

¡Cuidado al definir el lenguaje!

Es importante hacer una definición muy meditada tanto delos componentes léxicos como de la estructura sintácticade un lenguaje. Por ejemplo, estas son algunas de lassituaciones que se podrían dar:

en Fortran, la expresión DO 5 I = 1,25 ...representa el comienzo de un bucle. Si en lugar de1,25 hubiéramos escrito 1.25 estaríamos asignandodicho valor real a la variable DO5I: no free-format

si obligamos a que las etiquetas (pasa también enFortran) estén situadas en la primera columnacomplicaremos el análisis léxico

si permitimos que los reales puedan tener partedecimal vacía, el rango (de un array ) 10..40 no seanalizará correctamente

Jose Miguel Rivero Lexical Analysis – p. 17/46

Page 18: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

2.4 Constr. de Thompson de AFN(er)

Construcción del autómata N(er) para las expresionesregulares ǫ, a, er1|er2, er1 er2, er∗1 y (er1), donde er1 y er2

son expresiones regulares con autómatas yaconstruidos N(er1) y N(er2).

er =

a

a

λ

λ

λ

λ

er = er1 er2|

N(er2)

N(er1)

er = er1 er2

N(er2)N(er1) λλ

λ

λ

er = er1*

N(er1)N(er1)

N(er)

er = (er1)

er =

λλ

Jose Miguel Rivero Lexical Analysis – p. 18/46

Page 19: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Construcción de Thompson (cont.)

Invariante de la construcción: todos los AFN’s tienen unestado inicial sin aristas de entrada, y un solo estadofinal sin aristas de salida

El número de estados del AFN(er) ≤ 2|er|, porque seañaden como máximo 2 nuevos estados por cada pasodurante la construcción

Tenemos como máximo 2 aristas salientes (2transiciones) por cada estado del autómata. Por tanto,podemos obtener una representación compacta delmismo.

Jose Miguel Rivero Lexical Analysis – p. 19/46

Page 20: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Ejemplo 1

Autómata finito indeterminista para la expresión regularer = (a|b)∗abb. Estos son los primeros pasos de lasconstrucción del AFN:

er = a

a

λ

λ

er = a | b

a

b

λ

λ

er = b

b

er = (a | b)*

λ

λ

a

b

λ

λ

λ

λ λ

λ

a

er =

λ

λ

a

b

λ

λ

λ

λ λ

λ

(a | b)* a

Jose Miguel Rivero Lexical Analysis – p. 20/46

Page 21: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Ejemplo 2

Combinación de AFN’s en la disyunción de las eri’s pararesolver el problema del análisis léxico

.

.

.

1 | 2 | | ner = er er ... er

λ

λ

N(er )n

N(er )

N(er )

1

2 f2

f1

fn

i

λ

Jose Miguel Rivero Lexical Analysis – p. 21/46

Page 22: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

2.5 Algoritmo de decision para AFN(er)Definimos en primer lugar dos funciones auxiliares:

ǫ-clausura(S) es el conjunto de estados accesibles desde los estados deS a través de cero o más ǫ-transiciones.

move(S, a) es el conjunto de estados accesibles desde los estados de S

con una transición etiquetada con a.

Algoritmo que decide si AFN(er) reconoce w:Pre : s0 es el estado inicial del autómata AFN

F es el conjunto de estados finales de AFN

eof es el símbolo con el que acaba w

S := ǫ-clausura({s0});

a := LeerSimbolo( );

while a != eof do

S := ǫ-clausura(move(S, a));

a := LeerSimbolo( );

endwhile

Post : AFN acepta w ssi S ∩ F 6= ∅Jose Miguel Rivero Lexical Analysis – p. 22/46

Page 23: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Análisis del algoritmo

Coste temporal del algoritmo: O(|er| · |w|)

Coste espacial (tamaño de la tabla de transiciones delautómata): O(|er|)

Pero recordemos que el objetivo del análisis léxico enla compilación es obtener el prefijo más largo de w ydar prioridad a la i mínima en caso de “empate”.Para ello hay que modificar ligeramente el algoritmoanterior: tenemos que mantener el estado deaceptación más reciente (si hay varios sólo el de la i

mínima), y además guardar la longitud del prefijocorrespondiente. Así cuando ya no haya transiciónposible, sabremos cúal fue el último prefijo aceptado ypor qué expresión regular.

Jose Miguel Rivero Lexical Analysis – p. 23/46

Page 24: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

2.6 Alternativa: calcular el AFD(er)

Algoritmo de determinización a partir de AFN(er)

Ejemplo

Coste espacial del ADF

Algoritmo de minimización de AFD’s

Ejemplo

Algoritmo de aceptación de w por el AFD

Técnicas de compresión

Jose Miguel Rivero Lexical Analysis – p. 24/46

Page 25: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Algoritmo de determinización

Autómata determinista: desde ningún estado hayǫ-transiciones ni tampoco más de una arista de salidapara un mismo símbolo a ∈ Σ.

Técnica de cálculo de subconjuntos. Entenderemoscada subconjunto final de estados como un estado delautómata determinista y calcularemos las transicionesentre estos estados.

Algoritmo: construiremos Dstate (el conjunto deestados de AFD) y Dtran (la tabla de transiciones delAFD). Los estados en Dstate se marcan cuando secalculan sus transiciones en Dtran.

Jose Miguel Rivero Lexical Analysis – p. 25/46

Page 26: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Algoritmo de determinización (cont.)

Pre: s0 es el estado inicial del autómata AFN

F es el conjunto de estados finales de AFN

ǫ-clausura({s0}) es el único estado en Dstate y no está marcado

while exista un estado S sin marcar en Dstate do

marca S

foreach simbolo de entrada a ∈ Σ do

S′ := ǫ- clausura(move(S, a));

if S′ /∈ Dstate then

añade S′ (sin marcar) a Dstate

endif

Dtran[S, a] := S′;

endfor

endwhile

Post: el estado inicial de AFD es ǫ-clausura({s0})

Son estados finales de AFD todos aquellos (conjuntos de)

estados que contengan al menos un estado de F

Jose Miguel Rivero Lexical Analysis – p. 26/46

Page 27: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Ejemplo

Calcular el autómata determinista para la expresión regularer = (a|b)∗abb

λ

λ

a

b

λ

λ

λ

λ

λ

bλ a b

NFA:

0 1

2 3

7 8 9 10

4 5

6

ǫ-clausura({0}) = {0, 1, 2, 4, 7} = A

ǫ-clausura(move(A, a)) = ǫ-clausura({3, 8})

= {1, 2, 3, 4, 6, 7, 8} = B

Dtran[A, a] = B

ǫ-clausura(move(A, b)) = ǫ-clausura({5})

= {1, 2, 4, 5, 6, 7} = C

Dtran[A, b] = C

. . .

Jose Miguel Rivero Lexical Analysis – p. 27/46

Page 28: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Ejemplo (cont.)

Dtran:

símbolo

estado a b

A B C

B B D

C B C

D B E

E B C

A D E

b b

b

a

a b b

a

a a

B

C

DFA:

Jose Miguel Rivero Lexical Analysis – p. 28/46

Page 29: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Coste espacial del AFD

El coste en espacio (número de estados de la tabla Dtran)puede ser exponencial respecto de la longitud de er (elnúmero de subconjuntos distintos de un conjunto de N

elementos es 2N )Ejemplo: Dada la expresión regular (a|b)∗a(a|b)k

construiremos un AFN de la siguiente forma:

Un estado inicial 0 con aristas etiquetadas con a y b

hacia sí mismo, y una arista etiquetada con a hacia elestado 1

Transiciones desde el estado i etiquetadas con a y b

hacia el estado i+1, para i ∈ [1..k]

El estado k+1 es el estado final

Jose Miguel Rivero Lexical Analysis – p. 29/46

Page 30: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Coste espacial del AFD (cont.)

a, b

a a, b . . . ka, b a, b k+10 1

El tamaño del AFD correspondiente es exponencialporque necesita recordar k + 1 bits (los últimos k + 1símbolos leídos)Con k = 3:

abba (estado final) −→a bbaa (estado no final)

baba (estado no final) −→b abab (estado final)

Jose Miguel Rivero Lexical Analysis – p. 30/46

Page 31: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Algoritmo de minimización de AFD’s

Calcula particiones sucesivas del conjunto de estados.

Pre : S es el conjunto de estados de AFD

s0 es el estado inicial de AFD

F es el conjunto de estados finales de AFD

Post : AFD′ acepta el mismo lenguaje que AFD

teniendo el mínimo número de estados posible

Jose Miguel Rivero Lexical Analysis – p. 31/46

Page 32: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Algoritmo de minimización (cont.)

Calcula particiones sucesivas del conjunto de estados.

partición inicial Π = Πnew con dos grupos :

estados finales F y estados no finales S \ F

repeat

Π := Πnew

for each grupo G de Π do

1. divide G en subgrupos t.q. dos estados s y t

de G quedan en el mismo subgrupo ssi para

todo símbolo a ∈ Σ, s y t tienen transiciones

hacia estados en el mismo grupo de Π.

2. reemplaza G en Πnew por el conjunto de

subgrupos formados

endfor

until Πnew = Π

Jose Miguel Rivero Lexical Analysis – p. 32/46

Page 33: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Algoritmo de minimización (cont.)

Se construye AFD′:

1. Sus estados se definen eligiendo un representante

de cada grupo

2. Las transiciones en AFD′ serán las que existen entre

los estados representantes de AFD

3. El estado inicial de AFD′ será el representante del

grupo que contiene s0

4. Los estados finales serán aquellos que tengan

representantes en F

Jose Miguel Rivero Lexical Analysis – p. 33/46

Page 34: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

EjemploMinimización del autómata determinista que reconoce(a|b)∗abb

A D E

b b

b

a

a b b

a

a a

B

C

DFA:

Comentario Particiones

estados no finales / finales

(ABCD) (E)

A, B, C →b (ABCD) pero D →b (E)

(ABC) (D) (E)

A, C →b (ABC) pero B →b (D)

(AC) (B) (D) (E)

partición final

Jose Miguel Rivero Lexical Analysis – p. 34/46

Page 35: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Ejemplo (cont.)

Dtran:

símbolo

estado a b

AC B AC

B B D

D B E

E B AC

DFA :min

D Eb b

a

a a

B

b

AC

b

a

Jose Miguel Rivero Lexical Analysis – p. 35/46

Page 36: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Otro forma de calcular AFD(er)

Evita determinizar el AFN(er) y aplicar después elalgoritmo de minimización.Realiza estos dos pasos en uno.

No siempre obtiene el AFD(er) mínimo pero es unabuena técnica en la mayoria de los casos

Jose Miguel Rivero Lexical Analysis – p. 36/46

Page 37: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Algoritmo de decision para AFD(er)

Pre : s0 es el estado inicial del autómata AFD

F es el conjunto de estados finales de AFD

eof es el símbolo con el que acaba w

s := s0;

a := LeerSimbolo( );

while a != eof do

s := Dtran[s, a];

a := LeerSimbolo( );

endwhile

Post : AFD acepta w ssi s ∈ F

Tiene un coste temporal lineal en la longitud de la entrada O(|w|)

Tiene un coste espacial (tamaño de Dtran)O( (número de estados del AFD) ∗ (número de símbolos de Σ) ) = O(2|er|)

Jose Miguel Rivero Lexical Analysis – p. 37/46

Page 38: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Técnicas de compresión

Existen diferentes formas de implementar la función detransición de un AFD. La más directa es usando una tablade transición. El tamaño de esa tabla depende del númerode estados del autómata y del número de símbolos delalfabeto. Dado que:

1. el número de estados puede ser bastante elevado y

2. no existen transiciones desde cada estado para todoslos símbolos (más bien al contrario, o bien es al mismoestado para casi todos los símbolos)

esta enorme tabla se encuentra mayormente vacía (sparse)e interesa trabajar con una representación más compacta.

Jose Miguel Rivero Lexical Analysis – p. 38/46

Page 39: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Técnicas de compresión (cont.)Vector unidimensional de estados. Desde cada estadocuelga la lista de transiciones que sí están definidasdesde él, más eventualmente la transición que se hacepor defecto (o en caso de error). Es la más sencillapero el tiempo de cálculo del nuevo estado puedeempeorar sensiblemente.

Otras técnicas intentan aprovechar (a groso modo) lascasillas vacías contiguas que había en la tabla inicialantes del primero y a partir del último símbolo contransición en cada estado. En esos métodos se utilizanvarias tablas para saber, por ejemplo, donde comienzala fila de transiciones de un estado. Así se mejoramucho el tiempo para calcular una transicióncomparado con la técnica anterior y el espacio seaprovecha bastante mejor que utilizando la tabla inicial.

Jose Miguel Rivero Lexical Analysis – p. 39/46

Page 40: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Técnicas de compresión (cont.)

Podemos también solapar dos o más filas siempre quelas transiciones definidas en una y en otra no coincidan.Esta técnica se muestra en la siguiente figura:

s

s’

. . . . . .

+ a

. . . . . .check

next

base

s s s’ s s’s’s’ s s’s’

t

+ b

next(s, a) = next[base[s] + a]if check[base[s] + a] = s then

else next(s, a) = error

tran(s, a) = t tran(s’, b) = error

Jose Miguel Rivero Lexical Analysis – p. 40/46

Page 41: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

2.7 Comparación de los dos métodos

Resumen de costes:

Autómata Coste temporal Coste espacial

AFN O(|er| · |w|) O(|er|)

AFD O(|w|) O(2|er|)

En general, cuando los dos métodos son viables (el costeen espacio del AFD no es excesivamente mayor) podemosconcluir que:

AFN es adecuado cuando |er| ↓↓

AFD es adecuado cuando |w| ↑↑ o |er| ↑↑

Jose Miguel Rivero Lexical Analysis – p. 41/46

Page 42: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Cálculo perezoso (lazy) de transiciones

Combina las necesidades de espacio del autómata AFNcon las ventajas en tiempo del autómata AFD.Se trabaja a partir del autómata indeterminista, calculandosólo los subconjuntos de estados que se van necesitando.Estos subconjuntos (y sus transiciones) se guardan en unacache de forma que no hace falta volver a calcularlos denuevo.Resumiendo sus ventajas:

Menor necesidad de espacio: tamaño de la tabla delAFN ( O(|er|) ) + tamaño de la cache

No se calculan transiciones entre estados que nuncason utilizadas. Esto lo hace casi tan rápido como losAFD

Jose Miguel Rivero Lexical Analysis – p. 42/46

Page 43: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

2.8 Algoritmo de análisis léxico

Ejercicio: suponiendo que los carácteres de la entrada w (contando eof )se encuentran en un array A indexado desde 0, se trata de modificar elalgoritmo anterior para que reconozca el prefijo más largov = A[0] · · ·A[k − 1] que encaja con alguna de las expresiones regulareseri.Cuando la tabla Dtran no contiene transición para un cierto estado s ycarácter a entonces contiene el valor -1. Para distinguir un estado final deuno no final tenemos otro array DFin que dado un estado s contiene truesi s es un estado final y false en caso contrario.El algoritmo tiene que devolver el índice k y el estado (final) s tal que:

la palabra A[0] · · ·A[k − 1] es el prefijo más largo que encaja conalguna eri. Si no existe tal prefijo devuelve -1.

en ese momento el autómata se encuentra en estado s (que es elestado final de la expresión regular eri correspondiente)

Jose Miguel Rivero Lexical Analysis – p. 43/46

Page 44: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Algoritmo de análisis léxico (cont.)p := f := 1; l := 0;

∀i : 1 ≤ i ≤ n : qi := Inii; // Estados iniciales

while p ≤ m do

∀i : 1 ≤ i ≤ n : qi := δi( qi, IN[p] ); p :=p + 1; // Transición de estados

if ∃ i : 1 ≤ i ≤ n : qi ∈ Fi then // Estado final

l := p − 1; a = smallest i su ch that qi ∈ Fi;

elseif ∀ i : 1 ≤ i ≤ n : qi ∈ Erri then // Estados pozo

if l ≥ f then

Generate token of type a with word ; IN[f.. l]

p := f := l + 1; l := f − 1;

∀i : 1 ≤ i ≤ n : qi := Inii;

else

Lexical error

endif

endif

endwhile

if l < f then Lexical error endif

Jose Miguel Rivero Lexical Analysis – p. 44/46

Page 45: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

2.9 Tratamiento de errores léxicos

¿Cuándo se produce un error léxico?

Recordemos que el analizador léxico intentar obtener elprefijo v más largo de la palabra w que está analizando. Eseprefijo tiene que formar parte del lenguaje de alguna de lasexpresiones regulares er1, er2, . . . , ern.

En este proceso se puede llegar a un estado s desde el cualno haya transición definida para el símbolo en curso a. Esto leobligaría a devolver el prefijo anterior más largo que ya habíareconocido.

¿Qué ocurre si todavía no había podido reconocer ningúnprefijo que encajara en alguna expresión regular antes de intentarbuscar otro aún más largo? Pues que la seqüencia que comienzacon el primer carácter de w no forma parte del lenguaje deninguna de las eri: ⇒ se produce un error léxico.

Jose Miguel Rivero Lexical Analysis – p. 45/46

Page 46: Lexical Analysis (Scanning) - cs.upc.edurferrericancho/teaching/CL/scanning.pdfLexical Analysis (Scanning) Jose Miguel Rivero´ rivero@lsi.upc.edu Barcelona School of Informatics (FIB)

Tratamiento de errores léxicos (cont.)

Hay diferentes formas de tratar estas situaciones de error.Estas son algunas de ellas:

En modo pánico. Se ignora el primer carácter de w (y sucesivos sitambién es necesario) hasta que podamos reconocer algún prefijo enla entrada

Sólo se borran caracteres extraños. Por ejemplo, aquellos que noforman parte del alfabeto del lenguaje: ’¿’, ’ç’, ’@’, . . . en lenguajescomo C o Pascal

Se realizan correcciones: insertar un carácter, reemplazar uncarácter por otro distinto, intercambiar adyacentes (wihle pasa a serwhile ), etc. En general se intenta que el número de correciones seael mínimo necesario. No es una técnica muy frecuente en la práctica

Jose Miguel Rivero Lexical Analysis – p. 46/46