jueves, 30 de noviembre de 2017

1.3. Cargador, ligador, ensamblador, sistema operativo y compilador

CARGADOR Y LIGADORES

Las funciones mas importantes de un cargador son: 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 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 lee cada registro de texto, el código objeto que contiene pasa a dirección de la 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 dónde cargaran estos elementos.

Carga que lleva el programa objeto a la memoria para su ejecución.

Relocalización que modifica el programa objeto de forma que puede cargarse en una dirección diferente de la localidad especificada originalmente.

Ligado que combina dos o mas programas objeto independientes y proporciona la información necesaria para realizar diferencias entre ellos.

El cargador es un programa del sistema que realiza la función de carga pero muchos cargadores también incluyen relocalización y ligado. Algunos sistemas tienen un ligador (ó editor de ligado ) para realizar las operaciones de enlace, y un cargador separado para manera la relocalización y la carga.

En la mayoría de los casos todos los traductores de programas ( esto es, ensambladores y compiladores ) de un sistema en particular producen programas objeto en el mismo formato.

De esta misma forma, puede usarse el cargador o ligador del sistema con independencia del lenguaje de programación fuente original, se suele utilizar el término cargador en lugar de cargador y ligador, los procesos de ensamblado y carga están íntimamente relacionados entre sí.

Se han desarrollado herramientas especiales de software, llamadas cargadores para asistir, al programados en la carga del programa. El cargador es normalmente un programa pequeño que permite al usuario entrar directamente las palabras de instrucción y datos a direcciones concretas de la memoria mediante, ó un teclado ó una cinta magnética.



Leer más: http://www.monografias.com/trabajos12/sofsiste/sofsiste.shtml#INTRO#ixzz4zwuT8Pts


ENSAMBLADOR
Dicho nivel difiere considerablemente de los niveles de microprogramación, de maquina convencional y del sistema operativo, debido a que se implanta por traducción y no por interpretación(1).

Funciones De Un Ensamblador

La tarea fundamental de un ensamblador es traducir un programa en lenguaje de ensamblador al código correspondiente en lenguaje de máquina. En esencia, el ensamblador debe realizar las siguientes tareas:

1. Convertir los códigos ("opcode" o mnemónicos: ej. LDA, STX) a su código equivalente en lenguaje de máquina

2. Convertir los operandos simbólicos (las etiquetas o variables) en las direcciones correspondientes de los operandos

3. Construir las instrucciones en lenguaje de máquina en el formato apropiado

4. Convertir las constantes definidas en el programa en su verdadera representación

5. Escribir el "listing" en lenguaje de ensamblador con el código en lenguaje de máquina correspondiente

6. Procesar las directrices al ensamblador (las directrices son instrucciones o comandos dirigidos al ensamblador, que éste procesa y ejecuta al hallarlos en el programa en lenguaje de ensamblador; estas directrices no se traducen a lenguaje de máquina, si no que el ensamblador ejecuta alguna acción, como reservar memoria para variables, entre otras)

(Org. De Computadoras Un Enfoque Estructurado, Tanenbaum, P.445)

En general, la mayoría de las tareas se puede realizar si se recorre el programa línea por línea. Pero surge una dificultad si se trata de traducir una instrucción cuyo operando está definido más abajo en el programa. Si esto ocurre, el ensamblador desconoce la dirección del operando y la instrucción no se podría ensamblar(1).

Leer más: http://www.monografias.com/trabajos12/sofsiste/sofsiste.shtml#INTRO#ixzz4zwu0TnuI

SISTEMA OPERATIVO Y COMPILADOR


Un compilador es un programa que lee un programa escrito en un lenguaje fuente y lo traduce a un programa equivalente en otro lenguaje, el lenguaje objeto [Aho et al. 1990]. Como parte importante de este proceso de traducción, el compilador informa al usuario de la presencia de errores en el programa fuente.

En la compilación hay dos partes análisis y síntesis . Durante el análisis se determinan las operaciones que implica el programa fuente y se registran en una estructura jerárquica llamada árbol. A menudo se usa una clase especial de árbol llamado árbol sintáctico , donde cada nodo representa una operación y los hijos del nodo son los argumentos de la operación.

Fases de un Compilador

Un compilador típicamente opera en fases , cada una lleva a cabo una tarea sobre el programa fuente. La figura 4.1 , muestra la descomposición en fases de un compilador.

Las primeras tres fases suelen agruparse en una sola fase llamada fase de análisis y las últimas tres en una llamada fase de síntesis. La fase de análisis y el modulo de manejo de errores se describen posteriormente en este mismo capítulo. La fase de síntesis no es relevante en el contexto de un lenguaje multibase de datos, ya que este sigue un enfoque diferente que el de los lenguajes tradicionales, por esta razón solo se menciona.

Muchas herramientas de software que manipulan programas fuente realizan primero algún tipo de análisis, entre estas se encuentran los editores de estructuras, impresoras estéticas, verificadores estáticos y los interpretes1 .


Leer más: http://www.monografias.com/trabajos12/sofsiste/sofsiste.shtml#INTRO#ixzz4zwv4Iou2



Herramientas generadoras de compiladores

Esta es una lista de las herramientas más conocidas para la construcción de compiladores. Si conoce otro generador que no figure en esta lista, por favor hága saber.
Se agradecerá informar sobre la desactualización de alguno de los enlaces.

Nombre: Lex y Yacc

Descripción: los generadores más populares de analizadores léxicos y sintácticos LALR(1).

Lenguaje: Pascal - C

Download: Turbo Pascal y FPK

Nombre: Flex y Bison

Descripción: versiones mejoradas (generan analizadores más rápidos) de Lex y Yacc.

Lenguaje: C

Download: Linux - DOS

Nombre: BTYacc (Back Tracking Yacc)

Descripción: es una versión modificada de yacc que genera parsers con capacidad de backtracking automático.

Lenguaje: C

Download: DOS

Nombre: BYacc (Berkeley Yacc)

Descripción: es un generador de parsers LALR(1) de dominio público compatible con AT&T Yacc (el Yacc original).

Lenguaje: C

Download:

Nombre: YAY (Yet Another YACC)

Descripción: es un generador de analizadores sintácticos ascendentes similar a Yacc pero con una extensión sumamente importante: soporta gramáticas LALR(2).

Lenguaje: C

Download: DOS

Nombre: ParseGenerator

Descripción: es una IDE (Entorno Integrado de Desarrollo), bajo Windows32, para los generadores AYACC y ALEX, clones de Yacc y Lex respectivamente.

Lenguaje: C - C++

Download: Win32

Nombre: Eli

Descripción: ofrece soluciones a casi todas las tareas relacionadas con la implementación de un lenguaje.

Lenguaje:

Download: ELI

Nombre: COCKTAIL

Descripción: es un conjunto de generadores de programas para casi todas las fases de un compilador. LALR(1) - LL(1) - Generador de ASTs - Evaluador de Atributos - Herramienta de transformación de programas.

Lenguaje:

Download: COCKTAIL

Nombre: PCCTS

Descripción: es un conjunto de herramientas para la construcción de traductores y reconocedores de lenguajes. Comprende tres herramientas: ANTLR un generador de parsers LL(k), DLG un analizador de analizadores léxicos y SORCERER un generador de parsers para árboles que le permite al programador definir la estructura del árbol por medio de una gramática.

Lenguaje:

Download: PCCTS

Nombre: Coco/R

Descripción: es un generador de parsers descendentes.

Lenguaje:

Download: COCO(R)

Nombre: Depot4

Descripción: es un generador de parsers descendentes que soporta especificaciones al etilo de la traducción dirigida por la sintaxis.

Lenguaje:

Download: Depot4

Nombre: LLgen

Descripción: es una herramienta para generar parsers descendentes a partir de una gramática ELL(1). La gramática puede ser ambigua o más general que una ELL(1).

Lenguaje:

Download: LLGEN

Nombre: PRECC

Descripción: es un generador de compiladores para gramáticas dependientes del contexto con infinito lookahead.

Lenguaje:

Download: PRECC

Nombre: RDP

Descripción: es un generador de parsers descedentes para gramáticas LL(1).

Lenguaje:

Download: RDP

Nombre: Visual Parse++

Descripción: provee una interfase visual que permite aprender y utilizar, de manera interactiva, la tecnología de parsing. Genera parsers en C, C++, VBasic y Java.

Lenguaje:

Download: VISUALPARSE++

Nombre: AnaGram

Descripción: es un generador de parsers LALR con resincronización automática en presencia de errores. Usualmente no necesita de un analizador léxico.

Lenguaje:

Download: AnaGram

Nombre: TCLL1

Descripción: es un generador de parsers descendentes para gramáticas LL(1) y LL(k).

Lenguaje:

Download: TCLL1

Nombre: Elegant (recomendado por David Riemens)

Descripción: es un lenguaje orientado a la construcción de compiladores desarrollado por Phillips y puesto a dispocisión del público en 1997.

Lenguaje:

Download: Elegant

Nombre: Cogencee (link recomendado por Peter Evans)

Descripción: generador de parsers descendentes en Delphi.

Lenguaje: Delphi

Download: Cogencee

Nombre: ProGrammar (link recomendado por Norm Wilson)

Descripción: un moderno generador de parsers OO.

Lenguaje:

Download: ProGrammar

Una lista más extensa herramientas puede encontrarse en Catalog of Compiler Construction Tools3

(c) 2000 Compiladores e Intérpretes

http://www.ucse.edu.ar/fma/compiladores/

Salvador V. Cavadini



Leer más: http://www.monografias.com/trabajos12/sofsiste/sofsiste.shtml#INTRO#ixzz4zwwEcktA

No hay comentarios:

Publicar un comentario

6. Integración del intérprete

6.1. Lenguaje intermedio En esta sección se describirá la implementación de un intérprete de un lenguaje intermedio básico. El lenguaje...