Analisis Lexico
Analisis Lexico
Analisis Lexico
Descripcin Funcional
El analizador lxico o scanner lee los caracteres del programa fuente para reconocer las palabras o lexemas y clasificarlos en componentes lxicos o tokens que son entregados al analizador sintctico.
21/11/2012
Descripcin Funcional
La compilacin empieza con el analizador sintctico quien solicita un token para realizar su trabajo; el analizador lxico lee smbolos y enva el token correspondiente que requiere el analizador sintctico y espera una nueva solicitud de token. El analizador lxico est supeditado por el analizador sintctico. Durante estas etapas se tiene comunicacin con la tabla de smbolos que concentra informacin de las entidades empleadas en el programa.
21/11/2012 3
Descripcin Funcional
21/11/2012
Descripcin Funcional
Componentes Lxicos o tokens
palabras reservadas: if, while, do, break identificadores: asociados a variables, nombres de funciones, tipos definidos por el usuario, etiquetas,... Por ejemplo: velocidad, y11, suma, _100 operadores: = * + - / == smbolos especiales: ; [ ] ( ) { } , constantes numricas: valores enteros, valores en coma flotante, etc.: 982, 0xF678, -83.2E+2,... constantes de caracteres: cadenas de caracteres, hola mundo,... Comentarios: /** abcde **/
21/11/2012 5
Descripcin Funcional
Administrar el archivo del programa fuente: abrirlo, leerlo, cerrarlo y gestionar posibles errores de lectura. Eliminar comentarios, espacios en blanco, tabuladores y saltos de lnea (caracteres no validos para formar un token). Incluir archivos: # include ... Expandir macros y funciones inline: # define ... Contabilizar lneas y columnas para emitir mensajes de error. Reconocer las marcas de fin de archivo. Insertar los identificadores en la Tabla de Smbolos. Reconocer errores lxicos.
21/11/2012 6
Patrn
Digito seguido de mas dgitos Letra i seguida de letra f Letra d seguida de letra o Smbolo / Smbolo > seguido de =
Lexemas
total, b52, i 1492, 1, 512 if do / >=
cte_cadena
hola!!!
21/11/2012
21/11/2012
float match0(char s) /* find a zero */ {if (!strncmp(s, "0.0", 3)) return 0.0; }
21/11/2012
10
AFD
21/11/2012
retornar 4
21/11/2012
TOKEN CODIGO retornar 5 ENTERO 1 2 retornar 6 REAL ID 3 4 retornar 7 SUMA RESTA 5 6 retornar 8 MULTIPLICACION DIVISION 7 8 retornar 9 PARIZQ PARDER 9
21/11/2012
16
21/11/2012
17
Programa simulador del Diagrama de Transiciones Traduccin del DT a pseudo cdigo (los estados del AFD estn implcitos en el algoritmo). Utiliza una variable para almacenar el estado actual y una estructura tipo case doble anidada. El primer case comprueba el estado actual y el siguiente el carcter en la entrada. Las transiciones asocian un nuevo valor a la variable estado y avanza en la entrada. El cdigo es largo y difcil de mantener si se introducen nuevos caracteres en el alfabeto o nuevos estados.
18
21/11/2012
21/11/2012
20
21/11/2012
21
21/11/2012
23
* retornar EsReservada(lexema)
* retornar 3
** retornar 2
TOKEN ID ENTERO REAL PR_WHILE PR_WHEN SUMA RESTA DOSPTOS OP_ASIG CODIGO 1 2 3 4 5 6 7 8 9 E.R. [a-zA-Z][a-zA-Z0-9]* -?[0-9]+ -?[0-9]+ . [0-9]+ while when + > := 24
otro
* retornar 7
retornar 9
* retornar 8
21/11/2012
25