Analisis lexico

10
ANALISIS LEXICO Compiladores 1 Sección A

description

Analisis lexico, token, lexema, componente lexico, errores lexico, expresiones regulares, ejemplos

Transcript of Analisis lexico

Page 1: Analisis lexico

ANALISIS LEXICOCompiladores 1

Sección A

Page 2: Analisis lexico

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”

Page 3: Analisis lexico

• El analizador léxico opera bajo petición del analizador sintáctico devolviendo un analizador léxico conforme lo va necesitando la gramática.

Programa fuente

Analizador léxico

Programa sintáctico

Árbol de análisis sintáctico

ComponenteLéxico

Obtener el siguiente componente léxico

Page 4: Analisis lexico

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 Lexema PatrónIdentificadorNum_enteroIfDoOp_divOp_asig

Índice, a, temp1492, 1, 2IfDo/=

Letra seguida de letras o dígitosDígitos seguido de más dígitosLetra i seguida de letra fLetra d seguida de oCarácter /Carácter =

Page 5: Analisis lexico

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

Page 6: Analisis lexico

Definición de Expresiones Regular en Herramientas

a | b unión esta expresión regular, que coincide con todas las entradas que se corresponde con a o b.

a b Concatenación Una letra que inicia con a, le sigue la letra b.

a* Cerradura Kleene

La a puede venir 0 o más veces.

a+ Cerradura Abierta

Es equivalente (a)a*

a? Cerradura cerrada

Es equivalente a una cerradura vacía.

a{n} Es equivalente a n, veces concatenado a.a{n,m} Tiene un límite inferior y superior para concatenar las a."Expr" Se define un texto exacto que define la expresión

regular.[a-zA-Z] Definición de Rango de caracteres según el orden

definido en ASCII.[^a] Cualquier elemento que no sea a.

Page 7: Analisis lexico

\t Representa un tabulador \r Representa el "regreso al inicio" o sea el lugar en que la línea vuelve a iniciar.

\n Representa la nueva línea. Como también el carácter que le dará inicio.

\f Representa un salto de página

\d Representa un dígito del 0 al 9

\v Representa un tabulador vertical

\s Representa un espacio en blanco.

\w Representa cualquier carácter alfanumérico.

Definición de Expresiones Regular en Herramientas

Page 8: Analisis lexico

Ejemplos de Expresiones Regulares

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

Page 9: Analisis lexico

Expresiones Regulares por Estados en Herramientas

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

Page 10: Analisis lexico

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.