ANALISIS LEXICO

Compiladores 1 Sección A

Análisis Léxico
Lee los caracteres de entrada y elabora como salida una secuencia de componentes léxicos (token) que son utilizadas en el análisis sintáctico. ‡ ‡ ‡ ‡ ‡ ‡ Palabras reservadas: if, while, repeat. Identificadores: Posición, velocidad, tiempo. Operadores: = * + - / == > < & ¡= Símbolos especiales: ; ( ) [ ] { } Constantes Numéricas: 982, 0xF678, -83.2E+2 Constantes de caracteres: Hola mundo

‡ El analizador léxico opera bajo petición del analizador sintáctico devolviendo un analizador léxico conforme lo va necesitando la gramática.
Componente Léxico Programa fuente Analizador léxico Programa sintáctico Árbol de análisis sintáctico

Obtener el siguiente componente léxico

‡ Lexema: Cadena de caracteres que concuerda con un patrón que describe un componente léxico. ‡ Componente léxico: Secuencia de caracteres que tienen un significado colectivo. ‡ Patrón: Es una regla que genera la secuencia de caracteres que puede representar a un determinado componente léxico (Expresión regular).
Componente Léxico Identificador Num_entero If Do Op_div Op_asig Lexema Índice, a, temp 1492, 1, 2 If Do / = Patrón Letra seguida de letras o dígitos Dígitos seguido de más dígitos Letra i seguida de letra f Letra d seguida de o Carácter / Carácter =

Componentes Léxicos, Patrones, lexemas:

Otras Funciones
‡ Manejo del fichero de entrada del programa fuente: abrirlo, leer sus caracteres y cerrarlo. ‡ Ignorar caracteres no relevantes [ej. Eliminar Comentarios, espacios en blanco, tabulaciones y saltos de línea]. ‡ Manejo y Recuperación de errores [contabilizar el numero de líneas y columnas para emitir mensaje de error]. ‡ Agrupar resto de los caracteres
‡ Rechazar agrupaciones inválidas y clasificar las válidas

Definición de Expresiones Regular en Herramientas
a|b ab a* a+ a? a{n} a{n,m} "Expr" [a-zA-Z] [^a] unión esta expresión regular, que coincide con todas las entradas que se corresponde con a o b. Concatenación Una letra que inicia con a, le sigue la letra b. Cerradura Kleene Cerradura Abierta Cerradura cerrada La a puede venir 0 o más veces. Es equivalente (a)a* Es equivalente a una cerradura vacía. Es equivalente a n, veces concatenado a. Tiene un límite inferior y superior para concatenar las a. Se define un texto exacto que define la expresión regular. Definición de Rango de caracteres según el orden definido en ASCII. Cualquier elemento que no sea a.

Definición de Expresiones Regular en Herramientas
\t Representa un tabulador \r Representa el "regreso al inicio" o sea el lugar en que la línea vuelve a iniciar. Representa un salto de página Representa un tabulador vertical Representa cualquier carácter alfanumérico.

\n

\d \s

Representa la nueva línea. Como también el carácter que le dará inicio. Representa un dígito del 0 al 9 Representa un espacio en blanco.

\f

\v \w

Ejemplos de Expresiones Regulares
Comentario="/* [^*]+ */" | "/* * + "/" Comentario2 = // ([^\r\n])* \r|\n tstring =[\"] [^\"\n]* [\"\n] numero =[0-9]+ "."? [0-9]* letra =[a-zA-ZÑñ]+ iden ={letra}({letra}|{numero}|"_")*

"IF" {} "WHILE" {} "FOR" {} <!inicio" {yybegin(A); } <A>{ {numero} {} ";" {} !> {yybegin(YYINITIAL);} [ \t\r\f\n]+ { /* Se ignoran */} . {/* Cualquier Error*/} }

Expresiones Regulares por Estados en Herramientas

Tratamiento de Errores
‡ Nombre ilegales de identificadores: Un nombre que contiene un carácter invalido. ‡ Números incorrectos: un numero que contiene caracteres inválidos o no está formado correctamente [3.14 en vez de 3,14 o 0.3.14]. ‡ Errores de ortografía en palabras reservadas: Caracteres omitidos, adicionales o cambiados de sitio, por ejemplo la palabra hwile en vez while. ‡ Fin de archivo: Se detecta el fin de un archivo a mitad de un componente léxico.