Compilador

Bloque 2:Análisis TEMA 2: ANALIZADOR TEMA LÉXICO 2: ANALIZADOR LÉXICO

Compiladores e Intérpretes

1

Índice
1- Definiciones previas 2- Definición del analizador léxico
2.1- Funcionamiento 2.2- Separación Léxico-Sintáctico 2.3- Errores léxicos

3- Construcción manual del analizador léxico
3.1- Implementación mediante diagrama de estados 3.2- Implementación mediante tabla detransiciones 3.4- Gestión de los buffers

4- Generación automática de analizadores léxicos
4.1- Lex 4.2- JFlex

5- Atributos de los tokens 6- Decisiones en el diseño

Compiladores e Intérpretes

2

1

Índice
1- Definiciones previas 2- Definición del analizador léxico
2.1- Funcionamiento 2.2- Separación Léxico-Sintáctico 2.3- Errores léxicos

3- Construcción manual del analizador léxico3.1- Implementación meidante diagrama de estados 3.2- Implementación mediante tabla de transiciones 3.4- Gestión de los buffers

4- Generación automática de analizadores léxicos
4.1- Lex 4.2- JFlex

5- Atributos de los tokens 6- Decisiones en el diseño

Compiladores e Intérpretes

3

Definiciones previas
Token: componente léxico. Símbolos terminales. Lexema: secuencia caracteres. Puedehaber conjunto de lexemas que se refieren al mismo token. Patrón: describen el conjunto de cadenas de entradas asociados a un token.

Compiladores e Intérpretes

4

2

Definiciones previas
Ejemplo:
Componente Léxico T_Const T_If T_Relación T_Id Lexemas Const If = 2)yyin = abre_f(argv[1], «r»); if (argc == 3)yyout = abre_f(argv[2], «w»); if (yyin != NULL) yylex(); if (argc >= 2)yyin =fclose(yyin); if (argc == 3)yyout = fclose(yyout); exit(0); }

Solución

Compiladores e Intérpretes

107

Generación automática de AL: JFLEX
Motivación:
Sintaxis muy parecida a la de Lex Interfaz gráfica para generar el analizador Genera código Java

Compiladores e Intérpretes

108

54

Generación automática de AL: JFLEX
A partir de la especificación JFLEX se crea un fichero .javaque contiene el scanner. En la clase que se crea hay un método llamado yylex que ejecuta el analizador.

Compiladores e Intérpretes

109

Generación automática de AL: JFLEX
La especificación de JFLEX se divide en tres partes igual que LEX:
Código de usuario Opciones y declaraciones Reglas léxicas

Compiladores e Intérpretes

110

55

Generación automática de AL: JFLEX
Código deusuario: el texto que se introduce aquí se copia directamente en la parte de arriba del analizador generado.
Se introducen los imports necesarios.

Compiladores e Intérpretes

111

Generación automática de AL: JFLEX
Opciones y declaraciones: se componen de:
Conjunto de opciones Código que se introducen dentro de la clase del analizador Ambientes Declaraciones de macros

Cada una de lasopciones se pone con %
Compiladores e Intérpretes 112

56

Generación automática de AL: JFLEX
Algunas variables son:
%class Lexer: comunica a Jflex que la clase debe llamarse lexer. %cup: establece la compatibilidad de Jflex con CUP. %line: permite que se puedan contar las líneas. %column: permite que se puedan contar las columnas.
Compiladores e Intérpretes 113

Generación automática deAL: JFLEX
Algunas variables son:
Char: permite contar los caracteres

El código que se encuentra entre %{%} se copia directamente en la clase generada.

Compiladores e Intérpretes

114

57

Generación automática de AL: JFLEX
Opciones y declaraciones:
Declaración de macros
Se usan para hacer las especificaciones léxicas más entendibles. Consisten en un identificador seguido de = yluego una expresión regular

Declaración de ambientes
%state listaAmbientes

Compiladores e Intérpretes

115

Generación automática de AL: JFLEX
Reglas léxicas: esta sección contiene:
Expresiones regulares y acciones El analizador va leyendo la cadena de entrada y activa la expresión que tiene mayor longitud. Se pueden utilizar los ambientes léxicos funcionan como una condición….