Traductor

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 24 de octubre de 2017; las comprobaciones requieren 44 ediciones .

Traductor  - un programa o herramienta técnica que realiza la traducción del programa [1] [2] .

La traducción de un programa  es la transformación de un programa presentado en uno de los lenguajes de programación en un programa escrito en otro lenguaje. El traductor normalmente también realiza diagnósticos de errores, genera diccionarios de identificadores, imprime el texto del programa, etc. [1]

El idioma en el que se presenta el programa de entrada se denomina idioma fuente , y el programa en sí se denomina código fuente . El idioma de salida se denomina idioma de destino .

En el caso general, el concepto de traducción se aplica no solo a los lenguajes de programación, sino también a otros lenguajes, tanto lenguajes informáticos formales (como lenguajes de marcado HTML ) como lenguajes naturales ( ruso , inglés , etc.) [ 3] [4] .

Tipos de traductores

Hay varios tipos de traductores [2] .

Implementaciones

El propósito de la traducción es convertir el texto de un idioma a un idioma comprensible para el destinatario. Cuando se difunda un programa de ordenador, el destinatario podrá ser:

Tipos de transmisión:

Compilación

El lenguaje del procesador (dispositivo, máquina) se llama lenguaje máquina, código máquina . El código en lenguaje máquina es ejecutado por el procesador. Por lo general, el lenguaje máquina es un lenguaje de bajo nivel , pero hay procesadores que usan lenguajes de alto nivel (por ejemplo, iAPX-432 [5] ). Sin embargo, tales procesadores no han ganado distribución debido a su complejidad y alto costo.

Un compilador  es una especie de traductor que convierte el código fuente de un lenguaje de programación a un lenguaje de máquina [6] .

El proceso de compilación suele constar de varios pasos:

El programa puede utilizar servicios proporcionados por el sistema operativo y bibliotecas de terceros (por ejemplo, bibliotecas para trabajar con archivos y bibliotecas para crear una interfaz gráfica). La vinculación o linking se realiza para agregar código máquina de otros archivos objeto (código de bibliotecas estáticas ) e información sobre bibliotecas dinámicas a un archivo objeto . La vinculación o vinculación la realiza el enlazador o linker . El enlazador puede ser un programa independiente o parte de un compilador . El enlazador crea un ejecutable . El archivo ejecutable (programa) se inicia de la siguiente manera:  

Beneficios de la compilación:

Desventajas de la compilación:

Un ensamblador  es un compilador que convierte texto de lenguaje ensamblador a lenguaje máquina . El lenguaje ensamblador  es un lenguaje cercano al lenguaje máquina , un lenguaje de bajo nivel .

Interpretación

La interpretación es el proceso de lectura y ejecución del código fuente . Implementado por un programa intérprete .

El intérprete puede trabajar de dos formas:

  1. leer código y ejecutarlo inmediatamente ( interpretación pura [6] );
  2. leer el código, crear una representación intermedia del código en la memoria ( código de bytes o código p ), ejecutar la representación intermedia del código ( implementación mixta [6] ).

En el primer caso no se utiliza la traducción y en el segundo caso se utiliza la traducción del código fuente al código intermedio.

Etapas del intérprete:

  1. análisis léxico ;
  2. análisis ;
  3. análisis semántico ;
  4. creación de una representación intermedia del código (no realizada con interpretación pura);
  5. ejecución.

El intérprete modela una máquina (máquina virtual ), implementa un ciclo de búsqueda-ejecución de comandos de máquina. Los comandos de máquina no están escritos en lenguaje de máquina, sino en un lenguaje de alto nivel . Un intérprete puede llamarse un ejecutor de lenguaje de máquina virtual .

La interpretación pura generalmente se aplica a lenguajes con una estructura simple, como lenguajes de scripting , APL y Lisp .

Ejemplos de intérpretes que producen bytecode : Perl , PHP , Python , Erlang .

Ventajas de los intérpretes sobre los compiladores:

Desventajas de los intérpretes en comparación con los compiladores:

Comparación entre un intérprete puro y un intérprete generador de código de bytes :

Compilación dinámica

Compilación dinámica o JIT: traducción, en la que el código fuente o intermedio se convierte (compila) en código de máquina directamente en tiempo de ejecución, "sobre la marcha" ( inglés  justo a tiempo , JIT ). Cada pieza de código se compila solo una vez; el código compilado se almacena en caché y se reutiliza según sea necesario.

Ventajas de la compilación dinámica en comparación con la compilación:

Desventajas de la compilación dinámica frente a la compilación y la interpretación pura:

La compilación dinámica es adecuada para aplicaciones web .

Apareció la compilación dinámica y se admite hasta cierto punto en las implementaciones de Java , .NET Framework , Perl , Python .

Confusión de traducción e interpretación

Los conceptos de "traducción" e "interpretación" son diferentes. Durante la traducción, el código del programa se convierte de un idioma a otro. Durante la interpretación, se ejecuta el programa.

Dado que el propósito de la traducción suele ser preparar para la interpretación, estos procesos se consideran juntos. Por ejemplo, los lenguajes de programación a menudo se caracterizan como "compilados" o "interpretados" dependiendo de si el lenguaje se usa de manera predominante: compilación o interpretación. Además, se compilan casi todos los lenguajes de bajo nivel y de tercera generación , como ensamblador , C o Modula-2 , y se interpretan los lenguajes de nivel superior , como Python o SQL  .

Por otro lado, existe una interpenetración de los procesos de traducción e interpretación: los intérpretes pueden estar compilando (incluida la compilación dinámica), y los traductores pueden requerir interpretación para implementar la metaprogramación (por ejemplo, para macros en lenguaje ensamblador , compilación condicional en C o plantillas ). en C++ ).

Además, un mismo lenguaje de programación puede ser tanto traducido como interpretado, y en ambos casos deben existir etapas comunes de análisis y reconocimiento de constructos y directivas del lenguaje fuente. Esto se aplica tanto a implementaciones de software como de hardware, por ejemplo, procesadores de la familia x86 , antes de ejecutar instrucciones en lenguaje de máquina , decodificarlas, resaltar campos de operandos en códigos de operación (indicando registros , direcciones de memoria , constantes ), profundidad de bits , etc., y en Pentium En los procesadores con arquitectura NetBurst , el mismo código de máquina se traduce adicionalmente en una secuencia de microoperaciones antes de almacenarse en el caché interno .

Notas

  1. 1 2 GOST 19781-83 // Informática. Terminología: Manual de referencia. Número 1 / Revisor Ph.D. tecnología Ciencias Yu. P. Selivanov. - M. : Editorial de normas, 1989. - 168 p. - 55.000 ejemplares.  — ISBN 5-7050-0155-X .
  2. 1 2 Pershikov V.I., Savinkov V.M. Diccionario explicativo de informática / Revisores: Ph.D. Phys.-Math. Sci. A. S. Markov y Dr. Phys.-Math. Ciencias I. V. Potosin. - M. : Finanzas y estadísticas, 1991. - 543 p. — 50.000 copias.  - ISBN 5-279-00367-0 .
  3. ST ISO 2382/7-77 // Informática. Terminología. Decreto. Op.
  4. Diccionario de Sistemas de Computación = Diccionario de Computación / Ed. V. Illingworth y otros: Per. De inglés. A. K. Belotsky y otros; ed. E. K. Maslovsky. - M. : Mashinostroenie, 1990. - 560 p. - 70.000 copias (adicionales).  - ISBN 5-217-00617-X (URSS), ISBN 0-19-853913-4 (Reino Unido).
  5. Organik E. Organización del sistema Intel 432 = Vista de un programador del sistema Intel 432 / Per. De inglés. - M. : Mir, 1987. - S. 20, 31. - 446 p. - 59.000 ejemplares.
  6. 1 2 3 Robert W. Sebesta. 1.7. Métodos de implementación // Conceptos básicos de lenguajes de programación \u003d Conceptos de lenguajes de programación / Per. De inglés. - 5ª ed. — M .: Williams , 2001. — S. 45‑52. — 672 pág. - 5000 copias.  — ISBN 5-8459-0192-8 (ruso), ISBN 0-201-75295-6 (inglés).

Literatura