1. PONTIFICIA UNIVERSIDAD CATÓLICA DEL ECUADOR SEDE IBARRA
COMPILADORES
Nombre: Rubén Pilca.
Contenido
Mediante un organizador gráfico defina las fases de la compilación........................................... 2
Qué operación realiza el análisis sintáctico. ................................................................................. 2
A qué se refiere la gramática, la regla de producciones, símbolos terminales y no terminales... 3
Defina un ejemplo de gramática................................................................................................... 3
Qué es un árbol de parsing y coloque un ejemplo........................................................................ 4
A qué se entiende por generación de código ............................................................................... 5
Qué es un árbol sintáctico............................................................................................................. 6
En qué consiste el análisis semántico ........................................................................................... 6
Cómo se obtiene el código intermedio......................................................................................... 7
Dentro de la compilación a que se refiere la optimización........................................................... 7
Presente un ejemplo de optimización de código.......................................................................... 7
Dentro del proceso de la compilación, qué es, para qué, y cómo se utiliza una tabla de
símbolos. ....................................................................................................................................... 8
2. Mediante un organizador gráfico defina las fases de la
compilación.
Qué operación realiza el análisis sintáctico.
Es la fase del analizador que se encarga de chequear el texto de
entrada en base a una
gramática dada. Y en caso de que el programa de entrada sea válido,
suministra el árbol
sintáctico que lo reconoce.
3. En teoría, se supone que la salida del analizador sintáctico es alguna
representación del
árbol sintáctico que reconoce la secuencia de tokens suministrada por el
analizador léxico.
En la práctica, el analizador sintáctico también hace:
• Acceder a la tabla de símbolos (para hacer parte del trabajo del
analizador
• semántico).
• Chequeo de tipos (del analizador semántico).
• Generar código intermedio.
• Generar errores cuando se producen.
En definitiva, realiza casi todas las operaciones de la compilación.
Este método de trabajo
da lugar a los métodos de compilación dirigidos por sintaxis.
A qué se refiere la gramática, la regla de producciones, símbolos
terminales y no terminales.
• Es una forma de describir un lenguaje formal.
• La gramática permite generar cadenas a partir de un símbolo inicial y
aplicando reglas que indican como ciertas combinaciones de
símbolos pueden ser reemplazadas usando otras combinaciones de
símbolos
• Una Gramática Formal G se compone de:
• Un conjunto finito de Símbolos No Terminales (N)
• Un conjunto finito de Símbolos Terminales (Σ)
• Un conjunto finito de Reglas de Producción (P). Cada regla tiene la
forma α → β, donde α y β pertenecen a (Σ U N)*, la parte izquierda
(α) debe contener al menos un símbolo no terminal
• Un símbolo de Inicio (S), que pertenece a N
Defina un ejemplo de gramática
4. El lenguaje de una gramática G = (N, Σ, P, S), se denota como L(G), y se define
como todas aquellas cadenas sobre Σ que pueden ser generadas indicando
en el símbolo S, y aplicando las reglas de producción P, hasta reemplazar
todos los símbolos no terminales.
G:
N = { S }
Σ = { 0, 1 }
P = { S → 0 S
S → 1 S
S → Є }
Cadenas generadas por G:
00000
010101
0001
Qué es un árbol de parsing y coloque un ejemplo.
Un parser podría ser definido como un programa que analiza una
porción de texto para determinar su estructura lógica: la fase de parsing en
un compilador toma el texto de un programa y produce un árbol sintáctico
que representa la estructura del programa.
Diferentes métodos para construir parsers, aquí presentaremos una
metodología que ha sido ampliamente aceptada para ser usada en un
contexto de programación funcional-perezosa.
Parsers son modelados como funciones. Parsers complejos son obtenidos a
partir de otros más simples haciendo un amplio uso de alto orden.
Características:
• Se pueden reconocer gramáticas ambiguas
• Backtracking
• Acciones semánticas
5. A qué se entiende por generación de código
La generación de código es una de las fases mediante el cual un
compilador convierte un programa sintácticamente correcto en una serie
de instrucciones a ser interpretadas por una máquina. La entrada en esta
fase viene representada, típicamente, por un Árbol Sintáctico, un Árbol de
Sintaxis Abstracta, o una Representación Intermedia; la máquina destino
puede ser un microprocesador o una máquina abstracta tal como una
máquina virtual o un lenguaje intermedio, legible por un humano.
Compiladores más sofisticados realizan múltiples traducciones en cadena
(pipelining) con el fin de poder construir código para múltiples plataformas
y evitar tener que construir todas las capas del compilador.
En términos más generales, la generación de código: es usada para
construir programas de una manera automática evitando que los
programadores tengan que escribir el código a mano. La generación de
código puede realizarse en tiempo de ejecución, Tiempo de carga, o Tiempo
6. de compilación. Los compiladores JIT son un ejemplo de generadores de
código.
Qué es un árbol sintáctico.
En lenguajes formales y lingüística computacional, un árbol de
sintaxis abstracta (AST), o simplemente un árbol de sintaxis, es una
representación de árbol de la estructura sintáctica simplificada del código
fuente escrito en cierto lenguaje de programación. Cada nodo del árbol
denota una construcción que ocurre en el código fuente. La sintaxis es
abstracta en el sentido que no representa cada detalle que aparezca en la
sintaxis verdadera. Por ejemplo, el agrupamiento de los paréntesis está
implícito en la estructura arborescente, y una construcción sintáctica tal
como IF condición THEN puede ser denotada por un solo nodo con dos
ramas.
Esto hace a los árboles de sintaxis abstracta diferentes de los árboles
de sintaxis concreta, llamados tradicionalmente árboles de parser, que son
a menudo construidos por la parte parser de la traducción del código fuente
y el proceso de compilación (a pesar quizás de un nombramiento no
intuitivo). Una vez construido, información adicional es agregada al AST por
procesamiento subsecuente, ej., análisis semántico.
En qué consiste el análisis semántico
Hemos aprendido cómo analizar un analizador construcciones
árboles en la sintaxis fase de análisis. La llanura de análisis árbol construido
en la fase en que no es, por lo general, de uso de un compilador, ya que no
llevan ningún tipo de información de cómo evaluar el árbol. La producción
libre de contexto gramática, lo que hace que las reglas del lenguaje, no
alojar cómo interpretarlos.
7. Cómo se obtiene el código intermedio.
El código intermedio se puede obtener mediante la localización de
espacio de memoria (en tiempo de compilación), este elimina la necesidad
de un nuevo compilador completo para cada máquina de la sección de
análisis mismo de todos los compiladores. El código intermedio tiende a ser
código independiente de la máquina. Por lo tanto, el generador de código
supone que tiene número ilimitado de almacenamiento en memoria
(registro) para generar el código.
Dentro de la compilación a que se refiere la optimización.
La optimización se refiere a una mejora mucho más avanzada del
código que ya se tiene, es decir transforma un código base en otro mucho
más eficiente, reduciendo uso de recursos y espacio en memoria, aunque
también se debe considerar que este viene a ser una nueva versión
Presente un ejemplo de optimización de código.
Implementando rutinas o algoritmos de alta calidad.
El análisis de la complejidad asintótica es una alternativa viable para medir
la eficiencia de un algoritmo con la cual es posible evaluar el ritmo de
crecimiento de una función. Sin embargo, no siempre es una métrica
adecuada.
El empleo de trasformaciones que aseguren la reducción de Ct y Ce permite
garantizar cierto grado de optimización en la generación de algoritmos y
programas más eficientes, a continuación, se mencionan alguna de estas
técnicas de optimización sobre un bloque básico de instrucciones:
1. Optimizaciones que reducen la estructura:
Reutilización de expresiones comunes: regularmente tiende a favorecer el
Ct
8. Dentro del proceso de la compilación, qué es, para qué, y cómo
se utiliza una tabla de símbolos.
La tabla de símbolos es un almacén donde se encuentran guardados
varios caracteres sean estos especiales o no, como por ejemplo “. , - _ * ¿
!”, la tabla de símbolos sirve para verificar en tiempo de compilación
algunas secciones de código para registrarlos como separadores,
operadores o símbolos especiales. La tabla de símbolos es una importante
estructura de datos creada y mantenida por los compiladores con el fin de
almacenar información acerca de la ocurrencia de diversas entidades, tales
como nombres de variables, nombres de funciones, objetos, clases,
interfaces, etc. esta se utiliza en el análisis y la síntesis de un compilador.