PDF de programación - Un generador de analizadores léxicos traductores

Imágen de pdf Un generador de analizadores léxicos traductores

Un generador de analizadores léxicos traductoresgráfica de visualizaciones

Publicado el 29 de Noviembre del 2018
1.890 visualizaciones desde el 29 de Noviembre del 2018
5,8 MB
138 paginas
Creado hace 20a (02/05/2003)
Indice

Introducción

Capítulo 1: Introducción a los Analizadores Léxicos

1.1 - Función del Analizador Léxico
1.2 - Componentes léxicos o tokens, patrones y lexemas
1.3 - Especificación de los componentes léxicos

1.3.1 - Cadenas y lenguajes
1.3.2 – Operaciones aplicadas a lenguajes
1.3.3 – Expresiones Regulares
1.3.4 – Definiciones Regulares
1.3.5 – Abreviaturas en la notación

1.4 - Autómatas Finitos

1.4.1 – Autómatas Finitos no deterministas con transiciones λ
1.4.2 – Autómatas Finitos Deterministas
1.4.3 – Conversión de un AFNλ en un AFD
1.4.4 – Construcción de un AFD a partir de una expresión
regular
1.4.5 – Minimización del número de estados de un AFD

1.5 - Generación de Analizadores Léxicos
1.6 - Diseño de un Generador de Analizadores Léxicos


Capítulo 2: Introducción a los Analizadores Léxicos Traductores

2.1 – Definiciones

2.1.1 – Traducción (»)
2.1.2 - Expresión Regular Traductora (ET)
2.1.3 – Proyección sobre la primera coordenada (Π1)
2.1.4 – Proyección sobre la segunda coordenada (Π2)
2.1.5 – Traducción generada por una ET:
2.1.6 - Expresión Regular con Traducción Única (ETU)
2.1.7 - Expresión Regular Traductora Lineal (ETL)
2.1.8 - Expresión regular Traductora Lineal Cerrada (ETC)
2.1.9 - Autómata Finito Traductor (AFT)
2.1.10 – Máquina de Mealy
2.1.11 – Máquina de Moore

2.2 - Propiedades de las expresiones traductoras
2.3 - Diseño un Generador de Analizadores Léxicos para

Expresiones Traductores Lineales Cerradas

2.4 - Diseño un Generador de Analizadores Léxicos para

Expresiones Traductores Lineales

2.5 - Corrección de los algoritmos

2.5.1 – Corrección de las funciones auxiliares
2.5.2 – Corrección del algoritmo 1



iii

Vii

1
1
3
4
4
5
6
8
9
9
10
13
15
17

21
23
24

25
26
26
26
26
27
27
27
27
28
28
29
32
33
34

38

39
39
42


Un Generador de Analizadores Léxicos Traductores



Capítulo 3: Diseño de un Generador de Analizadores Léxicos

Traductores

3.1 - Decisiones de diseño
3.2 - Diseño de un Analizador Léxico Traductor

3.2.1 - Clases y relaciones del analizador
3.2.2 – Clases del Analizador
3.2.3 - Diagrama de Interacción correspondiente a next_token


3.3 - Diseño de un Generador de Analizadores Léxicos

Traductores

3.3.1 – Módulos del Generador
3.3.2 - Clases y Relaciones del Analizador


Capítulo 4: Definición del Lenguaje de Especificación

4.1 – Especificación del Generador

4.1.1 – Declaraciones

a - Definición de Atributos y Métodos del Usuario
b - Código de Inicialización del Código Usuario
c - Código de Fin de Archivo para el Analizador Léxico
d - Código de Error para el Analizador Léxico
e - Definición de Macros

4.1.2 - Reglas de las Expresiones Regulares Traductoras

Lineales

a - Acción Inicial
b - Expresión Regular Traductora Lineal
c - Acción Final
d - Gramática de las reglas de las Expresiones Regulares

Léxicos Traductores

5.3 - Reconocimiento de Errores


Capítulo 6: Generación del Código que Implementa el
Analizador Léxico Traductor Especificado

6.1 – Generación de las Estructuras de Datos
6.1.1 - Construcción del Arbol Sintáctico
6.1.2 – Cómputo de la función followpos
6.1.3 – Construcción del AFT de cada ETL

iv

Traductoras Lineales

4.1.3 - Código de Usuario
4.1.4 – Comentarios

4.2 – Gramática del Lenguaje de Especificación
4.3 - Un ejemplo de una especificación


Capítulo 5: Análisis Léxico y Sintáctico

5.1 - Análisis Léxico

5.1.1 - Lexemas y Tokens del Generador
5.1.2 - JLex: Un Generador de Analizadores Léxicos para

Java

5.1.3 - Especificación Jlex para el Generador de Analizadores

Léxicos Traductores

5.2 - Análisis Sintáctico

5.2.1 - CUP: un Generador de parsers LALR para Java
5.2.3 - Especificación CUP para el Generador de Analizadores

47

48
48
48
49
51

51

52
53

57
57
58
58
58
59
59
59
59

60
60
61
62

62
63
63
64

67
67
67
68

69

70
70
71

71

73

74
74
76
77



Indice

6.1.4 – Construcción del AFNλ
6.1.5 – Construcción del AFD
6.1.6 – Clase Table_expresions

6.2 – Generación del Código

6.2.1 – Código generado para el ejemplo

6.3 – Diagrama de Secuencia para Generar el Analizador


Capítulo 7: El Generador de Analizadores Léxicos Traductores dentro

del Entorno Japlage

7.1 - Esquema general de funcionamiento
7.2 - Generador de procesadores de lenguajes Japlage

7.2.1 - Clases del generador
7.2.2 - De análisis lexicográfico y sintáctico
7.2.3 - De análisis estático
7.2.4 - De generación de código
7.2.5 - De interface

7.3 – Interacción de las Herramientas Generadas


Conclusiones

Anexo 1: Especificación JLex para el Generador de

Analizadores Léxicos Traductores


Anexo 2: Especificación Cup para el Generador de

Analizadores Léxicos Traductores


Anexo 3: Notación utilizada en el diseño

3.1 - Descripción de clases
3.1 - Descripción de relaciones entre clases



Anexo 4: Código del Analizador Léxico Generado para el

Ejemplo del Capítulo 6


Anexo 5: Manual de Usuario
1 – Introducción
2 - Instalación y ejecución de JTLex
3 - Especificación JTLex

3.1 – Directivas de JTLex

3.1.1 – Definición de Atributos y Métodos del Usuario
3.1.2 – Código de Inicialización del Código Usuario
3.1.3 – Código de Fin de Archivo para el Analizador Léxico
3.1.4 – Código de Error para el Analizador Léxico
3.1.5 - Definición de Macros

3.2 - Reglas para Definir los símbolos del Lenguaje

3.2.1 - Acción Inicial
3.2.2 – Regla
3.2.3 - Acción Final
3.2.4 - Gramática de las Reglas

3.3 - Código de Usuario
3.4 – Comentarios en JTLex

4 – Analizadores Léxicos Generados

v

78
78
79
79
80
80


81
82
82
84
84
84
85
86
86

87

89


95



101
101
101

103



105
117
118
119
119
119
120
120
120
120
121
121
122
123
123
124
124
125

Un Generador de Analizadores Léxicos Traductores



5 - Un ejemplo de una especificación JTLex
6 – Gramática JTLex

Bibliografía

126
128



129



vi

Esta tesina constituye el último escalón de los autores para finalizar sus estudios de



Introducción



la carrera Licenciatura en Ciencias de la Computación y obtener su título de grado.


Un analizador léxico es un módulo destinado a leer caracteres del archivo de
entrada, donde se encuentra la cadena a analizar, reconocer subcadenas que correspondan a
símbolos del lenguaje y retornar los tokens correspondientes y sus atributos. Escribir
analizadores léxicos eficientes “a mano” puede resultar una tarea tediosa y complicada,
para evitarla se han creado herramientas de software – los generadores de analizadores
léxicos – que generan automáticamente un analizador léxico a partir de una especificación
provista por el usuario.


Puede asegurarse que la herramienta del tipo mencionado más conocida es Lex
[Lev92]. Lex es un generador de analizadores léxicos, originalmente incluido dentro del
ambiente de desarrollo de UNIX usando a C como lenguaje huésped y posteriormente
migrado a casi todas las plataformas y lenguajes. Otra herramienta que últimamente ha
tenido gran difusión es JLex – que usa a Java como lenguaje huésped y corresponde al
compilador de compiladores Cup – [App98][Ber97]; mientras que algunos compiladores
de compiladores actuales como Javacc [Javacc] y Eli [Com98] integran la especificación
del análisis léxico sin brindar un módulo específico.


Todas estas herramientas para generar analizadores léxicos permiten definir la
sintaxis de los símbolos mediante expresiones regulares, mientras que sus atributos deben
ser computados luego del reconocimiento de una subcadena que constituya un símbolo del
lenguaje. Una alternativa sería contar con una herramienta que permita computar los
atributos a medida que se reconocen dichas subcadenas aprovechando el mecanismo de
computo garantizado por el analizador léxico. De esta manera se libra al usuario del
control sobre la cadena a computar.


En el presente trabajo, motivado por lo expuesto en el párrafo anterior, se exponen
los puntos principales del diseño e implementación de un generador de analizadores
léxicos que, al contrario de los generadores existentes, permite la especificación conjunta
de la sintaxis y la semántica de los componentes léxicos siguiendo el estilo de los
esquemas de traducción. Para ello se basa en un nuevo formalismo, las Expresiones
Regulares Traductoras, introducido por Jorge Aguirre et al – Incorporando Traducción a
las Expresiones Regulares [Agu99] –.


Tanto su diseño como la especificación de los procedimientos con que el usuario
implementa la semántica asociada a los símbolos son Orientados a Objetos. El lenguaje de
implementación del generador es Java, como así también, el del código que genera y el
que usa el usuario para definir la semántica.


Esta herramienta se integra, como un generador de analizadores léxicos alternativo
al tradicional, a japlage; un entorno de generación de procesadores de lenguajes – en
particular de compiladores –, desarrollado en el grupo de investigación de Procesadores de

vii

Lenguajes♣, que permite la evaluación concurrente de cualquier Gramática de Atributos
Bien Formada. Los lenguajes de especificación brindados por el generador de analizadores
léxicos traductores y por el generador de analizadores sintácticos de japlage siguen el
estilo de Lex y Yacc respectivamente – que son prácticamente un estándar –.



Estructura de esta Tesis


Esta tesis se divide en dos partes – no es una división física sino lógica – bien
diferenciadas pero complementarias. La primera es netamente teórica y se refiere a los
generadores de analizadores léxicos mientra
  • Links de descarga
http://lwp-l.com/pdf14359

Comentarios de: Un generador de analizadores léxicos traductores (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad