Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Facultad de Ingeniería
Ingeniería de Sistemas
SEXTO SEMESTRE
SYLLABUS DE LA ASIGNATURA
DISEÑO Y DESARROLLO DE COMPILADORES
U N I V E R S I D A D D E A Q U I N O B O L I V I A
1
FACULTAD DE INGENIERIA
VISION DE LA UNIVERSIDAD
MISION DE LA UNIVERSIDAD
U N I V E R S I D A D D E A Q U I N O B O L I V I A
2
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
3
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
4
FACULTAD DE INGENIERIA
1° evaluación parcial
Fecha
U N I V E R S I D A D D E A Q U I N O B O L I V I A
5
FACULTAD DE INGENIERIA
Nota
Examen final
2° evaluación parcial Fecha
Fecha Nota
Nota
APUNTES
U N I V E R S I D A D D E A Q U I N O B O L I V I A
6
FACULTAD DE INGENIERIA
WORK PAPER # 1
TITULO: Traductores
FECHA DE ENTREGA:
Introducción
Uno de los principales mecanismos de Programabásico
siguientedefigura muestra el esquema
Programa de salida
comunicación entre un ordenador y una que compone a un compilador/intérprete. Lenguaje
entrada escrito en escrito en
Lenguaje Fuente Destino
persona viene dado por el envío y recepción TRADUCTORES
de mensajes de tipo textual: el usuario escribe
una orden mediante el teclado, y el ordenador
la ejecuta devolviendo como resultado un Mensaje de
Errores
mensaje informativo sobre las acciones
llevadas a cabo. Esta comunicación solo es
posible a través de traductores que son los
encargados de traducir las diferentes ordenes
que el usuario le da al computador para que
este los pueda entender y ejecutar.
Concepto de traductor
Un traductor se define como un programa que Tipos de traductores
traduce o convierte desde un texto o Desde los orígenes de la computación, ha
programa escrito en un lenguaje fuente hasta existido un abismo entre la forma en que las
un texto o programa equivalente escrito en un personas expresan sus necesidades y la
lenguaje destino produciendo, si cabe, forma en que un ordenador es capaz de
mensajes de error. Los traductores engloban interpretar instrucciones. Los traductores han
tanto a los compiladores (en los que el intentado salvar este abismo para facilitarle el
lenguaje destino suele ser código máquina) trabajo a los humanos, lo que ha llevado a
como a los intérpretes (en los que el lenguaje aplicar la teoría de autómatas a diferentes
destino está constituido por las acciones campos y áreas concretas de la informática,
atómicas que puede ejecutar el intérprete). La
U N I V E R S I D A D D E A Q U I N O B O L I V I A
7
FACULTAD DE INGENIERIA
WORK PAPER # 2
FECHA DE ENTREGA:
U N I V E R S I D A D D E A Q U I N O B O L I V I A
8
FACULTAD DE INGENIERIA
Los principios y técnicas que se usan en la código máquina relocalizable, en el cual las
escritura de compiladores se pueden emplear direcciones serán relativas a ciertas
en muchas otras áreas. Se basan en los posiciones de origen, y quizás algunas
conceptos de teoría de autómatas y lenguajes llamadas a rutinas no estén resueltas.
formales que se están exponiendo en la parte
teórica, y constituyen un campo de aplicación Finalmente, el editor de carga y enlace (o
práctica bastante directo. “montador”, o “link”) resolverá las llamadas a
rutinas, incluyéndolas a partir de otros objetos
Objetivo de un compilador de biblioteca si procede, y obtendrá
El objetivo es, básicamente es traducir un direcciones absolutas, de modo que ya se
programa (o texto) escrito en un lenguaje dispondrá del código máquina absoluto
“fuente”, que llamaremos programa fuente, en ejecutable.
un equivalente en otro lenguaje denominado
“objeto”, al que llamaremos programa o Programa fuente
código objeto. Si el programa fuente es
correcto (pertenece al lenguaje formado por
los programas correctos), podrá hacerse tal Analizador
léxico
traducción; si no, se deseará obtener un
mensaje de error (o varios) que permita
determinar lo más claramente posible los
orígenes de la incorrección. Analizad
or
sintáctic
La traducción podrá hacerse en dos formas: o
interpretación: la traducción se hace “frase a
frase” tabla Manejador
compilación: la traducción se hace del texto de símbolos Analizador de errores
completo semántico
U N I V E R S I D A D D E A Q U I N O B O L I V I A
9
FACULTAD DE INGENIERIA
Estructura de un compilador
Cuando se ha hablado de programas
equivalentes en distintos lenguajes (fuente y
objeto), nos
referimos a “tener el mismo significado”. Por CUESTIONARIO WORK PAPER No. 2
ello, la compilación requiere dos grandes
partes o tareas: Describa brevemente y de un ejemplo
análisis : en la que se analiza el programa especifico de:
fuente para dividirlo en componentes y 1. Analizador Léxico
extraer de algún modo el significado.
2. Analizador Sintáctico
síntesis : en la que el significado obtenido
se escribe en el lenguaje objeto 3. Analizador Semántico
U N I V E R S I D A D D E A Q U I N O B O L I V I A
10
FACULTAD DE INGENIERIA
WORK PAPER # 3
FECHA DE ENTREGA:
U N I V E R S I D A D D E A Q U I N O B O L I V I A
11
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
12
FACULTAD DE INGENIERIA
11. Escribe un programa que sustituya las Se pretende construir una calculadora que
palabras reservadas while, do, if, else a evalúe expresiones de aritmética simple tales
mayúsculas. Debe generar un fichero como:
igual al de la entrada donde se han 10 - (((( 2 - ( 4 - 2) - 30 ) + 2 ) - 10 ) - 2 )
cambiado esas palabras reservadas. ((( 100 * 10 ) - 20 ) - ( 30 * 2 ))
12. Supongamos que hay una pagina web 16. Se requiere construir un
donde se quiere cambiar todas las analizador léxico de este lenguaje.
referencias http:nnbugs.uv.es Por Para ello se pide:
http:nninformatica.uv.es. Escribe un dt que 17. Especificar la colección de
lo haga de forma automática. tokens del analizador indicando su
tipo y lexema
HTML es el nombre del lenguaje que se utiliza 18. Construir el DT que reconozca
especificar contenidos Web. Su el conjunto de tokens
funcionamiento se basa en utilizar una serie
de etiquetas que indican de qué forma se Dado el siguiente código fuente:
debe representar dicho texto en pantalla. program problema2;
Especificar un analizador léxico que function F2 (uno, dos: integer) {
reconozca los elementos lexicográficos que function F1 (uno, dos: integer) {
var a, b: integer;
aparecen en el siguiente ejemplo:
a:= 5;
<HTML>
b:= 10;
<HEAD>
b:= ((a * uno) + (b * dos))
<TITLE> Ejemplo de compiladores
return b;
</TITLE>
}
</HEAD>
var c, d: integer;
<BODY>
c:= uno;
<!-- Esto es un comentario -->
d:= dos;
<HR>
return ( (c + F1(c, d)) * (d + F1(3, 4))
<H1>Titulo1</H1>
}
<H2>Titulo2</H2>
var uno: integer;
<H3>Titulo3</H3>
U N I V E R S I D A D D E A Q U I N O B O L I V I A
13
FACULTAD DE INGENIERIA
begin =
uno := 1; :
uno := F2 (uno, 1); :=++
end. :=--
Se pide: NUM
19. Escribir la estructura de los VAR
tokens que debe emitir el analizador Donde:
léxico NUM = Números enteros sin signo.
20. Determinar los patrones léxicos Ejm: 10, 256
(expresiones regulares) de cada uno VAR = Variables. Deben comenzar por una
21. Especificar el autómata que letra, a la que puede seguir un número
reconoce el conjunto de tokens indeterminado de letras o números (var12, a).
Se pide:
Dada la siguiente sentencia: 28. Escribir las expresiones
if (a > ((b *3) / 4)) {
regulares que describen los
a := (b * 4) + 1000.0; }
elsif (a = ((b*3.4) /4)) { componentes VAR y NUM.
b := 100; 29. Dibujar el diagrama de
} transiciones determinista para el
else { analizador.
a := 100.0; 30. Generar la tabla de
} transiciones a partir del diagrama del
apartado anterior.
Se pide: 31. Indicar los tokens reconocidos
por el analizador para la siguiente
22. Escribir la estructura de los cadena de entrada:
tokens que debe emitir el analizador a:=+x2=57+2y::=---
léxico
23. Determinar los patrones léxicos Diseñar un analizador léxico que reconozca
(expresiones regulares) de cada uno los siguientes componentes:
24. Especificar el autómata que
reconoce el conjunto de tokens TOKEN DESCRIPCIÓN EJEMPLO
Identificadores.
Se desea especificar un analizador léxico que Comienzan por una
reconozca sentencias para asignar letra, a la que var12, a
ID
pueden seguir
expresiones matemáticas (con sumas (+), caracteres
restas (-), productos (*), divisiones (/), alfanuméricos
potencias (^) y paréntesis). Por ejemplo: Números enteros
ENTERO -5, 30, +77
• A := 3 * (2 – 5^3) con o sin signo
• B3 := 4 – C+ 8 / (6 – D) Números reales
con o sin signo. No
Se pide: se admiten
25. Indicar la estructura de los -0.5, 45.2, +0.2
REAL construcciones
tokens como .2 ó
26. Expresar los patrones léxicos 50.
de cada uno de ellos
Números enteros o
27. Construir el scanner que EXP reales con signo y
4.2e-3, 50e20,
reconoce el lenguaje 3e+2, -1e+10
con exponente
U N I V E R S I D A D D E A Q U I N O B O L I V I A
14
FACULTAD DE INGENIERIA
N
Símbolo‘/’ Se pide:
OP_DIV -
35. Escribir las expresiones
regulares para VAR, FLOAT y EXP
Se pide:
36. Dibujar el reconocedor para
32. Expresiones regulares para ID,
este analizador léxico utilizando la
ENTERO, REAL y EXP.
representación elegida en el
33. Dibujar el diagrama de
apartado anterior
transiciones determinista para el
37. Indicar los tokens que
analizador.
reconocerá el analizador para las
34. Indicar los tokens reconocidos
siguientes cadenas de entrada:
por el analizador para las siguientes
resultado=34e2+33-2.e2
entradas:
vertice=25.3-2e-2e-2
área=12e2/50e-x
resultado2=var/3.3/2e-10
38. Escribir un analizador léxico
que reciba como entrada un texto y
Se quiere diseñar un analizador léxico que
muestre como salida el número de
reconozca los siguientes símbolos:
caracteres, el número de palabras y el
número de líneas que hay en el texto
U N I V E R S I D A D D E A Q U I N O B O L I V I A
15
FACULTAD DE INGENIERIA
WORK PAPER # 4
FECHA DE ENTREGA:
U N I V E R S I D A D D E A Q U I N O B O L I V I A
16
Gestor de Tabla de
errores símbolos
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
17
FACULTAD DE INGENIERIA
E id num E + E E * E ( E ) - E
Supongamos la sentencia id + id * id
U N I V E R S I D A D D E A Q U I N O B O L I V I A
18
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
19
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
20
FACULTAD DE INGENIERIA
FECHA DE ENTREGA:
U N I V E R S I D A D D E A Q U I N O B O L I V I A
21
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
22
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
23
FACULTAD DE INGENIERIA
WORK PAPER # 6
FECHA DE ENTREGA:
U N I V E R S I D A D D E A Q U I N O B O L I V I A
24
FACULTAD DE INGENIERIA
Para la entrada 2 3 2
Desventajas: los métodos son difıciles de
Conflicto reduce-reduce: comprender, de implementar a mano y de
Supongamos una sencilla gramática que realizar una traza. Necesidad de usar
permite generar sentencias que son bien generados automáticos de analizadores
llamadas a procedimientos o asignaciones. sintácticos LR. Por ejemplo: Bison (para
S id | V:=E Linux) y Yacc (yet another compiler compiler)
V id para Unix.
E id | num
Dentro del análisis sintáctico LR se distinguen
Para la entrada suma := 3, equivalente a los cuatro técnicas:
componentes léxicos: id := num, tenemos las El método LR(0). Es el más fácil de
posibilidades implementar, pero el que tiene menos
poder de reconocimiento. No usa la
información del sımbolo de preanalisis
para decidir la acción a realizar.
El método SLR(1) (del ingles Simple LR).
Usa ya un sımbolo de preanalisis.
El método LR(1). Es el mas poderoso y
costoso. El tamaño del autómata a pila
para el reconocimiento se incrementa
considerablemente.
El método LALR(1) (del ingles Look-
Ahead LR, con sımbolo de anticipación).
Es una versión simplificada del LR(1), que
combina el coste en tamaño (eficiencia)
GRAMATICAS LR de los métodos SLR con la potencia del
Los métodos de análisis sintáctico LR LR(1).
permiten reconocer la mayorıa de las Jerarquıa de las gramáticas:
construcciones de los lenguajes de
programación. Son métodos muy potentes,
con mayor poder de reconocimiento que los
métodos LL (Las gramáticas LL son un
subconjunto de las gramáticas LR).
U N I V E R S I D A D D E A Q U I N O B O L I V I A
25
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
26
FACULTAD DE INGENIERIA
terminal X desde la entrada a la cima de la del no-terminal al que se quiere reducir (sino
pila. En el segundo la interpretación es más seria un error).
complicada. Significa que hemos reconocido
un no-terminal como consecuencia de haber Se dice que una gramática es SLR(1) si la
hecho una reducción, por tanto tenemos que aplicación de las reglas anteriores no son
haber reconocido ese no terminal ambiguas. Es decir, una gramática es SLR(1)
previamente, por tanto tenemos que añadir sii se cumple para cada estado una de las
transiciones a estados que indiquen que siguientes condiciones:
vamos a reconocer ese no-terminal. además, Para cada item de la forma A X en
como no consumimos ningún token de la S con X terminal, no existe un item
entrada son - transiciones. completo B en S, con X
SIG(B). Si no tendrıamos un conflicto
ANALISIS LR(0) desplaza-reduce.
El análisis LR(0) es el más sencillo de los Para cada par de items completos A
métodos ascendentes. No usa información de y B en S, entonces
la entrada, el sımbolo de preanalisis, para SIG(A)SIG(B)=. De lo contrario se
decidir la acción a realizar. produciría un conflicto reduce-reduce.
Se dice que una gramática es LR(0) si la El aspecto de la tabla de análisis sintáctico
aplicación de las reglas anteriores no son cambia respecto al análisis LR(0), puesto que
ambiguas, es decir, que si un estado contiene un estado puede admitir desplazamientos o
un item de la forma A , entonces no reducciones dependiendo del token en la
puede contener cualquier otro item. entrada. Por tanto, cada entrada debe tener
una etiqueta de desplazamiento o reducción.
Si se produjera eso aparecerıan conflictos. En ANALISIS LR(1)
efecto: Para solucionar este problema se introduce el
Si tuviera además un item de la forma A método más general que existe, el llamado
X con X terminal tendrıamos un análisis sintáctico LR(1). Este es el método
conflicto desplaza-reduce. más poderoso que existe, a costa de que se
Si tuviera además un item de la forma B incrementa la complejidad (un factor de 10
, se producirıa un conflicto reduce- respecto a los métodos que usan el AFD de
reduce. items LR(0)).
Por tanto, una gramática es LR(0) sii cada
estado es bien un estado de desplazamiento Las limitaciones del método LR(0) y SLR(1)
(contiene solo items que indican desplazar) o radican en que tienen en cuenta el sımbolo de
bien un estado de reducción (contiene un preanalisis después de la construcción del
único item completo). AFD de items LR(0), que por sı misma ignora
ANALISIS SLR(1) los sımbolos siguientes en la entrada.
Este tipo de análisis usa el AFD construido a Definición de Elemento LR(1) y
partir de elementos LR(0) y usa el token de la Construcción del autómata finito de
cadena de entrada para determinar el tipo de elementos LR(1)
acción a realizar. Este método consulta el
token de la entrada antes de realizar un Un elemento de análisis sintáctico LR(1) de
desplazamiento para tener seguro que existe una gramática G, es un par consistente de un
una transición correspondiente en el estado item LR(0) y un sımbolo de preanalisis.
en el que se encuentra el analizador (sino [A , a]
serıa un error) y en el caso de que se tenga siendo A un item LR(0) y a el token de
que hacer una reducción se comprueba que preanalisis.
el token actual pertenece al conjunto de SIG
U N I V E R S I D A D D E A Q U I N O B O L I V I A
27
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
28
FACULTAD DE INGENIERIA
WORK PAPER # 6
FECHA DE ENTREGA:
U N I V E R S I D A D D E A Q U I N O B O L I V I A
29
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
30
FACULTAD DE INGENIERIA
E E +T\E - T\T
E T *F\F
F (E) \ num
Tipos de atributos
U N I V E R S I D A D D E A Q U I N O B O L I V I A
31
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
32
FACULTAD DE INGENIERIA
U N I V E R S I D A D D E A Q U I N O B O L I V I A
33
PROGRAMA DE CONTROL DE CALIDAD
DIF´s # 1
http://148.204.45.33:8080/cursos/compiladores%20Ago-Dic2003/compilers.htm
DIF´s # 2
En la mayoría de los casos no hace falta optimizar el código, pero la optimización de código es
necesaria en programas de calculo intensivo que efectúan millones de operaciones en amplios
intervalos de tiempo, también es necesario desarrollar programas que puedan dar respuestas de
forma extremadamente rápida antes unos determinados datos de entrada, para ello debemos conocer
las técnicas que existen para llevar a cabo la optimización del código fuente sin intervención del
usuario programador.
Para este tema analicé los siguientes puntos: