Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Compiladores Informe Basico

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

1.- ¿Qué se conoce como notación post-fija?

La notación post-fija o notación polaca inversa (en inglés, Reverse Polish Notation,
o RPN), es una forma alternativa de escribir expresiones matemáticas. Por ejemplo,
la expresión "20 - (4 + 3) * 2" en RPN es "20 4 3 + 2 * -".

Para evaluar una expresión en RPN, usamos una lista auxiliar (inicialmente vacía)
y recorremos la expresión de izquierda a derecha. Cada vez que encontramos un
número, lo añadimos a la lista auxiliar. Cuando encontramos un operador, retiramos
los dos números que hay al principio de la pila, utilizamos el operador con ellos y
los quitamos de la lista y le añadimos el resultado. Cuando alcancemos el final de
la expresión, debemos tener un solo número en la lista auxiliar si la expresión estaba
bien formada, y éste representa el resultado de la expresión. Por ejemplo, la
evaluación de RPN "20 4 3 + 2 * -" es la siguiente:
"" []
"20" [20]
"20 4" [4, 20]
"20 4 3" [3, 4, 20]
"20 4 3 +" [7, 20]
"20 4 3 + 2" [2, 7, 20]
"20 4 3 + 2 *" [14, 20]
"20 4 3 + 2 * -" [6]
2.- ¿Qué y cuáles son los Programas que manipulan fuentes?

Muchas herramientas de software que manipulan programas fuente realizan


primero algún tipo de análisis. Algunos ejemplos de tales herramientas son:

a. Editores de estructuras. Un editor de estructuras toma como entrada una


secuencia de órdenes para construir un programa fuente. El editor de
estructuras no sólo realiza las funciones de creación y modificación de textos
de un editor de textos ordinario, sino que también analiza el texto del
programa, imponiendo al programa fuente una estructura jerárquica
apropiada. De esa manera, el editor de estructuras puede realizar tareas
adicionales útiles para la preparación de programas.

Por ejemplo, puede comprobar si la entrada está formada correctamente,


puede proporcionar palabras clave de manera automática (por ejemplo,
cuando el usuario escribe while, el editor proporciona el correspondiente do
y le recuerda al usuario que entre las dos palabras debe ir un condicional) y
puede saltar desde un begin o un paréntesis izquierdo hasta su
correspondiente end o paréntesis derecho. Además, la salida de tal editor
suele ser similar a la salida de la fase de análisis de un compilador.
b. Impresoras estéticas. Una impresora estética analiza un programa y lo
imprime de forma que la estructura del programa resulte claramente visible.
Por ejemplo, los comentarios pueden aparecer con un tipo de letra especial,
y las proposiciones pueden aparecer con una indentación proporcional a la
profundidad de su anidamiento en la organización jerárquica de las
proposiciones.

c. Verificadores estáticos. Un verificador estático lee un programa, lo analiza


e intenta descubrir errores potenciales sin ejecutar el programa. La parte de
análisis a menudo es similar a la que se encuentra en los compiladores de
optimización. Así, un verificador estático puede detectar si hay partes de un
programa que nunca se podrán ejecutar o si cierta variable se usa antes de
ser definida. Además, puede detectar errores de lógica, como intentar utilizar
una variable real como apuntador, empleando las técnicas de verificación de
tipos.

d. Intérpretes. En lugar de producir un programa objeto como resultado de una


traducción, un intérprete realiza las operaciones que implica el programa
fuente. Para una proposición de asignación, por ejemplo, un intérprete podría
construir un árbol como el de la figura 1 y después efectuar las operaciones
de los nodos conforme “recorre” el árbol. En la raíz descubriría que tiene que
realizar una asignación, y llamaría a una rutina para evaluar la expresión de
la derecha y después almacenaría el valor resultante en la localidad de
memoria asociada con el identificador posición.

En el hijo derecho de la raíz, la rutina descubriría que tiene que calcular la


suma de dos expresiones. Se llamaría a sí misma de manera recursiva para
calcular el valor de la expresión velocidad*60. Después sumaría ese valor de
la variable inicial. Muchas veces los intérpretes se usan para ejecutar
lenguajes de órdenes, pues cada operador que se ejecuta en un lenguaje de
órdenes suele ser una invocación de una rutina compleja, como un editor o
un compilador. Del mismo modo algunos lenguajes de “muy alto nivel”,
normalmente son interpretados, porque hay muchas cosas sobre los datos,
como el tamaño y la forma de las matrices, que no se pueden deducir en el
momento de la compilación.

e. Compiladores. Tradicionalmente, se concibe un compilador como un


programa que traduce un programa fuente, como FORTRAN, al lenguaje
ensamblador o de máquina de algún computador.
Sin embargo, hay lugares, al parecer, no relacionados donde la tecnología
de los compiladores se usa con regularidad. La parte de análisis de cada uno
de los siguientes ejemplos es parecida a la de un compilador convencional.a)
Formadores de textos. Un formador de textos toma como entrada una cadena
de caracteres, la mayor parte de la cual es texto para componer, pero alguna
incluye órdenes para indicar párrafos, figuras o estructuras matemáticas,
como subíndices o superíndices.b) Compiladores de circuitos de silicio. Un
compilador de circuitos de silicio tiene un lenguaje fuente similar o idéntico a
un lenguaje de programación convencional.

Sin embargo las variables del lenguaje no representan localidades de


memoria, sino señales lógicas (0 o 1) o grupos de señales en un circuito de
conmutación. La salida es el diseño de un circuito en un lenguaje
apropiado.c) Intérpretes de consultas. Un intérprete de consultas traduce un
predicado que contiene operadores relacionales y boléanos a órdenes para
buscar en una base de datos registros que satisfagan ese predicado.

3.- Programas relacionados al proceso de compilación

Un compilador es un programa informático que traduce un programa escrito en un


lenguaje de programación a otro lenguaje de programación, generando un
programa equivalente que la máquina será capaz de interpretar. Hay diferentes
tipos:

 Compiladores cruzados: generan código para un sistema distinto del que


están funcionando.
 Compiladores optimizadores: realizan cambios en el código para mejorar su
eficiencia, pero manteniendo la funcionalidad del programa original.
 Compiladores de una sola pasada: generan el código máquina a partir de
una única lectura del código fuente.
 Compiladores de varias pasadas: necesitan leer el código fuente varias veces
antes de poder producir el código máquina.
 Compiladores JIT (Just In Time): forman parte de un intérprete y compilan
partes del código según se necesitan.

Entre los programas que utilizan el proceso de compilación están: C, C++, Pascal,
FORTRAN, COBOL, etc.
4.- Preprocesadores

Un preprocesador es un programa separado que es invocado por el compilador


antes de que comience la traducción real. Un preprocesador de este tipo puede
eliminar los comentarios, incluir otros archivos y ejecutar sustituciones de macros.

Los preprocesadores pueden ser requeridos por el lenguaje (como en C) o pueden


ser agregados posteriores que proporcionen facilidades adicionales. Los
preprocesadores producen la entrada para un compilador, y pueden realizar las
funciones siguientes:

 Procesamiento de macros. Un preprocesador puede permitir a un usuario


definir macros, que son abreviaturas de construcciones más grandes.

 Inclusión de archivos. Un preprocesador puede insertar archivos de


encabezamiento en el texto del programa. Por ejemplo, el preprocesador de
C hace que el contenido del archivo <global.h> reemplace a la proposición
#include <global.h> cuando procesa un archivo que contenga a esa
proposición.

 Preprocesadores "racionales". Estos preprocesadores enriquecen los


lenguajes antiguos con recursos más modernos de flujo de control y de
estructuras de datos. Por ejemplo, un preprocesador de este tipo podría
proporcionar al usuario macros incorporadas para construcciones, como
proposiciones “while” o “if”, en un lenguaje de programación que no las tenga.

 Extensiones a lenguajes. Estos preprocesadores tratan de crear


posibilidades al lenguaje que equivalen a macros incorporadas. Por ejemplo,
el lenguaje “Equel” es un lenguaje de consulta de base de datos integrado en
C. El preprocesador considera las proposiciones que empiezan con ## como
proposiciones de acceso a la base de datos, sin relación con C, y se traducen
a llamadas de procedimiento a rutinas que realizan el acceso a la base de
datos.

5.- Ensambladores

Ensamblador, o assembler (en inglés assembly language y la abreviación asm), es


un lenguaje de programación de bajo nivel. Consiste en un conjunto de mnemónicos
que representan instrucciones básicas para los computadores, microprocesadores,
microcontroladores y otros circuitos integrados programables.
Implementa una representación simbólica de los códigos de máquina binarios y
otras constantes necesarias para programar una arquitectura de procesador y
constituye la representación más directa del código máquina específico para cada
arquitectura legible por un programador. Cada arquitectura de procesador tiene su
propio lenguaje ensamblador que usualmente es definida por el fabricante de
hardware, y está basada en los mnemónicos que simbolizan los pasos de
procesamiento (las instrucciones), los registros del procesador, las posiciones de
memoria y otras características del lenguaje.

Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de


computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes
de programación de alto nivel, que idealmente son portátiles.

Fue usado principalmente en los inicios del desarrollo de software, cuando aún no
se contaba con potentes lenguajes de alto nivel y los recursos eran limitados.
Actualmente se utiliza con frecuencia en ambientes académicos y de investigación,
especialmente cuando se requiere la manipulación directa de hardware, alto
rendimiento, o un uso de recursos controlado y reducido. También es utilizado en el
desarrollo de controladores de dispositivo (en inglés, device drivers) y en el
desarrollo de sistemas operativos, debido a la necesidad del acceso directo a las
instrucciones de la máquina. Muchos dispositivos programables (como los
microcontroladores) aún cuentan con el ensamblador como la única manera de ser
manipulados.

6.- Cargadores

Su función principal es colocar un programa objeto en la memoria e iniciar su


ejecución. Si tenemos un cargador que no necesita realizar las funciones de ligado
y relocalización de programas, su operación es muy simple, pues todas las
funciones se realizan en un solo paso. Se revisa el registro de encabezamiento para
comprobar se ha presentado el programa correcto para la carga (entrando en la
memoria disponible).

A medida que se lee cada registro de texto, el código objeto que contiene pasa a la
dirección de memoria indicada. Cuando se encuentra el registro de fin, el cargador
salta a la dirección especificada para iniciar la ejecución del programa cargado. Un
programa objeto contiene instrucciones traducidas y valores de datos del programa
fuente, y específica direcciones en memoria donde se cargarán estos elementos.
Las funciones de un cargador son relativamente sencillas y consisten en extraer
información de algún medio exterior de la memoria (por ejemplo: CD Discos) y
chocarlo en celdas sucesivas de la memoria a partir de una celda pre especificada.
El cargador realiza la última etapa del proceso de traducción: cargar el programa en
memoria donde puede ser ejecutado. Una opción típica del cargador permite la
selección de fuentes alternativas de entrada. Otros mandatos permiten al usuario
eliminar símbolos externos o secciones de control completas.

TIPOS DE CARGADORES:
• Cargadores iniciales.- Indican a la computadora la forma de poner, dentro de la
memoria principal, unos datos que están guardados en un periférico de memoria
externa (cinta, disco, etc.). Sirven para cargar en la memoria pequeños programas
que inician el funcionamiento de una computadora.

• Cargadores absolutos.- Como ya se mencionó el programa cargador pone en


memoria las instrucciones guardadas en sistemas externos. Independientemente
de que sea un cargador inicial o no, si dichas instrucciones se almacenan siempre
en el mismo espacio de memoria (cada vez que se ejecuta el programa cargador),
se dice que es un cargador absoluto.

• Cargadores con reubicación.- En ocasiones, un mismo programa necesita


ejecutarse en diferentes posiciones de memoria. Para esto la traducción debe estar
realizada en forma adecuada, es decir, no utilizando referencias absolutas a
direcciones de memoria, sino referencias relativas a una dirección especial llamada
dirección de reubicación. El cálculo de las direcciones reubicables lo realiza el
propio cargador a medida que va guardando las instrucciones en el espacio de
memoria que le indique el usuario o el propio sistema operativo de la máquina. A
los cargadores que permiten estas operaciones se les denominan cargadores con
reubicación.

• Cargadores ligadores.- Conocidos también por su término inglés Link editor o


simplemente Linker, es muy común también referirse a él por la castellanización del
nombre inglés, <<lincador>>. A la acción de montar se le llama asimismo
vulgarmente <<lincar>>. Montar un programa consiste en añadir al programa objeto
obtenido en la traducción las rutinas externas a las que hace referencia dicho
programa. El ensamblador debe permitir dichas referencias y las rutinas deben estar
a su vez en lenguaje máquina guardadas en algún elemento accesible por el
montador.
Generalmente, dichas rutinas se encuentran guardadas en un fichero especial al
que suele denominarse librería, porque están almacenadas todas las rutinas
externas susceptibles de ser utilizadas por los diferentes programas del usuario. Allí
va el programa ligador cuando está realizando el montaje de un programa a
buscarlas y las adjunta al programa objeto.

CARGADORES BOOTSTRAP. El programa cargador, una vez situado en la


memoria del computador, cargará el programa de aplicación y los datos. Pero,
previamente, se ha debido cargar el cargador en la memoria y esto se puede realizar
por uno de los métodos siguientes:

 Entrada Manual: Mediante el teclado, el usuario teclea en la máquina el


cargador bootstrap. Después de esto, el cargador se carga a sí mismo en la
memoria del computador. A partir de este momento, es el cargador el
encargado de cargar el programa de aplicación en la memoria.

 Entrada por ROM: Es posible tener las instrucciones de inicialización


almacenadas permanentemente en alguna porción de la ROM, en lugar de
introducirlas manualmente por teclado o por el panel frontal. Cuando se
requiere el programa de bootstrap, el operador simplemente dirige al
computador, mediante los conmutadores del panel, a ejecutar las
instrucciones memorizadas en ROM: Al estar el programa almacenado en
ROM se elimina también la posibilidad de borrados accidentales.

CARGADORES ABSOLUTOS. Este es un programa que carga cada instrucción


del programa objeto en una posición fija y preestablecida. Por tanto, cada
instrucción tiene una dirección absoluta. El cargador absoluto lee simplemente la
línea de código objeto que contiene la dirección de inicio de las instrucciones y
datos, y carga las palabras (o bytes) sucesivas en posiciones de memoria
sucesivas. El cargador absoluto tiene un serio inconveniente cuando se utiliza en
sistemas computadores grandes. Esto significa que los programas y datos se deben
almacenar cada vez en posiciones de memoria distintas.

Si se utilizan cargadores absolutos, el programa objeto se tendrá que modificar para


que refleje la nueva posición de inicio de memoria. Esta es una actividad larga y
sujeta a errores. En tales situaciones, se utilizan cargadores relocatables. Los
cargadores absolutos están diseñados generalmente para verificar cada instrucción
que leen. Si se detecta una instrucción ilegal, se interrumpe el proceso de carga.
CARGADORES RELOCATABLES. Este cargador evita el principal inconveniente
del cargador absoluto. El cargador relocatable es un programa más sofisticado,
tiene las características del cargador absoluto, y además permite al usuario
seleccionar y especificar las posiciones de memoria en las que se debe almacenar
las palabras de instrucciones y datos.
De esta forma, el mismo programa se puede cargar en distintas zonas de la memoria
sin necesidad de reensamblarlo o recompilarlo. Durante el ensamblado o
compilación del programa objeto, éste empieza con la dirección. Las sucesivas
instrucciones quedan asignadas a posiciones de memoria consecutivas.

No obstante, las direcciones no son absolutas, es decir, no representan las


verdaderas posiciones de memoria en las que se está almacenando el programa.
Se trata de direcciones relativas. El programador inserta la dirección se añade a
cada una de las posiciones de memoria asignadas en el programa, obteniéndose
las direcciones reales de las instrucciones y datos del programa.
Palabras Clave Definición Características Ejemplos
 La concatenación de
cadenas es una de las
Un preprocesador características más sutiles, y
es un programa de la que se puede abusar
separado que es más fácilmente. Dos
argumentos pueden unirse  preprocesadores
invocado por el usando el operador ##. Esta CSS
“separado” compilador antes de característica permite
Pre-Procesador que comience la concatenar dos cadenas en  “Ratfor” para
“entrada” traducción real. Los el código del preprocesador. FORTRAN
preprocesadores  Un preprocesador puede
producen la entrada insertar archivos de
para un compilador encabezamiento en el texto
del programa.
 Un preprocesador puede
permitir a un usuario definir
macros, que son abreviaturas
de construcciones más
grandes.
Ensamblador es un  Difícil de ser entendido
lenguaje de directamente por un ser
programación de humano ya que su estructura
bajo nivel. Consiste se acerca más bien al
en un conjunto de lenguaje máquina, es decir,
lenguaje de bajo nivel.
mnemónicos que  C
 Se pueden crear programas
“Mnemónicos” representan que se ejecutan más
Ensamblador instrucciones rápidamente y ocupan menos  IBM PC DOS
“instrucciones” básicas para los espacio que con lenguajes
computadores, de alto nivel.
microprocesadores,  Se puede controlar el tiempo
microcontroladores y en que tarda una Rutina en
otros circuitos ejecutarse, e impedir que se
integrados interrumpa durante su
programables. ejecución.

Un cargador es un  El uso de un cargador hace


programa de más flexible el código
sistema que realiza ejecutable pero el proceso de
la función de carga con frecuencia ocurre
en segundo plano o
trasladar un  El cargador de
conjuntamente con el ligado.
“Trasladar” programa objeto a la CYBER
Cargador  Rara vez un cargador es en
memoria para su realidad un programa por
“Flexible” ejecución. Su separado.  Programas
operación es muy  Se dice que tal código es re SIC/XE
simple, pues todas localizable y un cargador
las funciones se resolverá todas las
realizan en un solo direcciones re localizables
paso. relativas a una dirección
base o de inicio dada.
Bibliografía
 https://www.glc.us.es/~jalonso/exercitium/notacion-polaca-inversa/
 http://compiladoresmbm.blogspot.com/2016/10/herramientas-que-
manipulan-programas.html
 https://www.ionos.es/digitalguide/paginas-web/desarrollo-web/compilador-e-
interprete/#:~:text=Un%20compilador%20es%20un%20programa,código%2
0máquina%20antes%20de%20comenzar.
 https://brainly.lat/tarea/5385932
 https://sites.google.com/site/camaloco3000/practicas/3erparcial-
scratch/ejemplos-de-lenguage-de-programacioncopilador-y-interprete-y-
que-significa
 https://sites.google.com/site/portafoliocarlosmacallums/unidad-
i/lenguajeensamblador
 http://xikotenkaltsb.blogspot.com/2011/04/41-cargadores-y-ligadores.html
 https://programaciondesistemas2015.wordpress.com/cargadores/

También podría gustarte