Documentos de Académico
Documentos de Profesional
Documentos de Cultura
(UCENM)
FACULTAD:
INGENERIA EN SISTEMA
ASIGNATURA:
COMPILADORES E INTERPRETES
CATEDRÁTICO:
ING. JOKSAN DAVID AMAYA MARTINEZ
INFORME:
PROYECTO FINAL: ANALIZADOR LEXICO
SEDE:
LA ESPERANZA, INTIBUCA
FECHA:
22/07/2022
COMPILADORES E INTERPRETES
INTEGRANTES
II
COMPILADORES E INTERPRETES
INTRODUCCION........................................................................................IV
1.1 OBJETIVOS...................................................................................1
1.1.1 GENERALES...........................................................................1
1.1.2 ESPECÍFICOS.........................................................................1
1.2 METODOLOGÍA.............................................................................2
1.2.1 FUENTES PRIMARIAS............................................................2
1.2.2 FUENTES SECUNDARIAS.....................................................3
1.2.3 CONSULTAS PROFESIONALES............................................3
1.3 MARCO REFERENCIAL................................................................4
1.3.1 FUNDAMENTOS TEÓRICOS..................................................4
1.3.2 DIAGRAMAS Y/O PROCESOS.............................................18
1.3.3 CONTENIDO..........................................................................19
1.3.4 ALCANCE..............................................................................34
1.3.5 IMPORTANCIA......................................................................35
2 CAPITULO II. SISTEMATIZACIÓN.....................................................36
3.1 CONCLUSIONES.........................................................................50
3.2 RECOMENDACIONES................................................................50
3.3 APÉNDICE...................................................................................51
3.4 GLOSARIO...................................................................................55
3.5 BIBLIOGRAFÍA............................................................................58
3.6 ANEXOS.......................................................................................59
III
COMPILADORES E INTERPRETES
INTRODUCCION
IV
COMPILADORES E INTERPRETES
1.1 OBJETIVOS
1.1.1 GENERALES
1.1.2 ESPECÍFICOS
1
COMPILADORES E INTERPRETES
1.2 METODOLOGÍA
2
COMPILADORES E INTERPRETES
3
COMPILADORES E INTERPRETES
4
COMPILADORES E INTERPRETES
5
COMPILADORES E INTERPRETES
Existen varias razones para separar las fases del análisis léxico y el
sintáctico:
6
COMPILADORES E INTERPRETES
Para describir los patrones que forman un token se suelen utilizar los
diagramas sintácticos (en caso de describirlos con lápiz y papel) y las
expresiones regulares (en el caso de usar una máquina de escribir).
Vamos a definir algunos de los términos utilizados en el análisis y en la
descripción de tokens.
xε=εx=x
7
COMPILADORES E INTERPRETES
Definimos s0 como ε.
Para i > 0 definimos si=s i−1 s . Es decir: s1=s , s2=ss , s3=sss , . . . etc.
DEFINICIONES REGULARES
La barra vertical aquí significa "OR", los paréntesis se usan para agrupar
sub expresiones, el asterisco significa "cero o más casos de" la expresión
entre paréntesis. Las llaves las utilizaremos con dos significados
diferentes: para indicar el conjunto compuesto por los strings del interior, y
otras veces para indicar que lo que hay dentro no hay que tomarlo
textualmente. El significado que utilicemos estará claro por el contexto.
Así {letra} indica un carácter alfabético y no la palabra “letra”. La
yuxtaposición indica concatenación.
8
COMPILADORES E INTERPRETES
Según todo esto la expresión regular anterior puede leerse: Una letra
seguida de 0 o más instancias de letras o dígitos.
- (r) es una expresión regular para indicar L(r). Es decir, podemos colocar
paréntesis extras alrededor de cualquier expresión regular que queramos.
9
COMPILADORES E INTERPRETES
la base de la definición (el caso base), mientras que las reglas del punto
tercero constituyen el paso recursivo.
DEFINICIONES REGULARES
d 1 →r 1
d 2 →r 2
...
d n →r n
10
COMPILADORES E INTERPRETES
dígito → 0|1|2|3|4|5|6|7|8|9
exponente → e("+"|"-")?{entero}
flotante → {entero}{fracción}?{exponente}?
Utilizamos las comillas "" para encerrar aquellos caracteres que pueden
tener un significado de meta carácter. Por ejemplo, “(+” podría ser
interpretado como 1 o más ocurrencias del paréntesis que abre. Si lo que
queremos es indicar el carácter “+” lo encerramos entre comillas así:
“("+"”. También utilizamos los paréntesis cuadrados y el guion para
abreviar una clase de caracteres. Por ejemplo 0|1|2|3|4|...|9 se puede
abreviar por [0-9]. Mientras que [a-z] representa la clase de todas las
letras minúsculas y constituye una abreviatura para a|b|c|...|z.
CONJUNTOS NO REGULARES
Los strings que se repiten tampoco pueden ser descritos por ninguna
Definición regular. Así que el conjunto formado por:
7. AUTÓMATAS FINITOS
11
COMPILADORES E INTERPRETES
Δ a b
q0 q1 q2
q1 q1 q2
12
COMPILADORES E INTERPRETES
q2 q1 q0
δ a b c
q0 q1 ε ε
q1 ε q1 q2
13
COMPILADORES E INTERPRETES
q2 ε ε ε
Mientras que los tokens influyen en las decisiones del análisis sintáctico,
los atributos influyen en la traducción de los tokens. Por lo general, en la
práctica se suele utilizar un único atributo para todo token de tipo ID. Este
atributo consiste en la cadena con su nombre. Por razones de diagnóstico
podemos estar interesados en el lexema de un identificador y en el
número de línea en el que se ha visto por primera vez. En la tabla de
símbolos pueden almacenarse ambas informaciones.
Token atributo
ID Cadena con el nombre del identificador e
ASING —
14
COMPILADORES E INTERPRETES
9. ERRORES LÉXICOS
15
COMPILADORES E INTERPRETES
hasta que se detecta un token que esté bien formado. Esta estrategia
puede que, a veces, lleve a confundir al analizador sintáctico, pero, por
otra parte, hay grandes probabilidades de que sea la más adecuada en un
ordenador interactivo.
16
COMPILADORES E INTERPRETES
17
COMPILADORES E INTERPRETES
Código fuente
Analizador léxico
Tokens
Analizador sintáctico
Árbol sintáctico
Tabla de
símbolos
Analizador semántico
Gestión de
errores Generador de código intermedio
Código de intermedio
Optimizador
Código optimizado
Dame el siguiente
componente léxico
(ecured, 2020)
1.3.3 CONTENIDO
Hasta ahora hemos visto como especificar los lenguajes asociados a las
diferentes categorías léxicas. Sin embargo, el analizador léxico no se
utiliza para comprobar si una cadena pertenece o no a un lenguaje. Lo
que debe hacer es dividir la entrada en una serie de componente léxicos,
realizando en cada uno de ellos determinadas acciones. Algunas de estas
acciones son: comprobar alguna restricción adicional (por ejemplo, que el
valor de un literal entero este dentro de un rango), preparar los atributos
del componente y emitir u omitir dicho componente. Así pues, la
especificación del analizador léxico debería incluir por cada categoría
léxica del lenguaje el conjunto de atributos y acciones asociadas. (Jaume,
s.f.)
Un ejemplo serıa:
Expresión
Categoría Acciones Atributos
Regular
Calcular valor
Comprobar
Entero [0–9] + Valor
rango
Emitir
Calcular valor
Comprobar
Real [0–9] +\.[0–9] + Valor
rango
Emitir
Identificador [a–zA–Z][a–zA–Z0–9] Copiar lexema Lexema
19
COMPILADORES E INTERPRETES
∗ emitir
Asignación := Emitir
Rango \.\. Emitir
Blanco [ \t\n] + Omitir
eof Emitir
LA ESTRATEGIA AVARICIOSA
20
COMPILADORES E INTERPRETES
De las MDDs es muy similar al de los AFDs, las diferencias son dos:
además de cadenas completas, aceptan prefijos de la entrada y tienen
asociadas acciones a los estados finales. Estudiaremos la construcción a
partir del ejemplo de especificación anterior. Empezamos por añadir a
cada expresión regular un símbolo especial: (Jaume, s.f.)
21
COMPILADORES E INTERPRETES
eof
Por construcción, los únicos arcos que pueden llegar a un estado final
serán los etiquetados con símbolos especiales. Lo que hacemos ahora es
eliminar los estados finales (en realidad solo habría uno) y los arcos con
símbolos especiales. Como nuevos estados finales dejamos aquellos
desde los que partían arcos con símbolos especiales. A estos estados
asociaremos las acciones correspondientes al reconocimiento de las
categorías léxicas. Nuestro ejemplo queda como se ve en la figura 2.
(Jaume, s.f.)
22
COMPILADORES E INTERPRETES
TRATAMIENTO DE ERRORES:
23
COMPILADORES E INTERPRETES
Otros errores que se detectan en el nivel léxico son aquellos que solo
pueden encontrarse al ejecutar las acciones asociadas a las categorías.
Un ejemplo es el de encontrar números fuera de rango. En principio es
posible escribir una expresión regular para, por ejemplo, los enteros de 32
bits. Sin embargo, esta expresión resulta excesivamente complicada y se
puede hacer la comprobación fácilmente mediante una simple
comparación. Esta es la estrategia que hemos seguido en nuestro
ejemplo. Aquí sí que es de esperar un mensaje de error bastante
informativo y una buena recuperación: basta con emitir la categoría con
un valor predeterminado (por ejemplo, cero). (Jaume, s.f.)
El fin de fichero:
24
COMPILADORES E INTERPRETES
25
COMPILADORES E INTERPRETES
Expresión
Categoría Acciones Atributos
regular
if if emitir
then then emitir
else else emitir
Copiar lexema
identificador [a–z] + lexema
emitir
26
COMPILADORES E INTERPRETES
Ahora que sabemos cómo especificar el analizador para estos casos, nos
queda ver la manera de construir la MDD. En principio, podemos pensar
en aplicar directamente la construcción de la MDD sobre esta
especificación. Sin embargo, este método resulta excesivamente
complicado. Por ello veremos otra estrategia que simplifica la
construcción de la MDD con el precio de algunos cálculos extra. Para ver
lo complicada que puede resultar la construcción directa, volvamos al
caso en que sólo tenemos identificadores formados por letras minúsculas
y una palabra reservada: if. Empezamos por escribir la expresión regular
con las marcas especiales: (Jaume, s.f.)
27
COMPILADORES E INTERPRETES
Una función que indique cual es el ´ultimo componente leído. Esta función
no avanza la lectura.
28
COMPILADORES E INTERPRETES
Una función (o método) para averiguar en qué línea del fichero nos
encontramos. Esto facilita la emisión de mensajes de error. Para dar
mejores mensajes, puede también devolver el carácter dentro de la línea.
EL FLUJO DE ENTRADA
29
COMPILADORES E INTERPRETES
30
COMPILADORES E INTERPRETES
31
COMPILADORES E INTERPRETES
Expansión de macros.
Inclusión de ficheros.
VENTAJAS:
32
COMPILADORES E INTERPRETES
Se hace más portátil el sistema puesto múltiples estados finales que las
peculiaridades del alfabeto de (mutuamente excluyentes). entrada se
pueden restringir al analizador léxico. o Cambios de estados: condiciones
Si hay dos o más patrones que concuerdan con el lexema más largo, se
elige el primer patrón de la lista (¡Prioridad!!!).
33
COMPILADORES E INTERPRETES
1.3.4 ALCANCE
34
COMPILADORES E INTERPRETES
1.3.5 IMPORTANCIA
35
COMPILADORES E INTERPRETES
Acordamos lo siguiente:
36
COMPILADORES E INTERPRETES
37
COMPILADORES E INTERPRETES
Los lexemas considerados como error serán marcados con color rojo en
el editor de texto y también en la tabla de símbolos.
Los comentarios serán marcados de color verde y estos son omitidos por
el analizador léxico por lo tanto no deben aparecer en la tabla de
símbolos. Para escribir comentarios definimos // toda la línea /*todo
incluidos los saltos de línea */
DESARROLLO DE LA APLICACIÓN.
Ventana de Lenguaje X
38
COMPILADORES E INTERPRETES
Pestaña del lenguaje compuesta por una serie de richbox para ingresar
los elementos de cada componente léxico y el botón de limpiar.
El código hará que tome los elementos de cada richtextbox y los pase a
un arreglo en tiempo real también, entonces esta operación se mandara a
llamar en el evento de cambio de texto de cada uno, cada que se pulse o
ingrese un carácter se ejecutara este método, cuando nos referimos a
operación nos referimos a que se eliminaran los espacios y saltos de línea
similar a la parte del texto de entrada, y tomara únicamente los caracteres
de cada línea, luego estos caracteres serán enviados a un arreglo, para
39
COMPILADORES E INTERPRETES
Estos métodos son los que se encargan de extraer los elementos de los
richtextbox y almacenarlos en un arreglo para que luego sean
comparados con los lexemas ingresados en la entrada de texto.
40
COMPILADORES E INTERPRETES
41
COMPILADORES E INTERPRETES
Elimina los espacios y los saltos de línea (aún falta que omita los
comentarios) y manda los lexemas ingresados a otro método para que
se consulte que tipo de token va a devolver y también su código (aún falta
también). Hay que mencionar que estos métodos son invocados en el
evento de cambio de texto.
42
COMPILADORES E INTERPRETES
43
COMPILADORES E INTERPRETES
Terminar las ultimas partes para que reconozca los otros elementos del
lenguaje y establecer las validaciones al ingresar los elementos, mejorar
la interfaz, limpiar el código, agregar la función de los colores, agregar
guías informativas para el usuario y la sección acerca de.
44
COMPILADORES E INTERPRETES
2.2 RESULTADOS
45
COMPILADORES E INTERPRETES
46
COMPILADORES E INTERPRETES
Definición de actividades
Elaboración de informe
47
COMPILADORES E INTERPRETES
48
COMPILADORES E INTERPRETES
Correcciones de informe
49
COMPILADORES E INTERPRETES
50
COMPILADORES E INTERPRETES
3 CAPITULO II.
3.1 CONCLUSIONES
3.2 RECOMENDACIONES
51
COMPILADORES E INTERPRETES
3.3 APÉNDICE
Temas adicionales
- Diagramas sintácticos
- Diagrama de transiciones
- Analizador sintáctico
- Analizador Semántico
Diagramas Sintácticos
52
COMPILADORES E INTERPRETES
Diagrama de transiciones
53
COMPILADORES E INTERPRETES
Analizador sintáctico
Analizador semántico
54
COMPILADORES E INTERPRETES
55
COMPILADORES E INTERPRETES
3.4 GLOSARIO
ATRIBUTO: Características propias de cada token, por tanto, se les
denomina atributos del token.
56
COMPILADORES E INTERPRETES
57
COMPILADORES E INTERPRETES
58
COMPILADORES E INTERPRETES
3.5 BIBLIOGRAFÍA
59
COMPILADORES E INTERPRETES
3.6 ANEXOS
60
COMPILADORES E INTERPRETES
61
COMPILADORES E INTERPRETES
62
COMPILADORES E INTERPRETES
63