You are on page 1of 10

ANALISIS LEXICO

Compiladores 1
Sección B

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

Obtener el siguiente
componente léxico

Árbol de análisis
sintáctico

Componentes Léxicos,
Patrones, lexemas:

• 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 =

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

\n

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

\d
\s

\v
\w

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.

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

Expresiones Regulares por
Estados en Herramientas

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

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.