Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Analisis Lexicografico
Analisis Lexicografico
Tema 2.
Anlisis lexicogrfico
Este captulo estudia la primera fase de un compilador, es decir su anlisis lexicogrfico, o ms
concisamente anlisis lxico. Las tcnicas utilizadas para construir analizadores lxicos tambin
se pueden aplicar a otras reas, como, por ejemplo, a lenguajes de consulta y sistemas de
recuperacin de informacin. En cada aplicacin, el problema de fondo es la especificacin y
diseo de programas que ejecuten las acciones activadas por palabras que siguen ciertos patrones
dentro de las cadenas a reconocer. Como la programacin dirigida por patrones es de mucha
utilidad, se introduce un lenguaje de patrn-accin, llamado LEX, para especificar los
analizadores lxicos. En este lenguaje, los patrones se especifican por medio de expresiones
regulares, y un compilador de LEX puede generar un reconocedor de las expresiones regulares
mediante una autmata finito eficiente.
Por otro lado, una herramienta software que automatiza la construccin de analizadores lxicos
permite que personas con diferentes conocimientos utilicen la concordancia de patrones en sus
propias reas de aplicacin.
gramtica (N, T, P, S)
N Smbolos no terminales.
T Smbolos terminales
P Reglas de produccin
S Axioma inicial
El analizador lxico tiene que dividir la secuencia de caracteres en palabras con significado
propio y despus convertirlo a una secuencia de terminales desde el punto de vista del
analizador sintctico, que es la entrada del analizador sintctico.
El analizador lxico reconoce las palabras en funcin de una gramtica regular de manera
que sus NO TERMINALES se convierten en los elementos de entrada de fases
posteriores. En LEX, por ejemplo, esta gramtica se expresa mediante expresiones
regulares.
Anlisis Lexicogrfico
Anlisis Lexicogrfico
( 0 | 1 | 2 | ... | 9) +
(+ | - | * | /)
NUM
OPARIT
( 0 | 1 | 2 | ... | 9) +
NUM
+
MAS
-
MENOS
*
MULT
/
DIV
Es ms, si ni siquiera hubiera anlisis lxico, el propio anlisis sintctico vera
incrementado su nmero de reglas:
NUM
Anlisis Lexicogrfico
0
|1
|2
|3
....
| NUM NUM
Otra razn por la que se separan los dos anlisis es para que el analizador lxico se centre
en el reconocimiento de componentes bsicos complejos. Por ejemplo en FORTRAN,
existen el siguiente par de proposiciones :
DO 5 I = 2.5
DO 5 I = 2,5
En ste lenguaje los espacios en blancos no son significativos fuera de los comentarios y
de un cierto tipo de cadenas, de modo que supngase que todos los espacios en blanco
eliminables se suprimen antes de comenzar el anlisis lxico. En tal caso, las proposiciones
anteriores apareceran al analizador lxico como
DO5I = 2.5
DO5I = 2,5
El analizador lxico no sabe si DO es una palabra reservada o es el prefijo de una variable
hasta que llegue a la coma. El analizador ha tenido que mirar ms all de la propia palabra
a reconocer haciendo lo que se denomina lookahead (o prebsqueda).
Anlisis Lexicogrfico
Donde cada accin es un fragmento de programa que describe cual ha de ser la accin
del analizador lxico cuando la secuencia de entrada coincida con la expresin regular.
S
S
S
Terminales
NUM_ENT
NUM_REAL
ID
Anlisis Lexicogrfico
{accin1}
{accin2}
...
{accinn}
Anlisis Lexicogrfico
Si ejecutamos prog.exe se quedar esperando a que le introduzca datos por teclado para
analizarlos hasta que le introduzcamos ctrl+z. El programa va buscando entre los
patrones si coincide con el lexema que le hemos metido. Cuando reconoce uno ejecuta la
accin que tiene asociada.
Ej:
[0-9] + {printf(numero);}
[A-Z]+ {printf(palabra);}
tecleamos : HOLA 23 ^z
Salida : palabranumero
c:>
Si queremos meter como entrada un texto que no proceda de la entrada standard, sino que
proceda de un fichero lo que se hace es redirigir la entrada.
prog < file.pas > salida.txt
< file.pas
> salida.txt
Anlisis Lexicogrfico
redirige la entrada
redirige la salida.
Anlisis Lexicogrfico
10
- : indica rango.
[A-Z0-9] de la A a la Z o de 0 a 9.
Anlisis Lexicogrfico
11
Anlisis Lexicogrfico
12
13
Anlisis Lexicogrfico
14
{ECHO; unput(t);}
{ECHO;}
15
Anlisis Lexicogrfico