Compilador
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....
Regístrate para leer el documento completo.