Sei sulla pagina 1di 10

1

Compiladores e intrpretes
Anlisis Lxico I
Profesor: Eridan Otto
Anlisis Lxico I
Introduccin
Funciones
Tokens,Patrones y Lexemas
Reconocimiento de tokens
Implementacin de un AL
2
Anlisis lxico: Introduccin
En esta unidad se estudiar la primera fase de un compilador, es decir su anlisis
lexicogrfico.
Las tcnicas utilizadas para construir analizadores lxicos, tambin se pueden
aplicar a otras reas:
Lenguajes de consulta a bases de datos
Sistemas de recuperacin de la informacin
Editores
El problema de fondo es especificar y disear un programa que ejecute ciertas
acciones dado que ha identificado una cadena como parte de una expresn regular
o patron.
Diagrama:
Compiladores e intrpretes
Analizador
lxico
Programa
Fuente
Analizador
sintctico
Tabla de Smbolos
Componente lxico
Componente lxico
Obtener otro
Interaccin entre los analizadores
lxico y sintctico
Anlisis lxico: Funciones
Leer los caracteres de entrada
Generar una secuencia de componentes lxicos o TOKENS,
entregando stos al analizador sintctico o PARSER
Eliminar comentarios, delimitadores :si el leguaje es de
formato libre (espacios, smbolos de puntuacin, fin de lnea),
en general, todo aquello que carezca de significado para la
sintaxis del lenguaje.
Lenguajes de formato libre:PASCAL,C
No libre:FOTRAN,COBOL
Relacionar los mensajes de error con las lneas del programa
fuente. (Llevar la cuenta de la lnea en la que se est haciendo
el anlisis). En general manejar el archivo fuente.
Introducir identificadores en la tabla de smbolos
Compiladores e intrpretes
3
Anlisis lxico: Funciones
Manejar errores lxicos. Por ejemplo identificador que
comience con dgito en PASCAL
Puede hacer funciones de preprocesador
Puede manejar un buffer en memoria para mejorar la
eficiencia.
Compiladores e intrpretes
Anlisis lxico: necesidad del mdulo de AL
Por qu se separa el anlisis lxico del sintctico?. Si la gramtica
es una por que no existe slo un parser?
Diseo ms sencillo:
Los smbolos que trata el scanner se describen con una
gramtica (regular) ms simple que la del parser. Esta
divisin permite el diseo de un lenguaje de manera ms
limpia.
A la vez simplifica las funciones del parser. Ej: eliminar
comentarios no es parte del proceso natural de anlisis
gramatical.
Mejorar la eficiencia del compilador:
Gran parte del tiempo de compilacn se consume en la
lectura y exploracin de caracteres. Mdulo especializado.
Compiladores e intrpretes
4
Anlisis lxico: necesidad del mdulo de AL
Mejora la portabilidad:
Se pueden tener varias versiones del scanner para distintos
cdigos, dependiendo de la plataforma (ASCII,EBCDIC),
con el mismo parser.
Tambien permite aislar la representacin de smbolos
especiales o no estndares, ^ en PASCAL.
Descarga el anlisis sintctico:
Hay tareas de reconocimiento de componentes bsicos
complejos. Ej: FORTRAN
DO 5 I = 1.25 ----- > corresponde a asignar DO5I=1.25
DO 5 I = 1,25 ----- > corresponde ciclo 2..25
No se sabe si el identificador es DO5I o 5Ihasta despes del
1
Compiladores e intrpretes
Anlisis lxico: tokens,patrones y lexemas
Un token es un smbolo de la gramtica del analizador
sintctico
Varias cadenas distintas pueden ser representadas por el
mismo token
Un token se define mediente un petrn (regla de formacin o
gramtiga regular)
Un lexema es un conjunto de caracteres que concuerda con el
patrn de un token
En la mayora de los lenguajes son tokens:
Palabras reservadas,identificadores,operadores,
constantes,cadenas literales, signos especiales de
puntuacin del lenguaje.
Compiladores e intrpretes
5
Anlisis lxico: tokens,patrones y lexemas
Un token es un smbolo de la gramtica del analizador
sintctico
Varias cadenas distintas pueden ser representadas por el
mismo token
Un token se define mediente un patrn (regla de formacin o
gramtiga regular)
Un lexema es un conjunto de caracteres que concuerda con el
patrn de un token
En la mayora de los lenguajes son tokens:
Palabras reservadas,identificadores,operadores,
constantes,cadenas literales, signos especiales de
puntuacin del lenguaje.
Compiladores e intrpretes
Anlisis lxico: tokens,patrones y lexemas
Ejemplo
TOKEN Lexemas Ejemplo Descripcin del patrn
Const const const
If if if
Relacion <,>,=,<=,>=,<> < | > | = |<= | >= |<>
Identificador Pi, contador,D2 [a-zA-Z]([a-zA-Z]|[0-9])*
Numero 3.17363 , 0 [0-9]+|.[0-9]+
Literal valor: cualquier carcter entre exepto
Compiladores e intrpretes
6
Anlisis lxico: tokens,patrones y lexemas
Atributos
Un token puede o no tener atributos, que es informacin
adicional a la categora sintctica detectada.
Por ejemplo para la sentencia
if var1>5 then a:= b + var1;
El analizador lxico genera pares <token,atributo>:
Las palabras reservadas generalmente no tienen atributos
Los identificadores apuntan a la tabla de smbolos donde se
almacenan los atributos
Otros casos, por ejemplo nmero entero puede ir directamente
en el campo atributo o en otra tabla
Compiladores e intrpretes
Anlisis lxico: tokens,patrones y lexemas
Por ejemplo para la sentencia
if var1>5 then a:= b + var1;
Lexema <token,atributo>
If <if,>
Var1 <identificador,puntero a tabla de smbolos para Var1>
> <relacion,>>
5 <numero, entero 5>
Then <then,>
a <identificador,puntero a tabla de smbolos para a>
:= <asign,>
b <identificador,puntero a tabla de smbolos para b>
+ <op,+>
Compiladores e intrpretes
7
Anlisis lxico: reconocimiento de tokens
Por ejemplo la expresin regular
[a-zA-Z]([a -zA-Z]|[0-9])*
Se puede reconocer por medio de un autmata finito con la
siguiente funcin de transicin:
Gramtica regular equivalente:
S::= aR|....zR|AR|...|ZR
R::= aR|....zR|AR|...|ZR|0R|...|9R|e
Compiladores e intrpretes
a z ... A Z ... 0 9 ...
q0
*q1
q1 ...
...
...
...
...
...
q1
q1
q1
q1
q1
q1
q1 q1 q1
- -
Anlisis lxico: reconocimiento de tokens
Representacin en forma de FDD, ejemplo, reconocimiento
del token relacion, o rel
Compiladores e intrpretes
0 1
2
3
4
5
6
7
8
Return(rel,<=)
Return(rel,<>)
Return(rel,<)
Return(rel,=)
Return(rel,>=)
Return(rel,>)
>
=
< =
>
otro
otro
=
8
Anlisis lxico: Implementacin de un AL
Utilizando un lenguaje de alto nivel
Programacin
Tabla Compacta
Hashing
Autmata programado
Utilizando ensamblador
Ms eficiente
Ms difcil
Utilizando un generador de Analizadores Lxicos (LEX)
Ms simple, puede ser menos eficiente que los dos
anteriores
Consejo: ordenar las reglas/transiciones de acuerdo a la
frecuencia de utilizacin.
Compiladores e intrpretes
Anlisis lxico: Implementacin de un AL
Utilizando un lenguaje de alto nivel
Programacin
Tabla Compacta
Hashing
Autmata programado
Utilizando ensamblador
Ms eficiente
Ms difcil
Utilizando un generador de Analizadores Lxicos (LEX)
Ms simple, puede ser menos eficiente que los dos
anteriores
Consejo: ordenar las reglas/transiciones de acuerdo a la
frecuencia de utilizacin.
Compiladores e intrpretes
9
Anlisis lxico: Implementacin de un AL
Se deben llevar dos punteros de lectura
Puntero actual (PA,current pointer): el ltimo carcter aceptado
Puntero de bsqueda (PB,lookahead pointer): el ltimo carcter ledo
Funciones de lectura:
Getchar(); mueve PB adelante y devuelve siguiente caracter
Fail(): mueve PB a la posicin donde est PA
Retract(): mueve PB un carcter atrs
Accept(): mueve PA donde est PB
Funciones de chequeo:
IsLetter(x): x pertenece a [a..zA..Z]
IsDigit(x): x pertenece a [0..9]
IsDelimiter(x): x pertenece a [, : ; <newline><eof>]
Acciones:
InstallName(id...):introduce un identificador en la tabla de smbolos
Compiladores e intrpretes
Anlisis lxico: Implementacin de un AL
Ejemplo: Identificador Id::=letra(letra|digito)*
Pseudocdigo:
c :=GetChar();
if IsLetter(c) then
identificador :=
repeat
identificador := identificador + c
c :=GetChar()
until not(IsLetter(c) or IsDigit(c))
Retract()
token:=(Id,InstallName(identificador))
Accept()
Return(token)
else
fail()
Qu ocurre con x1,temp,102??
Compiladores e intrpretes
10
Anlisis lxico: Implementacin de un AL
Ejemplo: constante entera entero::=digito+
Pseudocdigo:
c :=GetChar();
if IsDigit(c) then
valor := convertir( c)
c :=GetChar()
while IsDigit(c ) do
valor := valor*10+ convertir(c)
c :=GetChar()
endWile
Retract()
token:=(entero,valor)
Accept()
Return(token)
else
fail()
Qu ocurre con x1,102,10.3 ??
Compiladores e intrpretes
Anlisis lxico: Implementacin de un AL
Estructura de soporte: Buffer
Compiladores e intrpretes
Programa
Fuente
buffer
Analizador lxico
i f x 1
PA PB
GetChar()
Fail(),Retract(),Accept()

Potrebbero piacerti anche