Está en la página 1de 46

Lexical Analysis (Scanning)

Jose Miguel Rivero


rivero@lsi.upc.edu

Barcelona School of Informatics (FIB)


Technical University of Catalonia (UPC)

Jose Miguel Rivero Lexical Analysis p. 1/46


Lexical Analysis. Summary
2.1 El anlisis lxico en la compilacin
2.2 Motivacin
2.3 Descripcin del problema
2.4 Construccin 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 Comparacin de los dos mtodos
2.8 Algoritmo de anlisis lxico
2.9 Tratamiento de errores lxicos
2.10 Generacin automtica de analizadores lxicos:
ANTLR, flex, . . .
Jose Miguel Rivero Lexical Analysis p. 2/46
2.1 Anlisis lxico en la compilacin
Estructura conceptual vs. estructura real
Objetivo. Tokens
Otros componentes lxicos
Atributos de los tokens
Ejemplo

Jose Miguel Rivero Lexical Analysis p. 3/46


Estructura conceptual vs. estructura real
Estructura conceptual
arbol
programa lista de arbol sintactico
fuente ANALISIS tokens ANALISIS sintactico ANALISIS decorado
LEXICO SINTACTICO SEMANTICO

Estructura procedural (real)

arbol
programa token arbol sintactico
fuente ANALISIS ANALISIS sintactico ANALISIS decorado
LEXICO SINTACTICO SEMANTICO
necesito token

2 pasada
1 pasada

representaciones internas

Jose Miguel Rivero Lexical Analysis p. 4/46


Objetivo. Tokens
Objetivo:
descomponer la secuencia de caracteres
del programa fuente en una secuencia de
componentes lxicos (tokens)
Cales son los tokens que debemos reconocer y
enviar al analizador sintctico?:
palabras clave del lenguaje (while, endvars,
write, . . .)
operadores (+, /, <=, OR, :=, . . .)
otros smbolos del lenguaje (parntesis, 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
Otros componentes lxicos
Existen componentes lxicos que deben reconocerse
aunque no tengan inters para etapas posteriores del
compilador:
separadores: espacios, tabuladores, . . .
comentarios: /* ... */ en C, // ... en C++
cambios de lnea. Interesa conocer en que lnea
encontramos los tokens para situar los errores de
compilacin

Atributos de los tokens


en todos: el nmero de lnea
en identificadores, constantes numricas, strings, . . . :
el texto del token (el prefijo reconocido)

Jose Miguel Rivero Lexical Analysis p. 6/46


Ejemplo
Programa fuente:
Program 1: Program
Vars 2: Vars
Integer i 3: Integer i
Real r 4: Real r
EndVars 5: EndVars
6:
i := 1 ; r := 1.17 7: i := 1 ; r := 1.17
While i < 25 Do // 24 vueltas 8: While i < 25 Do // 24 vueltas
r := r / i ; i := i + 1 9: r := r / i ; i := i + 1
EndWhile 10: EndWhile
Write ( "fin" ) 11: Write ( "fin" )
EndProgram 12: EndProgram

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


2.2 Motivacin
Por qu definir una etapa especfica que realiza el anlisis
lxico de un programa?:
Conceptualmente es una tarea diferenciada: filtra la
entrada y la descompone en aquellos elementos que
tienen inters para la siguiente etapa, el anlisis
sintctico.
Las tcnicas que veremos sern
sencillas y eficientes (no debemos matar moscas
a caonazos)
flexibles (los cambios a nivel lxico se pueden
resolver fcilmente)
transportables y generales
Estas tcnicas tienen otras muchas aplicaciones.
Jose Miguel Rivero Lexical Analysis p. 8/46
Otras aplicaciones
Recuperacin de informacin (anlisis de queries)
Problemas de gentica
Editores de texto (editores dirigidos por la sintaxis, . . . )
Sistemas operativos (lenguajes de commandos, grep)
Ejemplo (en unix): % rm prog*.[ch]
Lenguajes de programacin (del tipo patrn/accin :
(AWK )
Verificacin de circuitos
...

Jose Miguel Rivero Lexical Analysis p. 9/46


2.3 Descripcin del problema
Expresiones regulares
Poder expresivo de las expresiones
regulares
Problema a resolver por el analizador lxico
Ejemplos
Criterio para deshacer ambigedades
Cuidado al definir el lenguaje!

Jose Miguel Rivero Lexical Analysis p. 10/46


Expresiones regulares
Los elementos lxicos de un lenguaje de programacin se
especifican con expresiones regulares sobre un cierto
alfabeto .
Reglas de formacin:
er = es una expresin regular
er = a es una expresin regular para todo a
si er1 y er2 son expresiones regulares,
er = er1 | er2 es una expresin regular
si er1 y er2 son expresiones regulares,
er = er1 er2 es una expresin regular
si er1 es una expresin regular, er = er1 es una expresin regular
si er1 es una expresin regular, er = (er1 )
es una expresin regular

Jose Miguel Rivero Lexical Analysis p. 11/46


Poder expresivo de las ers
Mediante expresiones regulares no podemos
reconocer, por ejemplo, expresiones bien parentizadas
por ejemplo del tipo {an bn }: los autmatas finitos no
saben contar.
Tampoco podemos reconocer las palabras del lenguaje
{nan : n 0} =
{ 0, 1a, 2aa, 3aaa, . . . }
Strings repetidos no pueden ser especificados con
expresiones regulares. El conjunto { w c w | w (a|b) }
no es un lenguaje regular, ni tampoco puede ser
descrito con gramticas incontextuales.

Jose Miguel Rivero Lexical Analysis p. 12/46


Problema a resolver en el scanning
Tenemos una lista de expresiones regulares er1 , . . . , ern
que describen los componentes lxicos del lenguaje, y un
programa fuente a descomponer (la palabra w).
Dadas las expresiones regulares er1 , . . . , ern
y la palabra w, se trata de encontrar el prefijo
ms largo v de w t.q. v L(eri ) para alguna i.
En caso de encontrar ms de una expresin regular para el
prefijo v , se elegir la eri con la i mnima.
La siguiente llamada al analizador lxico vuelve a hacer lo
mismo con el resto de la entrada por tratar (si w = v w
despus buscar el prefijo ms largo de w ) y as hasta
agotar la entrada.

Jose Miguel Rivero Lexical Analysis p. 13/46


Ejemplos
Se trata de encontrar el prefijo ms largo, por tanto
si tenemos "programacion ..." no nos dir que
tenemos la palabra clave program seguido del
identificador acion
si tenemos "while ..." no nos dir que tenemos
el identificador "while"
si tenemos "ab24.8 ..." no nos dir que
tenemos el identificador "ab" seguido del real
"24.8" (a menos que los identificadores slo
contengan caracteres alfabticos)

Jose Miguel Rivero Lexical Analysis p. 14/46


Ejemplos (cont.)
Si tenemos "10..20 ..." nos dir que tenemos el
entero "10" porque aunque intenta reconocer un
real que empieza por "10." cuando ve el segundo
. se da cuenta que no puede y tiene que volver al
lugar en el que ya haba reconocido algo. Despus
reconocer los dos puntos y por ltimo el segundo
entero. Ojo, no linealidad!
Por tanto, se tiene que recordar el punto en que acab
el ltimo prefijo aceptado (y por qu eri ) por si no
podemos encontrar uno an ms largo.
Si en cambio s encontramos un prefijo an ms largo
nos olvidamos del anterior.
Para no perder linealidad podemos exigir que al buscar
un prefijo an ms largo, slo podemos atravesar
estados aceptadores. Jose Miguel Rivero Lexical Analysis p. 15/46
Deshacer ambigedades lxicas
Se tiene que reconocer el prefijo ms largo posible
Se tienen que especificar primero (menor i) las
expresiones regulares que corresponden a palabras
clave, que la que define los identificadores: una palabra
clave forma parte del lenguaje de las dos, pero la
tenemos que reconocer como palabra clave y no como
identificador.
Ejemplo de analizador lxico 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
...
Cuidado al definir el lenguaje!
Es importante hacer una definicin muy meditada tanto de
los componentes lxicos como de la estructura sintctica
de un lenguaje. Por ejemplo, estas son algunas de las
situaciones que se podran dar:
en Fortran, la expresin DO 5 I = 1,25 ...
representa el comienzo de un bucle. Si en lugar de
1,25 hubiramos escrito 1.25 estaramos asignando
dicho valor real a la variable DO5I: no free-format
si obligamos a que las etiquetas (pasa tambin en
Fortran) estn situadas en la primera columna
complicaremos el anlisis lxico
si permitimos que los reales puedan tener parte
decimal vaca, el rango (de un array ) 10..40 no se
analizar correctamente
Jose Miguel Rivero Lexical Analysis p. 17/46
2.4 Constr. de Thompson de AFN(er)
Construccin del autmata N (er) para las expresiones
regulares , a, er1 |er2 , er1 er2 , er1 y (er1 ), donde er1 y er2
son expresiones regulares con autmatas ya
construidos N (er1 ) y N (er2 ).
er = er = a er = er1 | er2
a
N(er1)


N(er2)

er = er1 er2 er = er1* er = (er1)

N(er1) N(er2) N(er)


N(er1)
N(er1)

Jose Miguel Rivero Lexical Analysis p. 18/46


Construccin de Thompson (cont.)
Invariante de la construccin: todos los AFNs tienen un
estado inicial sin aristas de entrada, y un solo estado
final sin aristas de salida
El nmero de estados del AFN(er) 2|er|, porque se
aaden como mximo 2 nuevos estados por cada paso
durante la construccin
Tenemos como mximo 2 aristas salientes (2
transiciones) por cada estado del autmata. Por tanto,
podemos obtener una representacin compacta del
mismo.

Jose Miguel Rivero Lexical Analysis p. 19/46


Ejemplo 1
Autmata finito indeterminista para la expresin regular
er = (a|b) abb. Estos son los primeros pasos de las
construccin del AFN:
er = a er = b er = a | b
a b
a

er = (a | b)* er = (a | b)* a

a a

a

b b

Jose Miguel Rivero Lexical Analysis p. 20/46


Ejemplo 2
Combinacin de AFNs en la disyuncin de las eri s para
resolver el problema del anlisis lxico

N(er1) f1


er = er1 | er2 | ... | ern N(er2) f2
i
.
.
.

N(ern) fn

Jose Miguel Rivero Lexical Analysis p. 21/46


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 de
S a travs de cero o ms -transiciones.

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


con una transicin etiquetada con a.

Algoritmo que decide si AFN(er) reconoce w:


P re : s0 es el estado inicial del autmata AF N
F es el conjunto de estados finales de AF N
eof es el smbolo con el que acaba w
S := -clausura({s0 });
a := LeerSimbolo( );
while a ! = eof do
S := -clausura(move(S, a));
a := LeerSimbolo( );
endwhile
P ost : AF N acepta w ssi S F 6=
Jose Miguel Rivero Lexical Analysis p. 22/46
Anlisis del algoritmo
Coste temporal del algoritmo: O(|er| |w|)
Coste espacial (tamao de la tabla de transiciones del
autmata): O(|er|)
Pero recordemos que el objetivo del anlisis lxico en
la compilacin es obtener el prefijo ms largo de w y
dar prioridad a la i mnima en caso de empate.
Para ello hay que modificar ligeramente el algoritmo
anterior: tenemos que mantener el estado de
aceptacin ms reciente (si hay varios slo el de la i
mnima), y adems guardar la longitud del prefijo
correspondiente. As cuando ya no haya transicin
posible, sabremos cal fue el ltimo prefijo aceptado y
por qu expresin regular.

Jose Miguel Rivero Lexical Analysis p. 23/46


2.6 Alternativa: calcular el AFD(er)
Algoritmo de determinizacin a partir de AFN(er)
Ejemplo
Coste espacial del ADF
Algoritmo de minimizacin de AFDs
Ejemplo
Algoritmo de aceptacin de w por el AFD
Tcnicas de compresin

Jose Miguel Rivero Lexical Analysis p. 24/46


Algoritmo de determinizacin
Autmata determinista: desde ningn estado hay
-transiciones ni tampoco ms de una arista de salida
para un mismo smbolo a .
Tcnica de clculo de subconjuntos. Entenderemos
cada subconjunto final de estados como un estado del
autmata determinista y calcularemos las transiciones
entre estos estados.
Algoritmo: construiremos Dstate (el conjunto de
estados de AFD) y Dtran (la tabla de transiciones del
AFD). Los estados en Dstate se marcan cuando se
calculan sus transiciones en Dtran.

Jose Miguel Rivero Lexical Analysis p. 25/46


Algoritmo de determinizacin (cont.)
Pre: s0 es el estado inicial del autmata AF N
F es el conjunto de estados finales de AF N
-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
aade S (sin marcar) a Dstate
endif
Dtran[S, a] := S ;
endfor
endwhile
Post: el estado inicial de AF D es -clausura({s0 })
Son estados finales de AF D todos aquellos (conjuntos de)
estados que contengan al menos un estado de F

Jose Miguel Rivero Lexical Analysis p. 26/46


Ejemplo
Calcular el autmata determinista para la expresin regular
er = (a|b) abb
NFA:

a
2 3

a b b
0 1 6 7 8 9 10
b
4 5


-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


Ejemplo (cont.)
Dtran:

smbolo

estado a b DFA: b
A B C C b
b
B B D
a
C B C
a b b
D B E A B D E
E B C a
a a

Jose Miguel Rivero Lexical Analysis p. 28/46


Coste espacial del AFD
El coste en espacio (nmero de estados de la tabla Dtran)
puede ser exponencial respecto de la longitud de er (el
nmero de subconjuntos distintos de un conjunto de N
elementos es 2N )
Ejemplo: Dada la expresin 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 el
estado 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


Coste espacial del AFD (cont.)
a, b

a a, b a, b a, b
0 1 ... k k+1

El tamao del AFD correspondiente es exponencial


porque necesita recordar k + 1 bits (los ltimos k + 1
smbolos ledos)
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


Algoritmo de minimizacin de AFDs
Calcula particiones sucesivas del conjunto de estados.
P re : S es el conjunto de estados de AF D
s0 es el estado inicial de AF D
F es el conjunto de estados finales de AF D

P ost : AF D acepta el mismo lenguaje que AF D


teniendo el mnimo nmero de estados posible

Jose Miguel Rivero Lexical Analysis p. 31/46


Algoritmo de minimizacin (cont.)
Calcula particiones sucesivas del conjunto de estados.
particin inicial = new con dos grupos :
estados finales F y estados no finales S \ F
repeat
:= new
f or 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 smbolo a , s y t tienen transiciones
hacia estados en el mismo grupo de .
2. reemplaza G en new por el conjunto de
subgrupos formados
endf or
until new =

Jose Miguel Rivero Lexical Analysis p. 32/46


Algoritmo de minimizacin (cont.)
Se construye AF D :
1. Sus estados se definen eligiendo un representante
de cada grupo
2. Las transiciones en AF D sern las que existen entre
los estados representantes de AF D
3. El estado inicial de AF D ser el representante del
grupo que contiene s0
4. Los estados finales sern aquellos que tengan
representantes en F

Jose Miguel Rivero Lexical Analysis p. 33/46


Ejemplo
Minimizacin del autmata determinista que reconoce
(a|b) abb
DFA: b

C b
b
a
a b b
A B D E
a
a a

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)
particin final

Jose Miguel Rivero Lexical Analysis p. 34/46


Ejemplo (cont.)

Dtran:
smbolo

estado a b
DFAmin :
b
b
AC B AC
a b b
B B D AC B D E
a
D B E a a

E B AC

Jose Miguel Rivero Lexical Analysis p. 35/46


Otro forma de calcular AFD(er)
Evita determinizar el AFN(er) y aplicar despus el
algoritmo de minimizacin.
Realiza estos dos pasos en uno.
No siempre obtiene el AFD(er) mnimo pero es una
buena tcnica en la mayoria de los casos

Jose Miguel Rivero Lexical Analysis p. 36/46


Algoritmo de decision para AFD(er)
P re : s0 es el estado inicial del autmata AF D
F es el conjunto de estados finales de AF D
eof es el smbolo con el que acaba w

s := s0 ;
a := LeerSimbolo( );
while a ! = eof do
s := Dtran[s, a];
a := LeerSimbolo( );
endwhile

P ost : AF D acepta w ssi s F

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


Tiene un coste espacial (tamao de Dtran)
O( (nmero de estados del AFD) (nmero de smbolos de ) ) = O(2|er| )

Jose Miguel Rivero Lexical Analysis p. 37/46


Tcnicas de compresin
Existen diferentes formas de implementar la funcin de
transicin de un AF D. La ms directa es usando una tabla
de transicin. El tamao de esa tabla depende del nmero
de estados del autmata y del nmero de smbolos del
alfabeto. Dado que:
1. el nmero de estados puede ser bastante elevado y
2. no existen transiciones desde cada estado para todos
los smbolos (ms bien al contrario, o bien es al mismo
estado para casi todos los smbolos)
esta enorme tabla se encuentra mayormente vaca (sparse)
e interesa trabajar con una representacin ms compacta.

Jose Miguel Rivero Lexical Analysis p. 38/46


Tcnicas de compresin (cont.)
Vector unidimensional de estados. Desde cada estado
cuelga la lista de transiciones que s estn definidas
desde l, ms eventualmente la transicin que se hace
por defecto (o en caso de error). Es la ms sencilla
pero el tiempo de clculo del nuevo estado puede
empeorar sensiblemente.
Otras tcnicas intentan aprovechar (a groso modo) las
casillas vacas contiguas que haba en la tabla inicial
antes del primero y a partir del ltimo smbolo con
transicin en cada estado. En esos mtodos se utilizan
varias tablas para saber, por ejemplo, donde comienza
la fila de transiciones de un estado. As se mejora
mucho el tiempo para calcular una transicin
comparado con la tcnica anterior y el espacio se
aprovecha bastante mejor que utilizando la tabla inicial.
Jose Miguel Rivero Lexical Analysis p. 39/46
Tcnicas de compresin (cont.)
Podemos tambin solapar dos o ms filas siempre que
las transiciones definidas en una y en otra no coincidan.
Esta tcnica se muestra en la siguiente figura:

base if check[base[s] + a] = s then


next(s, a) = next[base[s] + a]
else
+a next(s, a) = error
s

+b
s
next t ... ...

check s s s s s s s ... s s s ...

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

Jose Miguel Rivero Lexical Analysis p. 40/46


2.7 Comparacin de los dos mtodos
Resumen de costes:

Autmata Coste temporal Coste espacial


AF N O(|er| |w|) O(|er|)
AF D O(|w|) O(2|er| )

En general, cuando los dos mtodos son viables (el coste


en espacio del AFD no es excesivamente mayor) podemos
concluir que:

AF N es adecuado cuando |er|


AF D es adecuado cuando |w| o |er|

Jose Miguel Rivero Lexical Analysis p. 41/46


Clculo perezoso (lazy) de transiciones
Combina las necesidades de espacio del autmata AFN
con las ventajas en tiempo del autmata AFD.
Se trabaja a partir del autmata indeterminista, calculando
slo los subconjuntos de estados que se van necesitando.
Estos subconjuntos (y sus transiciones) se guardan en una
cache de forma que no hace falta volver a calcularlos de
nuevo.
Resumiendo sus ventajas:
Menor necesidad de espacio: tamao de la tabla del
AFN ( O(|er|) ) + tamao de la cache
No se calculan transiciones entre estados que nunca
son utilizadas. Esto lo hace casi tan rpido como los
AFD

Jose Miguel Rivero Lexical Analysis p. 42/46


2.8 Algoritmo de anlisis lxico
Ejercicio: suponiendo que los carcteres de la entrada w (contando eof )
se encuentran en un array A indexado desde 0, se trata de modificar el
algoritmo anterior para que reconozca el prefijo ms largo
v = A[0] A[k 1] que encaja con alguna de las expresiones regulares
eri .
Cuando la tabla Dtran no contiene transicin para un cierto estado s y
carcter a entonces contiene el valor -1. Para distinguir un estado final de
uno no final tenemos otro array DF in que dado un estado s contiene true
si 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 ms largo que encaja con
alguna eri . Si no existe tal prefijo devuelve -1.
en ese momento el autmata se encuentra en estado s (que es el
estado final de la expresin regular eri correspondiente)

Jose Miguel Rivero Lexical Analysis p. 43/46


Algoritmo de anlisis lxico (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; // Transicin de estados
if i : 1 i n : qi Fi then // Estado f inal
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
2.9 Tratamiento de errores lxicos
Cundo se produce un error lxico?
Recordemos que el analizador lxico intentar obtener el
prefijo v ms largo de la palabra w que est analizando. Ese
prefijo tiene que formar parte del lenguaje de alguna de las
expresiones regulares er1 , er2 , . . . , ern .
En este proceso se puede llegar a un estado s desde el cual
no haya transicin definida para el smbolo en curso a. Esto le
obligara a devolver el prefijo anterior ms largo que ya haba
reconocido.
Qu ocurre si todava no haba podido reconocer ningn
prefijo que encajara en alguna expresin regular antes de intentar
buscar otro an ms largo? Pues que la seqencia que comienza
con el primer carcter de w no forma parte del lenguaje de
ninguna de las eri : se produce un error lxico.

Jose Miguel Rivero Lexical Analysis p. 45/46


Tratamiento de errores lxicos (cont.)
Hay diferentes formas de tratar estas situaciones de error.
Estas son algunas de ellas:
En modo pnico. Se ignora el primer carcter de w (y sucesivos si
tambin es necesario) hasta que podamos reconocer algn prefijo en
la entrada

Slo se borran caracteres extraos. Por ejemplo, aquellos que no


forman parte del alfabeto del lenguaje: , , @, . . . en lenguajes
como C o Pascal

Se realizan correcciones: insertar un carcter, reemplazar un


carcter por otro distinto, intercambiar adyacentes (wihle pasa a ser
while), etc. En general se intenta que el nmero de correciones sea
el mnimo necesario. No es una tcnica muy frecuente en la prctica

Jose Miguel Rivero Lexical Analysis p. 46/46

También podría gustarte