ES2645010T3 - Método y sistema para generar un código - Google Patents

Método y sistema para generar un código Download PDF

Info

Publication number
ES2645010T3
ES2645010T3 ES11807873.2T ES11807873T ES2645010T3 ES 2645010 T3 ES2645010 T3 ES 2645010T3 ES 11807873 T ES11807873 T ES 11807873T ES 2645010 T3 ES2645010 T3 ES 2645010T3
Authority
ES
Spain
Prior art keywords
code
source code
jump
instruction
destination
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
ES11807873.2T
Other languages
English (en)
Inventor
Thorsten Bernecker
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Deloitte Innowake GmbH
Original Assignee
Deloitte Innowake GmbH
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Deloitte Innowake GmbH filed Critical Deloitte Innowake GmbH
Application granted granted Critical
Publication of ES2645010T3 publication Critical patent/ES2645010T3/es
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Circuits Of Receivers In General (AREA)
  • Stored Programmes (AREA)

Abstract

Un método implementado por ordenador para generar un código a partir del código (1) fuente original, mediante el cual el código (1) fuente original incluye al menos una instrucción de salto y existe en un lenguaje de programación de fuente, comprendiendo el método: - crear un código (2) intermedio a partir del código (1) fuente original omitiendo al menos una instrucción de salto, existiendo el código (2) intermedio en un lenguaje de programación de destino, - cargar (S2) el código (2) intermedio en una unidad (3) de manipulación de código, y - crear (S3), a través de la unidad (3) de manipulación de código, del código (4) fuente de destino desde el código (2) intermedio, en donde la creación comprende una inserción de al menos un fragmento de código fuente en el código (4) fuente de destino, por lo que el al menos un fragmento de código fuente insertado es funcionalmente equivalente a al menos una instrucción de salto omitida, y por lo que al menos un fragmento de código fuente insertado comprende - una instrucción que arroja una excepción, - al menos una declaración de bucle dentro del código fuente para el manejo de excepciones, - al menos una declaración condicional dentro de un bloque "Try" dentro de la declaración de bucle, - un bloque de captura correspondiente, que captura la excepción, y vuelve a la declaración de bucle, y - una variable auxiliar que contiene el destino del salto y que es evaluada por la declaración condicional.

Description

5
10
15
20
25
30
35
40
45
50
55
60
65
DESCRIPCION
Metodo y sistema para generar un codigo Area de la invencion
La invencion se refiere a un metodo implementado por ordenador para generar un codigo para su ejecucion en un entorno de tiempo de ejecucion. Ademas, la invencion se refiere a una unidad de manipulacion de codigo intermedio para generar un codigo dentro de un entorno de tiempo de ejecucion, asi como a un sistema para generar un codigo para su ejecucion en un entorno de tiempo de ejecucion.
Antecedentes y estado de la tecnica
En el area de los sistemas y aplicaciones de software operativo, se ha deseado desde hace mucho tiempo portar y ejecutar aplicaciones creadas originalmente para sistemas anfitrion u ordenadores centrales en sistemas informaticos mas modernos y potentes. Esto a menudo implica ofrecer la misma funcionalidad previamente disponible en la aplicacion de software en el sistema de destino. Sin embargo, a menudo es imposible simplemente recompilar el codigo fuente de la aplicacion en el nuevo sistema porque los compiladores no estan disponibles en la plataforma de destino.
Ademas de eso, un objetivo concurrente al mover aplicaciones a una nueva plataforma es hacer que el codigo fuente este disponible en un lenguaje de programacion de modem, por ejemplo, un lenguaje de programacion orientado a objetos. Tal objetivo puede manifestarse en un requisito para transformar el codigo fuente de una aplicacion de COBOL, Natural o PL/1 en codigo fuente de Java.
La transformacion del codigo fuente original en un lenguaje de programacion de modem permite la compilacion en muchas plataformas diferentes ya que dichos compiladores estan disponibles en una gran variedad de plataformas de hardware y sistemas operativos. El codigo fuente transformado puede compilarse facilmente en el sistema de destino deseado.
Ademas, los programas transformados son mas faciles y rentables de mantener y modernizar.
Existen formas conocidas de transformar el codigo fuente de un lenguaje de programacion en otro de forma automatizada. Las construcciones de lenguaje de un lenguaje original se asignan a construcciones de lenguaje en un lenguaje de destino. El objetivo de esto es crear la menor diferencia posible entre la estructura del programa de la aplicacion original y la estructura del programa de destino, es decir, la creacion de una transformacion de declaracion a declaracion del codigo fuente original. De esta manera, el codigo fuente original y el codigo fuente de destino se ven muy similares, de hecho, familiares para cualquiera que conozca el codigo de la aplicacion original. El alto parecido garantiza un mantenimiento optimo.
Sin embargo, los diferentes paradigmas de diseno en el lenguaje original y de destino a menudo hacen imposible tal transformacion de declaracion a declaracion. El codigo fuente original y el destino exhiben enormes diferencias. Esto es exacerbado por el hecho de que el lenguaje de programacion original contiene construcciones de lenguaje que no estan disponibles en el lenguaje de programacion de destino.
Tales construcciones de lenguaje son, por ejemplo, instrucciones de salto. Los lenguajes de procedimiento, como Natural y COBOL, a menudo son usados para controlar el flujo del programa. La ejecucion del programa se detiene en un punto y continua en otro. El lenguaje de programacion Natural tiene el comando “REINPUT” que obliga a la ejecucion del programa a continuar en el punto del programa que recibio la ultima entrada del usuario. “REINPUT” puede usarse en cualquier lugar del codigo Natural.
El uso intensivo de las instrucciones de salto en los lenguajes de programacion de procedimientos conduce a grandes partes del codigo fuente original que requieren una transformacion que no emplea una transformacion de declaracion a declaracion. En cambio, estas partes del codigo deben reestructurarse de forma masiva o incluso requieren una reimplementacion manual. Incluso si el codigo transformado es semanticamente correcto, el codigo transformado puede no ser sintacticamente equivalente al codigo original. Una transformacion de este tipo tiene la desventaja de no ser reconocible en comparacion con la estructura original del programa.
David Doolin, Jack Dongarra, Keith Seymour, "JLAPACK - Compiling LAPACK Fortran to Java", (20000526), Citeseer, URL:
http://citeseerx ist.psu.edu/viewdoc/summary?doi=10.1.1.33.6090 , XP002630913 se refiere a subrutinas numericas traducidas de su subconjunto fuente Fortran 77 en archivos de clase, ejecutables por la Maquina Virtual de Java (JVM) y adecuadas para su uso por los programadores de Java. Esto hace posible que las aplicaciones o applets Java, distribuidos en World Wide Web (WWW), utilicen un codigo numerico heredado establecido originalmente en Fortran. La traduccion se realiza utilizando un compilador Fortran-a-Java (fuente-a-fuente) de proposito especial.
5
10
15
20
25
30
35
40
45
50
55
60
65
El documento US 2006031820 A1 se refiere a un metodo para la transformacion de programas y un aparato para la transformacion de programas COBOL a Java. El metodo consiste en: (1) un enfoque para la transformacion del programa de declaracion a declaracion, facilitado por una biblioteca de lenguaje objetivo predefinido, que mantiene los comentarios originales, el flujo de control del programa, la funcionalidad y la complejidad del tiempo; (2) un enfoque para ir a la eliminacion de declaraciones, que utiliza el mecanismo existente de manejo de excepciones en el lenguaje objetivo y su implementacion se oculta en una superclase en una biblioteca; (3) un BNF extendido para distinguir diferentes apariciones del mismo termino en una produccion de BNF; (4) un nuevo enfoque para la declaracion incorporada como una declaracion de marcador especial y un comentario, (5) en la descripcion de lo anterior, se define un lenguaje de especificacion de transformacion de programa para describir la relacion entre los comentarios en dos lenguajes. (6) un aparato, como la realizacion preferida del metodo, es un sistema de transformacion de programa COBOL a Java Cobol2Java; Se proporciona una muestra de la aplicacion COBOL y su traduccion a Cobol2Java.
Objeto de la invencion
El objeto de la invencion es proporcionar un metodo y un sistema que permitan transformar el codigo fuente original en un lenguaje de programacion original en un codigo fuente de destino semanticamente identico y sintacticamente casi identico en un lenguaje de programacion de destino, mediante el cual la transformacion de construcciones de lenguaje en la programacion original el lenguaje que no esta disponible en el lenguaje de programacion de destino aun es posible, manteniendo un parecido mas cercano con la estructura original. Un objeto particular de la invencion es transformar cualquier codigo fuente original en un lenguaje de programacion original en codigo fuente en un lenguaje de programacion de destino donde el codigo fuente original contiene instrucciones de salto que no estan disponibles en el lenguaje de programacion de destino
Solucion de acuerdo con la invencion
Este objeto se resuelve mediante los metodos, las unidades de manipulacion de codigo, los sistemas y los productos de programas informaticos de acuerdo con las reivindicaciones independientes respectivas.
La solucion de acuerdo con la invencion permite transformar programas en codigo fuente original en codigo fuente de destino que tiene una estructura similar incluso si el lenguaje de programacion de destino no permite instrucciones de salto.
De este modo, la invencion permite retener la estructura del programa original cuando se ha creado en un lenguaje de programacion original y se ha transformado en un nuevo programa en un lenguaje de destino de modem creando las instrucciones de salto que no estan disponibles en la fuente del lenguaje de destino del modem en su codigo ejecutable (objeto). Esto permite retener estructuras de programacion bien conocidas y entendidas de los programas existentes en el lenguaje de programacion de destino. El codigo resultante en el lenguaje de destino sigue siendo tan reconocible y sostenible como el codigo original. Esto tambien aumenta la probabilidad de que la aplicacion en el lenguaje de programacion de destino se ejecute correctamente.
Ademas, esto permite una transformacion de declaracion a declaracion del codigo fuente original en el codigo fuente de destino.
Las realizaciones preferidas comprenden las siguientes caracteristicas.
Al menos un fragmento de codigo fuente insertado en el codigo fuente de destino se adapta para realizar declaraciones de programa que son funcionalmente equivalentes a una instruccion de salto estatica colocada en el codigo fuente original, si el destino de la instruccion de salto esta dentro del marco de pila PARR18 de la instruccion de salto.
Al menos un fragmento de codigo fuente insertado en el codigo fuente de destino se adapta para realizar declaraciones de programa que son funcionalmente equivalentes a una instruccion de salto dinamica colocada en el codigo fuente original si el destino de la instruccion de salto esta fuera del marco de pila de la instruccion de salto.
Al menos un fragmento de codigo fuente insertado en el codigo fuente de destino se adapta para realizar declaraciones de programa que son funcionalmente equivalentes a una instruccion de salto dinamico colocada en el codigo fuente original, si el destino de la instruccion de salto esta dentro del marco de pila de la instruccion de salto.
El fragmento de codigo fuente insertado en el codigo fuente de destino comprende ademas una variable auxiliar que contiene el destino del salto y que se evalua mediante la declaracion de cambio.
El lenguaje de programacion de destino comprende un lenguaje de programacion que no permite declaraciones de salto del tipo “GOTO” en su codigo fuente.
El lenguaje de programacion de destino comprende al menos uno de Java y un lenguaje de programacion que es ejecutable en el entorno de ejecucion “.NET”.
5
10
15
20
25
30
35
40
45
50
55
60
65
El lenguaje de programacion fuente comprende un lenguaje de programacion que permite instrucciones de salto en su codigo fuente.
El lenguaje de programacion fuente es al menos uno de Cobol, Natural y PL/1.
El metodo comprende ademas un paso de crear codigo final a partir del codigo fuente de destino, por lo que el codigo final comprende codigo independiente de hardware, el codigo final para ejecucion en un entorno de tiempo de ejecucion.
El entorno de tiempo de ejecucioncomprende una Maquina Virtual de Java.
Al menos un fragmento de codigo fuente insertado en el codigo fuente de destino puede ser adaptado para realizar declaraciones de programa que son funcionalmente equivalentes a una instruccion de salto dinamica colocada en el codigo fuente original, si el destino de la instruccion de salto esta fuera del marco de pila de la instruccion de salto.
La unidad de manipulacion de codigo puede adaptarse adicionalmente para insertar en la fuente de destino al menos una variable auxiliar que contiene el destino del salto y que es evaluada por la declaracion condicional.
El sistema de acuerdo puede comprender ademas medios para crear un codigo final a partir del codigo fuente de destino, por lo que el codigo final comprende un codigo independiente de hardware, estando el codigo final para su ejecucion en un entorno de tiempo de ejecucion.
En otras realizaciones preferidas de la invencion, una o mas de las siguientes caracteristicas pueden estar comprendidas:
- Al menos una instruccion de salto insertada en el codigo final puede contener manejo de excepciones.
Al menos una instruccion de salto insertada en el codigo final puede comprender un salto directo dentro del codigo final, si el destino del salto se encuentra dentro del area valida del salto directo.
El area valida es el marco de pila de una subrutina de la pila de llamadas, por lo que la pila de llamadas esta compuesta por marcos de pila. Cada marco de pila corresponde a una llamada a una subrutina que aun no ha terminado con un retorno. El marco de pila en la parte superior de la pila de llamadas es para la rutina que se esta ejecutando actualmente.
La declaracion de manejo de excepciones se puede adaptar para aceptar y manejar al menos una excepcion de declaracion de senalizacion.
La declaracion de gestion de excepciones puede adaptarse para indicar, al aceptar al menos la excepcion de la declaracion de senalizacion, una excepcion si la declaracion de gestion de excepciones no esta dentro del area valida del destino de salto del salto directo.
La declaracion de senalizacion se puede insertar en el codigo final a traves de la unidad de manipulacion de codigo intermedio.
Durante la compilacion del codigo fuente original en el codigo fuente de destino, se pueden crear datos de control que alimentan a la unidad de manipulacion de codigo intermedio y que contiene informacion sobre como deben insertarse las declaraciones de senalizacion en el codigo final.
El codigo intermedio generado puede contener al menos una declaracion de senalizacion.
El codigo fuente de destino puede contener al menos una declaracion de senalizacion.
El salto directo puede ser del tipo “GOTO”.
El codigo intermedio puede comprender codigo de byte para ser interpretado por un interprete de una maquina virtual.
El lenguaje de programacion original puede comprender un lenguaje de programacion que permite instrucciones de salto en su codigo fuente. El lenguaje de programacion original puede ser al menos un Cobol, Natural y PL/1.
Es particularmente beneficioso que el codigo fuente original este en el lenguaje de programacion Natural y el codigo fuente de destino sea Java. Natural ofrece un sistema muy facil para manejar instrucciones de salto lo que ha llevado a un uso generalizado del lenguaje en escenarios de negocios. Java, por otro lado, ha encontrado un uso generalizado debido a su independencia de plataforma. Mediante el uso de la invencion, el programa Natural se puede transformar en programas Java y ejecutarse en plataformas arbitrarias y se pueden mantener y mejorar alli.
5
10
15
20
25
30
35
40
45
50
55
60
65
La maquina virtual puede comprender una Maquina Virtual de Java y la unidad de manipulacion de codigo intermedio comprende un cargador de clase Java de la Maquina Virtual de Java.
La unidad de manipulacion de codigo intermedio puede derivarse del cargador de clases Java de la Maquina Virtual de Java, es decir, el cargador de clase de la Maquina Virtual de Java puede usarse como clase base a partir de la cual se puede derivar la clase de la unidad de manipulacion de codigo intermedio.
El codigo final generado por la unidad de manipulacion del codigo intermedio se puede entregar para su ejecucion en la maquina virtual.
La maquina virtual puede comprender una Maquina Virtual de Java.
El codigo final puede comprender codigo independiente del hardware.
La unidad de manipulacion de codigo intermedio de acuerdo con esta invencion es la herramienta que permite implementar el metodo descrito en esta invencion.
Hacer que la unidad de manipulacion de codigo intermedio sea independiente y desacoplada del cargador de clases de Maquina Virtual de Java (JVM) e implementarla de manera que produzca un codigo de objeto ejecutable tal que el cargador de clase de JVM pueda cargar y ejecutar mediante la interpretacion de JVM permite crear Codigo de Byte Java para JVM que, por un lado, es una representacion semantica completa del codigo fuente Natural y, por otro lado, no necesita ser adaptado por el cargador de clase de JVM para insertar instrucciones de salto en el Codigo Byte Java. Una ventaja adicional es que el codigo objeto es ejecutable en cualquier entorno JVM sin requerir un cargador de clase especialmente adaptado o una unidad de manipulacion en tiempo de ejecucion para el entorno de destino.
El codigo intermedio puede haberse creado a partir del codigo fuente de destino en un lenguaje de programacion de destino, mediante el cual el codigo fuente de destino se compilo del codigo fuente original que contiene al menos una instruccion de salto, al omitir al menos una instruccion de salto.
La unidad de manipulacion de codigo intermedio puede comprender un cargador de clase Java.
La unidad de manipulacion de codigo intermedio puede haberse derivado de un cargador de clase Java.
El codigo final puede comprender codigo independiente del hardware.
Si la unidad de manipulacion de codigo intermedio se deriva del cargador de clase de la Maquina Virtual de Java (JVM) y la comprende, entonces la unidad de manipulacion de codigo intermedio es parte de la JVM.
La unidad de manipulacion de codigo intermedio puede derivarse de un cargador de clase Java.
La unidad de manipulacion de codigo intermedio se puede adaptar para verificar antes de insertar una instruccion de salto en el codigo final que el objetivo para la instruccion de salto se encuentra dentro del area valida de la instruccion de salto que se debe insertar.
La unidad de manipulacion de codigo intermedio puede adaptarse adicionalmente para insertar una instruccion de salto en el codigo final que activa un salto directo al objetivo de salto en el codigo final durante la ejecucion del codigo final si el area valida de la instruccion de salto a insertar esta dentro del area valida del objetivo del salto.
La unidad de manipulacion de codigo intermedio puede adaptarse adicionalmente para insertar una declaracion de senalizacion en el codigo final que indica una excepcion durante la ejecucion del codigo final, si el area valida de la instruccion de salto que se va a insertar queda fuera del area valida del objetivo del salto.
La unidad de manipulacion del codigo intermedio puede adaptarse adicionalmente para insertar una declaracion de manejo de excepciones en el codigo final que captura y maneja la excepcion senalada.
La declaracion de manejo de excepcion puede contener el salto directo al objetivo en el codigo final, si la declaracion de manejo de excepcion se encuentra dentro del area valida del objetivo del salto.
El codigo final puede comprender codigo independiente del hardware.
Un producto de programa de ordenador con codigo de aplicacion que, cuando se carga en una unidad de procesamiento de datos, ejecuta el metodo descrito anteriormente.
Breve descripcion de figuras.
Mas detalles y propiedades de la invencion se dan en la siguiente descripcion de los dibujos en los que:
5
10
15
20
25
30
35
40
45
50
55
60
65
La figura 1a ilustra un diagrama de bloques para delinear un metodo de acuerdo con el segundo aspecto de la invencion;
La figura 1 b ilustra un diagrama de bloques para delinear un segundo ejemplo del metodo de acuerdo con el segundo aspecto de la invencion;
La figura 2 ilustra la ejecucion de una condicion de excepcion de multiples etapas que representa una instruccion de salto en el codigo fuente original como se ejemplifica en el Codigo Byte Java;
Las figuras 3a-3b ilustran dos posibles formas de realizacion de un sistema de acuerdo con el segundo aspecto de la invencion;
La figura 4 ilustra un diagrama de bloques para delinear el metodo de acuerdo con el primer aspecto de la invencion;
Las figuras 5a-5b ilustran ejemplos de codigo fuente en un lenguaje de programacion de destino; y
La figura 6 representa una realizacion de un sistema de acuerdo con la invencion para ejecutar el metodo de acuerdo con el primer aspecto de la invencion.
Descripcion detallada
Lo siguiente describira un ejemplo que existe como codigo fuente original en el lenguaje de programacion natural que se ejecutara en un entorno de tiempo de ejecucion de Maquina Virtual de Java (JVM) despues de la transformacion. Para permitir ejecutar el codigo fuente Natural original en la JVM, el codigo fuente Natural primero debe transferirse al codigo fuente en el lenguaje de programacion Java. Un compilador de Java compila este codigo fuente de Java en un codigo de objeto ejecutable que pueda leer el cargador de clase de la JVM. El codigo objeto se conoce como Codigo Byte Java y puede ser ejecutado por el entorno de ejecucion de Java.
La invencion tambien es aplicable a otros lenguajes de programacion y entornos de tiempo de ejecucion. La invencion permite, por ejemplo, el codigo fuente escrito en el lenguaje de programacion COBOL para transformarse en el lenguaje de programacion, ”VB.NET” que a su vez se puede ejecutar en el entorno de tiempo de ejecucion “.NET”.
Descripcion detallada del segundo aspecto de la invencion
La figura 1a muestra la ejecucion de ejemplo para el metodo propuesto por esta invencion que permite transferir el codigo fuente en el lenguaje de programacion original en codigo que es ejecutable por un entorno de tiempo de ejecucion. El ejemplo transforma el codigo fuente en el lenguaje de programacion Natural en codigo que es ejecutable por el JVM. El lenguaje de programacion Java no permite instrucciones de salto.
El codigo fuente Natural 1 contiene una o mas instrucciones de salto. Por ejemplo, el codigo fuente Natural puede contener una o varias instrucciones “REINPUT” que provocan un salto de regreso a un destino en el codigo en el que se le solicito al usuario la ultima entrada”. En Natural, se puede solicitar al usuario la instruccion INPUT. La instruccion “REINPUT” se puede colocar arbitrariamente dentro del codigo fuente Natural.
El codigo fuente Natural 1 puede contener varias subrutinas que pueden anidarse. La instruccion “REINPUT” puede provocar un salto a un punto de ejecucion fuera de la subrutina que ejecuta la instruccion “REINPUT”.
En un primer paso S1, el codigo fuente Natural 1 que contiene una o mas instrucciones de salto se transforma en el codigo 2 fuente Java, por lo que la fuente resultante Java no contiene ninguna instruccion de salto correspondiente. La transformacion del codigo fuente Natural 1 en el codigo 2 fuente Java se puede lograr a traves de un compilador que, por ejemplo, convierte las declaraciones o funciones Naturales en declaraciones o funciones Java correspondientes.
Como Java es un lenguaje orientado a objetos, tiene sentido transformar el codigo fuente Natural en codigo fuente Java que consiste en clases Java. Las subrutinas en Natural se transforman preferentemente en metodos de Java.
La traduccion del codigo fuente en el paso S 1 se realiza mejor mediante la creacion del codigo 2 fuente Java que es sintacticamente similar al codigo fuente Natural 1. Esto se logra haciendo una transformacion linea por linea o de declaracion a declaracion. Se crea asi un alto grado de codigo fuente reutilizable y sostenible que muestra un fuerte parecido entre el codigo fuente 1 y el codigo fuente 2.
Como Java no tiene instrucciones de salto que permitan la transformacion directa de la declaracion “REINPUT”, el codigo fuente 2 se crea sin las instrucciones de salto correspondientes. El Codigo de Bytes Java se extiende insertando fragmentos de codigo que mostraran el comportamiento de la instruccion “REINPUT” una vez ejecutado (ver el paso S5).
5
10
15
20
25
30
35
40
45
50
55
60
65
Durante la transformacion del codigo fuente Natural 1 en el codigo 2 fuente Java, un paso S3 conduce a la creacion de datos de control para cada instruccion de salto identificada en el codigo fuente Natural 2 que permite que la unidad de manipulacion de codigo intermedio inserte fragmentos de codigo en el Codigo de Bytes Java que son funcionalmente equivalentes a las instrucciones de salto encontradas en el codigo fuente Natural 1. Los datos de control identifican en que parte del Codigo Byte Java deben insertarse los fragmentos de codigo. Puede guardarse en un archivo de control que utiliza la unidad de manipulacion de codigos intermedia cuando cambia el Codigo de Bytes Java, que se muestra en el paso S6. Sin embargo, los datos de control del paso S3 tambien pueden almacenarse en la memoria principal del sistema informatico.
Despues de transformar el codigo fuente Natural 1 en el codigo 2 fuente Java mientras se omiten las instrucciones de salto, el codigo 2 fuente Java se compila con un compilador Java. El resultado es uno o mas archivos .class 3 que contienen Codigo de Bytes. Como el codigo fuente 2 Java no contenia ninguna instruccion de salto, el Codigo 3 de byte Java tampoco contiene ninguna instruccion de salto equivalente a las encontradas en el codigo fuente Natural 1.
En el siguiente paso S4, los archivos .class, es decir, Codigo 3 de byte Java, se introducen en una unidad de manipulacion de codigo 5 intermedio que cambia el Codigo 3 de byte Java e inserta fragmentos de codigo en el como el paso S5 que son funcionalmente equivalentes a las instrucciones de salto que se encuentran en el codigo fuente Natural 1. La unidad de manipulacion de codigo 5 intermedio en un paso S6 pasa por los datos de control alcanzados en el paso S3. La unidad de manipulacion de codigo 5 intermedio luego inserta instrucciones de salto en el Codigo 3 de bytes de Java de acuerdo con estos datos.
El metodo exacto para insertar fragmentos de codigo y/o instrucciones de salto en el Codigo 3 de bytes de Java se explicara ahora haciendo referencia a la Fig. 2.
Despues de insertar instrucciones de salto en el Codigo 3 de byte Java, esta disponible un Codigo Byte Java 4 que es semanticamente por completo equivalente al Codigo fuente Natural 1. Este Codigo 4 de Byte Java puede ser ejecutado por la JVM.
En una realizacion de la invencion, la unidad de manipulacion de codigo 5 intermedio que inserta las instrucciones de salto en el Codigo 3 de byte Java puede codificarse para que sea una unidad de manipulacion que sea independiente y desacoplada del Cargador de clase de JVM. Esto se logra mediante una unidad de manipulacion del codigo 5 intermedio que crea archivos “.class” que se pasan al Cargador de clase de JVM y, a su vez, se entregan al interprete de JVM. La ventaja de dicha implementacion es que el Codigo Byte Java es semanticamente identico al codigo fuente Natural 1 y no necesita ser manipulado mas por el cargador de clase de JVM para insertar las instrucciones de salto respectivas en el Codigo Byte Java. Ademas, los archivos “.class” creados por la unidad de manipulacion desacoplada o el Codigo Byte Java creado por la unidad de manipulacion de codigo 5 intermedio pueden ejecutarse en entornos de tiempo de ejecucion de Java arbitrarios sin requerir un Cargador de Clase especificamente modificado o una unidad de manipulacion de tiempo de ejecucion.
Otra realizacion de la invencion puede usar una unidad de manipulacion de codigo 5 intermedio que se ha derivado del cargador de clase de JVM y, si es necesario, sobrescribe y reemplaza. Esta unidad de manipulacion de tiempo de ejecucion derivada comprende la funcionalidad del cargador de clase de JVM y la funcionalidad requerida para insertar fragmentos de codigo y/o instrucciones de salto en el Codigo 3 de bytes de Java. Por lo tanto, la unidad de manipulacion de codigo intermedio se convierte en un componente de la JVM tal que las instrucciones de salto respectivas se insertan en Codigo 3 de byte Java despues de que la unidad de manipulacion de codigo intermedio derivada del cargador de clase de JVM haya cargado el Codigo 3 de byte Java. Los diversos entornos de tiempo de ejecucion de Java para diferentes plataformas requieren cada uno la misma unidad de manipulacion de tiempo de ejecucion.
La Fig. 1b muestra un ejemplo de ejecucion de un metodo de acuerdo con la invencion. La diferencia con el metodo mostrado en la figura 1 a es que no se generan datos de control para alimentar a la unidad de manipulacion de codigo 5 intermedio para insertar fragmentos de codigo y/o instrucciones de salto.
Al igual que en la ejecucion del metodo de acuerdo con la Fig. 1a en un paso S1, inicialmente el codigo fuente Natural que contiene instrucciones de salto se transforma en codigo fuente Java. Para cada instruccion de salto encontrada durante la transformacion del codigo fuente Natural 1 en el codigo 2 fuente Java, se inserta un marcador de salto en el codigo 2 fuente Java que representa una instruccion de salto. Los fragmentos de codigo que son funcionalmente equivalentes a la instruccion de salto en el codigo fuente Natural 1 seran insertados en los marcadores de salto en el Codigo 3 de bytes de Java por la unidad de manipulacion de codigo 5 intermedio. Una implementacion de la invencion puede insertar una funcion de Java como el marcador de salto que codifica para lanzar una excepcion, como se describe en la Fig. 2 con mayor detalle. Alternativamente, el marcador de salto se puede insertar como un autentificador, tal como un comentario de Java.
El codigo 2 fuente de Java creado de esta manera en un proximo paso S2 se compila a Codigo de Byte Java mediante un compilador de Java. Este codigo compilado tambien contiene los marcadores insertados en el paso S1.
5
10
15
20
25
30
35
40
45
50
55
60
65
En el siguiente paso S4, el Codigo 3 de byte Java se pasa a la unidad de manipulacion de codigo 5 intermedio. Se determina en el siguiente paso S5 los marcadores de salto contenidos en el Codigo Byte Java. La manipulacion del codigo intermedio procede a reemplazar los marcadores de salto por fragmentos de codigo que son funcionalmente equivalentes a las instrucciones de salto presentes en el codigo fuente Natural 1. La sustitucion es especificamente necesaria si los marcadores de salto se insertaron como autentificadores o comentarios en el codigo 2 fuente Java. Si los marcadores de salto se insertaron como funciones de Java, la manipulacion de codigo 5 intermedio puede modificar adicionalmente el Codigo 3 de byte Java mediante fragmentos de codigo adicionales tales que estos, en combinacion con la funcion de Java, se vuelven funcionalmente equivalentes a las instrucciones de salto en el codigo fuente Natural 1. El Codigo de Bytes Java resultante puede ser ejecutado por la JVM.
El marcador de salto insertado en el paso S1 puede ser un “REINPUT” () de funcion java que basicamente lanza una excepcion que lo hace sintacticamente cercano a una instruccion “REINPUT” en el codigo fuente Natural 1. La unidad de manipulacion de codigo 5 intermedio agrega el manejo de excepcion correspondiente para capturar y tratar la excepcion lanzada por la funcion “REINPUT” () al Codigo 3 de byte Java. Ademas, la unidad de manipulacion de codigo 5 intermedio inserta las instrucciones de salto correspondientes y sus destinos al Codigo 3 de bytes de Java, como se muestra con mas detalle en la Fig. 2.
En el caso que los marcadores de salto se hayan insertado en forma de autenticadores o comentarios en el paso S1, la unidad de manipulacion de codigo intermedio los reemplaza por una funcion que arroja una excepcion similar a la “reinput” () de la funcion Java.
La Fig. 2 es un ejemplo de como los fragmentos de codigo se insertan en el Codigo de Bytes Java para obtener instrucciones de salto que son semanticamente similares a las del Codigo fuente Natural1. Para una mejor legibilidad, esto se muestra en la sintaxis de Java. Los fragmentos de codigo se insertan dentro de S5 en Codigo 3 de byte Java mediante la unidad de manipulacion de codigo 5 intermedio de acuerdo con la invencion como se describe haciendo referencia a la Fig. 1a y Fig. 1b.
El fragmento de codigo MAIN corresponde a un programa principal en el codigo fuente Natural 1. La funcion FUNCTION A corresponde a una subrutina en el codigo fuente Natural 1. El programa Principal MAIN llama (C1) a la funcion FUNCTION A implementada como un metodo de la clase Java que representa el programa principal. Una funcion adicional FUNCTION B tambien corresponde a una subrutina en el codigo fuente Natural 1. FUNCTION A llamada FUNCTION B, C2. Dentro del codigo fuente natural original, la subrutina representada por FUNCTION A llama a la subrutina representada por FUNCTION B. FUNCTION B tambien se implementa como un metodo de la clase Java que representa el programa principal. La funcion FUNCTION B puede ser la funcion de “reinput” de Java () mencionada anteriormente.
El codigo fuente natural original 1 contiene una declaracion de “reinput” (en la subrutina que corresponde a FUNCTION A) que salta a un punto en el programa principal que esta fuera de la subrutina. Este punto se marca como "Target" en la Fig. 2.
A diferencia del codigo fuente de Java, el Codigo de Bytes Java permite que las declaraciones de salto salten de un punto a otro. Sin embargo, estos saltos solo son validos dentro de un bloque de ejecucion o el alcance del codigo del programa Java. Este alcance o bloque puede estar limitado, por ejemplo, a un metodo. Por lo tanto, el salto solo es valido dentro de este metodo. Tales saltos se ejecutan utilizando la instruccion “GOTO” en el Codigo Byte Java.
Para permitir todas las instrucciones de salto posibles en el codigo fuente Natural 1 en el Codigo de Bytes Java, esta instruccion “GOTO” por si sola no es suficiente. No permite saltar desde las llamadas de metodo o los metodos complicados hacia el exterior.
Para permitir saltos fuera de tales ambitos o bloques, la invencion utiliza el manejo de excepciones.
Dentro de la funcion en el codigo fuente Natural representado por la funcion FUNCTION A se encuentra una declaracion “REINPUT” que se ejecutara para saltar a un destino en el codigo hasta la ultima declaracion INPUT ejecutada. En el punto de la declaracion “REINPUT” dentro de la funcion FUNCTION A en el Codigo Byte Java se lanza una excepcion. La excepcion se lanza al llamar a la funcion FUNCTION B.
La funcion FUNCTION A tiene un manejador de excepciones que captura la excepcion lanzada por la funcion FUNCTION B y la maneja. Las excepciones de supervision lanzadas cuando se llama a la funcion FUNCTION A se realizan con un bloque TRY. Si la funcion FUNCTION B provoca una excepcion, el bloque “CATCH” correspondiente de funcion FUNCTION A lo atrapa y lo maneja. El manejo de acuerdo con la invencion, la excepcion se pasa al que llama de la funcion FUNCTION A. Este paso de la excepcion se logra lanzando una excepcion dentro del bloque “CATCH”. El ejemplo de la Fig. 2 muestra como la funcion FUNCTION A captura la excepcion causada por la funcion FUNCTION B y pasa al programa principal MAIN, J2.
5
10
15
20
25
30
35
40
45
50
55
60
65
Si la excepcion causada por la funcion FUNCTION B es una funcion de excepcion en tiempo de ejecucion, FUNCTION A puede no requerir un controlador de excepciones porque la excepcion sera capturada y manejada, a mas tardar, por el manejador de excepciones del programa principal MAIN, tal como se describe a continuacion. Sin embargo, si se requiere un manejo de excepciones de tiempo de ejecucion especifico, un controlador de excepciones en la funcion FUNCTION A aun puede ser ventajoso.
El programa principal MAIN tambien contiene un manejador de excepciones que captura y maneja la excepcion lanzada por la funcion FUNCTION A o lanzada por la funcion FUNCTION B y no capturada/manejada por la funcion FUNCTION A. La captura y manejo de la excepcion causada por la funcion FUNCTION A se realiza en el bloque CATCH del programa principal MAIN. Dado que la ejecucion del programa esta dentro del bloque de ejecucion o del alcance del objetivo de salto, el manejo de excepciones en el programa principal MAIN no tiene que arrojar una excepcion adicional, pero puede usar la instruccion “GOTO” para saltar al objetivo "Target".
Los manejadores de excepciones, las declaraciones para lanzar excepciones y las declaraciones “GOTO” mostradas en la Fig. 2 se insertan como Codigo Byte Java en el Codigo 3 de byte Java por la unidad de manipulacion de codigo 5 en el paso S5. El metodo que se muestra en la Fig. 1b solo requiere insertar el controlador de excepciones, las declaraciones “GOTO” y los objetivos "Target". Lanzar las excepciones, es decir, la funcion “reinput” () ya se ha insertado en el codigo del codigo fuente Java S1.
El Codigo Byte Java modificado de esta manera ahora contiene una serie de manejadores de excepciones y declaraciones “GOTO” que corresponden a las instrucciones “REINPUT” en el codigo fuente Natural 1, incluidos los saltos mas alla de los bloques de ejecucion o areas de alcance.
Por supuesto, el manejo de excepciones no siempre requiere volver a saltar la funcion principal MAIN. Si el objetivo de la instruccion de salto esta dentro de la funcion FUNCTION A, es suficiente volver a la funcion FUNCTION A de la funcion FUNCTION B utilizando una excepcion y luego ejecutar una instruccion “GOTO” dentro del bloque de “CATCH” respectivo en lugar de lanzar una excepcion.
Si el codigo fuente Natural 1 (o el codigo fuente original en un lenguaje de programacion diferente tal como COBOL o PL/1) contiene diferentes tipos de instrucciones de salto, puede ser ventajoso proporcionar varios bloques “CATCH” para el manejo de excepciones. La excepcion puede manejarse de manera diferente dependiendo del tipo de instruccion de salto.
La Fig. 3a muestra un primer sistema que ha sido modificado para ejecutar el metodo de acuerdo con la invencion. Desde dentro de un entorno de desarrollo, el codigo fuente Natural que contiene instrucciones de salto se transforma en el codigo 2 fuente Java, si corresponde, sin instrucciones de salto. Si se crea el codigo fuente de Java eliminando las instrucciones de salto, tambien se generan datos de control, como se menciona en la figura 1a. El codigo fuente de Java se compila con un compilador para crear el Codigo Byte Java, como uno o varios archivos “.class”. El entorno de ejecucion comprende Maquina Virtual de Java JVM. Los archivos “.class” creados por el compilador se cargan en una unidad de manipulacion de codigo intermedio (desacoplada) que inserta los fragmentos de codigo respectivos y/o las instrucciones de salto en el Codigo Byte Java. Los fragmentos de codigo corresponden funcionalmente a las instrucciones de salto en el codigo fuente Natural y pueden implementarse como manipuladores de excepcion, como se muestra al hacer referencia a la Fig. 2. Si el codigo fuente de Java se genero omitiendo las instrucciones de salto como en la Fig. 1a, la unidad de manipulacion de codigo desacoplada tambien recibe los datos de control creados anteriormente. De lo contrario, como en la Fig. 1b, la informacion requerida esta contenida en el Codigo 3 de byte Java. El resultado del proceso de la unidad de manipulacion desacoplada son los archivos ”.class” que se han complementado con instrucciones de salto. Los archivos “.class” luego son leidos por el cargador de clase de JVM y pasados al interprete de la JVM para su ejecucion.
La Fig. 3b muestra un segundo sistema que se ha modificado para ejecutar el metodo dado por la invencion. La diferencia con el sistema dado en la Fig. 3a es basicamente que la unidad de manipulacion de codigo intermedio (la unidad de manipulacion desacoplada en la Fig. 3a) es un reemplazo de la unidad de manipulacion en tiempo de ejecucion para el cargador de clase JVM. En el caso que se muestra aqui, la unidad de manipulacion de tiempo de ejecucion es un derivado del cargador de clase JVM, es decir, ademas de la funcionalidad proporcionada por el cargador de clase JVM, contiene funcionalidad adicional para modificar el Codigo Byte Java que se le ha pasado. En una forma concreta, la funcionalidad del cargador de clase JVM de cargar el codigo de byte puede sobrescribirse, de modo que cargar el Codigo Byte Java mediante la unidad de manipulacion de tiempo de ejecucion ya modifica el Codigo Byte Java.
La ventaja de derivar de la carga de clase JVM es el poco esfuerzo requerido para crear la unidad de manipulacion de tiempo de ejecucion. En una forma diferente, la unidad de manipulacion de tiempo de ejecucion se crea de forma completamente independiente, pero tiene la misma funcionalidad y objeto que se explica en la Fig. 3b.
La compilacion del codigo 2 fuente Java por un compilador en uno o mas archivos 3 “.class”, asi como la modificacion del Codigo 3 de byte Java a traves de la unidad de manipulacion en tiempo de ejecucion, se realiza como se muestra en la Fig. 3a. Aqui tambien, siempre que el codigo 2 fuente Java se haya creado a partir del codigo fuente Natural 1
5
10
15
20
25
30
35
40
45
50
55
60
65
omitiendo las instrucciones de salto como se muestra en la figura 1a, se pueden crear datos de control que se dan a la unidad de manipulacion de tiempo de ejecucion. La unidad de manipulacion de tiempo de ejecucion puede insertar fragmentos de codigo en Codigo 3 de byte Java mediante el uso de los datos de control que son funcionalmente equivalentes a las instrucciones de salto en el codigo fuente Natural 1. De lo contrario, como en la Fig. 1b, toda la informacion necesaria esta presente en el Codigo 3 de byte Java.
Descripcion detallada del primer aspecto de la invencion.
La Fig. 4 muestra la ejecucion de ejemplo para el metodo propuesto por el primer aspecto de la invencion que transfiere el codigo fuente en el lenguaje de programacion original a un codigo que es ejecutable por un entorno de tiempo de ejecucion. En el ejemplo, el codigo fuente en el lenguaje de programacion Natural se transforma en codigo que es ejecutable por la JVM. El lenguaje de programacion Java, como se describe anteriormente, no permite instrucciones de salto.
El codigo fuente Natural 1 contiene una o mas instrucciones de salto. Por ejemplo, el codigo fuente Natural 1 puede contener una o varias instrucciones “REINPUT” que provocan un salto de regreso a un destino en el codigo donde se le solicito al usuario la ultima entrada. En Natural, se puede solicitar al usuario la instruccion “INPUT”. La instruccion “REINPUT” se puede colocar arbitrariamente dentro del codigo fuente Natural.
El codigo fuente Natural 1 puede contener varias subrutinas que pueden anidarse. La instruccion “REINPUT” puede provocar un salto a un punto de ejecucion fuera de la subrutina que ejecuta la instruccion “REINPUT”.
En un primer paso S1, el codigo fuente Natural 1 que contiene una o mas instrucciones de salto se transforma en el codigo 2 fuente Java, por lo que el codigo 2 fuente Java resultante no contiene ninguna instruccion de salto correspondiente. La transformacion del codigo fuente Natural 1 en el codigo 2 fuente Java se puede lograr a traves de un compilador que, por ejemplo, convierte declaraciones o funciones Natural en declaraciones o funciones Java correspondientes.
La traduccion del codigo fuente en el paso S 1 se realiza mejor mediante la creacion del codigo 2 fuente Java que es sintacticamente similar al codigo fuente Natural 1. Esto se logra haciendo una transformacion linea por linea o una de estado a estado. Por lo tanto, se crea un alto grado de codigo fuente reutilizable y sostenible que muestra una fuerte semejanza entre el codigo 1 fuente y el codigo fuente 2.
Como Java no tiene instrucciones de salto que permitan la transformacion directa de la instruccion “REINPUT”, el codigo fuente 2 se crea sin las instrucciones de salto correspondientes. El codigo fuente de Java 2 se extiende insertando fragmentos de codigo que mostraran el comportamiento de la instruccion “REINPUT” una vez ejecutado (ver el paso S5).
En el siguiente paso S2, el codigo 2 fuente Java se alimenta en una unidad 3 de manipulacion de codigo que cambia el codigo 2 fuente Java al insertar fragmentos de codigo en el (como paso S3) que son funcionalmente equivalentes a las instrucciones de salto encontradas en el codigo fuente Natural 1.
Despues de manipular el codigo fuente de Java 2, esta disponible un codigo fuente Java 4 que es semanticamente por completo equivalente al codigo fuente Natural 1. Este codigo fuente Java 4 puede compilarse y ejecutarse por la JVM
Con mas detalle, en un paso S1, el codigo fuente Natural 1 que contiene las instrucciones de salto se transforma en el codigo 2 fuente Java. Para cada instruccion de salto encontrada durante la transformacion del codigo fuente Natural 1 en el codigo 2 fuente Java, se inserta un marcador de salto en el codigo 2 fuente Java que representa una instruccion de salto. Los fragmentos de codigo que son funcionalmente equivalentes a las instrucciones de salto en el codigo fuente Natural 1 se insertaran en los marcadores de salto en el codigo fuente Java 4 mediante la unidad de manipulacion de codigos 3. Una implementacion de la invencion puede insertar una funcion de Java como marcador de salto que codifica para lanzar una excepcion, como se describe con referencia a la figura 5a con mayor detalle. Alternativamente, el marcador de salto se puede insertar como un autentificador, como un comentario de Java. Ademas de la excepcion, se insertan las declaraciones de bucle y las declaraciones de conmutacion para seguir manejando la excepcion.
El marcador de salto insertado en el paso S1 puede ser una funcion de Java que basicamente arroja una excepcion que lo hace sintacticamente cercano a una instruccion “REINPUT” en el codigo fuente Natural 1. La unidad de manipulacion de codigo 3 agrega el manejo de excepciones correspondiente para capturar y tratar la excepcion lanzada por dicha funcion Java. Ademas, la unidad de manipulacion de codigo 3 inserta las instrucciones de salto correspondientes y sus destinos al codigo 4 fuente de Java, como se muestra con mas detalle en la Fig. 5a y Fig. 5b.
El metodo exacto para insertar fragmentos de codigo que son funcionalmente equivalentes al codigo fuente original tambien se explicara haciendo referencia a las Figuras 5a y 5b. Las Figuras 5a y 5b son ejemplos de como los fragmentos de codigo se insertan en el codigo 4 fuente de Java para obtener instrucciones de salto que son
5
10
15
20
25
30
35
40
45
50
55
60
65
semanticamente similares a las del Codigo fuente Natural 1. Los fragmentos de codigo se insertan dentro de S3 mediante la unidad de manipulacion de codigos 3 como se describe con referencia a la Fig. 4.
El fragmento de codigo A2 en la Fig. 5a muestra un codigo fuente de Java que corresponde a un codigo fuente Coboll (o PL/1 y que incluye marcadores de salto). El codigo fuente Cobol original 1 incluye una Instruccion “GOTO” para una posicion especifica. Esta instruccion “GOTO” se transforma en un Metodo "gotoLabel", que representa la declaracion “GOTO” original y un Metodo "Label", que marca el destino del salto.
El fragmento de codigo A3 en la Fig. 5a muestra un codigo fuente de Java que incluye el fragmento de codigo equivalente a la instruccion de salto en el codigo fuente Cobol original 1.
La instruccion "throw new GotoException" arroja una excepcion que detiene el procesamiento. El bloque “catch” correspondiente captura la excepcion y la maneja. El codigo para el manejo de excepciones (“try and catch”) encierra el codigo fuente de Java. Para continuar el procesamiento en el destino de la instruccion se inserta una declaracion de bucle (“while (true) and continue”) dentro del codigo para el manejo de excepciones. Ademas de la declaracion de bucle, se inserta una declaracion condicional (“switch case”) dentro del bucle. El codigo que pertenece a las ramas del caso de las declaraciones de cambio maneja el procesamiento en el destino del salto. El fragmento de codigo B2 en la Fig. 5b muestra un codigo 2 fuente Java que corresponde a un codigo fuente Natural 1 y que incluye marcadores de salto. El codigo fuente natural original 1 incluye una declaracion de “Reinput” que provoca un salto a la ultima declaracion de ’’input”. Los “Reinput” tienen la posibilidad de saltar a una posicion dinamica (a la ultima declaracion de “input”) y tienen la posibilidad de saltar a un marco de pila anterior, es decir, saltar a un destino fuera de la funcion actual.
La declaracion “Reinput” del codigo 1 fuente original se transforma en un metodo " REINPUT" (dentro de la funcion B2-FUNCTION A) y el “INPUT-Statement” del codigo 1 fuente original se transforma en un metodo "INPUT" (dentro de la funcion B2-MAIN), que marca el destino del salto.
La instruccion "throw new GOTOException" (dentro de la FUNCTION A B3) arroja una excepcion que detiene el procesamiento. El bloque “catch” correspondiente (dentro de FUNCTION B3 MAIN) captura la excepcion y la maneja. El codigo para el manejo de excepciones (“try and catch”) encierra el codigo fuente de Java. Para continuar el procesamiento en el destino del salto, se inserta una instruccion de bucle (“while (true) y continue”) dentro del codigo para el manejo de excepciones. Ademas de la instruccion de bucle, se inserta una instruccion condicional (condicional “CASE”) dentro del bucle. El codigo que pertenece a las ramas “CASE” de la instruccion de interrupcion maneja el procesamiento en el destino del salto. El destino del salto, es decir, la ultima instruccion de ’’input” se almacena con
una variable auxiliar "__iw$jump$1". La variable auxiliar se evalua mediante la instruccion del interruptor (interruptor
(__iw$jump$1)).
Para activar un salto, la declaracion de “Reinput” del codigo 1 fuente original se reemplaza por una excepcion (lanzar nueva “ReinputException”). La excepcion lanzada es atrapada por el manejador de excepciones (“Catch (ReinputException)”). En el ejemplo de codigo B3-FUNCTION A, el destino del salto esta fuera de la funcion, es decir, fuera del marco de pila de la funcion. Por lo tanto, cuando se lanza la excepcion dentro de la funcion B3-FUNCTION A, la pila se desenrolla (es decir, las ’’input” se eliminan de la pila) hasta que se encuentra un manejador de excepciones (en el ejemplo, el manejador de excepciones respectivas se encuentra en la funcion B3-MAIN) que esta preparado para manejar la excepcion (Catch). La excepcion es capturada por el manejador de excepciones manejado como se describe con referencia a la Fig. 5a.
La Fig. 6 muestra un sistema que ha sido modificado para ejecutar el metodo de acuerdo con el primer aspecto de la invencion. Desde un entorno de desarrollo, el codigo fuente Natural que contiene instrucciones de salto se transforma en el codigo 2 fuente Java que incluye marcadores de salto. El codigo fuente de Java se manipula con una unidad de manipulacion (precompilador) para crear el codigo 4 fuente de Java que contiene fragmentos de codigo funcionalmente equivalentes a las instrucciones de salto en el codigo fuente natural. El codigo 4 de fuente manipulado es compilado por un compilador para crear Codigo Byte Java que es ejecutable por una Maquina Virtual de Java.
El entorno de tiempo de ejecucion (ejecucion) comprende la Maquina Virtual de Java JVM o un entorno de ejecucion “NET”. Los archivos “.class” creados por el compilador se cargan en Maquina Virtual de Java y se ejecutan mediante Maquina Virtual de Java.
Las tecnicas actuales pueden implementarse en circuitos electronicos digitales, o en hardware de ordenador, firmware, software o en combinaciones de ellos. El aparato de la invencion puede implementarse en un producto de programa informatico tangiblemente incorporado en un dispositivo de almacenamiento legible por maquina para su ejecucion mediante un procesador programable. Los pasos del metodo de acuerdo con la invencion pueden ser realizados por un procesador programable que ejecuta un programa de instrucciones para realizar funciones de la invencion operando sobre la base de datos de entrada y generando datos de salida. La invencion puede implementarse en uno o varios programas informaticos que son ejecutables en un sistema programable, que incluye al menos un procesador programable acoplado para recibir datos de y transmitir datos a un sistema de almacenamiento, al menos un dispositivo de entrada y al menos un dispositivo de salida, respectivamente. Los programas de ordenador pueden implementarse
5
10
15
20
25
30
en un lenguaje de programacion de alto nivel u orientado a objetos, y/o en un ensamblador o codigo de maquina. El lenguaje o el codigo pueden ser un lenguaje o codigo compilado o interpretado. Los procesadores pueden incluir microprocesadores de proposito general y especial. Un procesador recibe declaraciones y datos de memorias, en particular de memorias de solo lectura y/o memorias de acceso aleatorio. Un ordenador puede incluir uno o mas dispositivos de almacenamiento masivo para almacenar datos; tales dispositivos pueden incluir discos magneticos, como discos duros internos y discos extraibles; discos magnetoopticos; y discos opticos. Los dispositivos de almacenamiento adecuados para incorporar tangiblemente las declaraciones y los datos del programa informatico incluyen todas las formas de memoria no volatil, incluyendo a modo de ejemplo dispositivos de memoria de semiconductores, tales como EPROM, EEPROM y dispositivos de memoria “flash”; discos magneticos tales como discos duros internos y discos extraibles; discos magneto-opticos; y discos de CD-ROM. Cualquiera de los anteriores puede complementarse o incorporarse en ASICs (circuitos integrados especificos de la aplicacion).
Los sistemas informaticos o las redes informaticas distribuidas, como se menciona anteriormente, pueden usarse, por ejemplo, para producir bienes, entregar piezas para ensamblar productos, controlar procesos tecnicos o economicos o implementar actividades de telecomunicaciones.
Para proporcionar la interaccion con un usuario, la invencion puede implementarse en un sistema informatico que tiene un dispositivo de visualizacion tal como un monitor o pantalla LCD para mostrar informacion al usuario y un teclado y un dispositivo senalador tal como un mouse o una bola de seguimiento para que el usuario puede proporcionar ’’input” al sistema informatico. El sistema informatico puede programarse para proporcionar una interfaz de usuario grafica o de texto a traves de la cual los programas interactuan con los usuarios.
Un ordenador puede incluir un procesador, una memoria acoplada al procesador, un controlador de disco duro, un controlador de video y un controlador de entrada/salida acoplado al procesador por un bus de procesador. El controlador del disco duro esta acoplado a una unidad de disco duro adecuado para almacenar programas de ordenador ejecutables, incluidos los programas que incorporan la tecnica actual. El controlador de I/O se acopla mediante bus I/O a una interfaz de I/O. La interfaz de I/O recibe y transmite en forma analogica o digital por al menos un enlace de comunicacion. Dicho enlace de comunicacion puede ser un enlace en serie, un enlace paralelo, una red de area local o un enlace inalambrico (por ejemplo, un enlace de comunicacion de RF). Un enlace de comunicacion de RF). Una pantalla esta acoplada a una interfaz, que esta acoplada a un bus de I/O. Un teclado y un dispositivo senalador tambien estan acoplados al bus I/O. Alternativamente, se pueden usar buses separados para el dispositivo senalador de teclado y la interfaz de I/O.

Claims (11)

  1. 5
    10
    15
    20
    25
    30
    35
    40
    45
    50
    55
    60
    65
    REIVINDICACIONES
    1. Un metodo implementado por ordenador para generar un codigo a partir del codigo (1) fuente original, mediante el cual el codigo (1) fuente original incluye al menos una instruccion de salto y existe en un lenguaje de programacion de fuente, comprendiendo el metodo:
    - crear un codigo (2) intermedio a partir del codigo (1) fuente original omitiendo al menos una instruccion de salto, existiendo el codigo (2) intermedio en un lenguaje de programacion de destino,
    - cargar (S2) el codigo (2) intermedio en una unidad (3) de manipulacion de codigo, y
    - crear (S3), a traves de la unidad (3) de manipulacion de codigo, del codigo (4) fuente de destino desde el codigo (2) intermedio, en donde la creacion comprende una insercion de al menos un fragmento de codigo fuente en el codigo (4) fuente de destino, por lo que el al menos un fragmento de codigo fuente insertado es funcionalmente equivalente a al menos una instruccion de salto omitida, y por lo que al menos un fragmento de codigo fuente insertado comprende
    - una instruccion que arroja una excepcion,
    - al menos una declaracion de bucle dentro del codigo fuente para el manejo de excepciones,
    - al menos una declaracion condicional dentro de un bloque “Try” dentro de la declaracion de bucle,
    - un bloque de captura correspondiente, que captura la excepcion, y vuelve a la declaracion de bucle, y
    - una variable auxiliar que contiene el destino del salto y que es evaluada por la declaracion condicional.
  2. 2. Un metodo implementado por ordenador para generar un codigo a partir del codigo (1) fuente original, mediante el cual el codigo (1) fuente original incluye al menos una instruccion de salto y existe en un lenguaje de programacion de origen, comprendiendo el metodo:
    - crear un codigo (2) intermedio a partir del codigo (1) fuente original mediante la sustitucion de al menos una instruccion de salto por al menos un marcador de salto, el codigo (2) intermedio existente en un lenguaje de programacion de destino,
    - cargar en (S2) el codigo (2) intermedio en una unidad (3) de manipulacion de codigo, y
    - crear en (S3), a traves de la unidad (3) de manipulacion de codigo, el codigo (4) fuente de destino del codigo (2) intermedio, donde la creacion comprende una insercion de al menos un fragmento de codigo 1fuente en el codigo (4) fuente de destino, por lo que el al menos un fragmento de codigo fuente insertado es funcionalmente equivalente a la al menos una instruccion de salto reemplazada, y por lo cual el al menos un fragmento de codigo fuente insertado comprende
    - una instruccion que arroja una excepcion,
    - al menos una declaracion de bucle dentro del codigo fuente para el manejo de excepciones,
    - al menos una declaracion de cambio dentro de un bloque “Try” dentro de la declaracion de bucle,
    - un bloque de captura correspondiente que captura la excepcion, y vuelve a la declaracion de bucle, y
    - una variable auxiliar que contiene el destino del salto y que se evalua mediante la declaracion condicional.
  3. 3. Un metodo de acuerdo con la reivindicacion 1 o 2, en el que el al menos un fragmento de codigo fuente insertado en el codigo (4) fuente de destino realiza declaraciones de programa que son funcionalmente equivalentes:
    - a una instruccion de salto estatica colocada en el codigo fuente original, si el destino de la instruccion de salto esta dentro del marco de pila de la instruccion de salto, y/o
    - a una instruccion de salto dinamica colocada en el codigo fuente original, si el destino de la instruccion de salto esta fuera del cuadro de pila de la instruccion de salto, y/o
    - a una instruccion de salto dinamica colocada en el codigo fuente original, si el destino de la instruccion de salto esta dentro del marco de pila de la instruccion de salto.
    5
    10
    15
    20
    25
    30
    35
    40
    45
    50
    55
    60
  4. 4. Un metodo de acuerdo con una de las reivindicaciones anteriores, en el que el lenguaje de programacion de destino comprende:
    - un lenguaje de programacion que no permite instrucciones de salto del tipo “GOTO” en su codigo fuente, y/o
    - al menos uno de Java, y un lenguaje de programacion que es ejecutable en el entorno de tiempo de ejecucion .NET y/o
    por lo que el lenguaje de programacion fuente comprende
    - un lenguaje de programacion que permite instrucciones de salto en su codigo fuente, y/o
    - al menos uno de Cobol, Natural y PL/1.
  5. 5. Un metodo de acuerdo con una de las reivindicaciones anteriores, comprendiendo ademas el metodo un paso de crear el codigo (5) final a partir del codigo (4) fuente de destino, por lo que el codigo (5) final comprende un codigo independiente de hardware, estando el codigo (5) final para su ejecucion en un entorno de tiempo de ejecucion.
  6. 6. Una unidad (3) de manipulacion de codigo para generar un codigo, por lo que la unidad (3) de manipulacion de codigo esta adaptada para cargar el codigo (2) intermedio que se ha creado a partir del codigo (1) fuente original, por lo que el codigo (1) fuente original incluye en al menos una instruccion de salto, omitir al menos una instruccion de salto y generar un codigo (4) fuente de destino a partir del codigo (2) intermedio, por lo que la generacion del codigo
    (4) fuente de destino comprende la insercion de al menos un fragmento de codigo fuente en el codigo (4) fuente de destino, en el que al menos un fragmento de codigo fuente insertado es funcionalmente equivalente a al menos una instruccion de salto omitido, y por lo que al menos un fragmento de codigo fuente insertado comprende una instruccion que arroja una excepcion, en al menos una instruccion de bucle dentro del codigo fuente para el manejo de excepciones, al menos una declaracion condicional dentro de un bloque de prueba dentro de la instruccion de bucle, un bloque de captura correspondiente que captura la excepcion, y regresa al bloque de prueba, y una variable auxiliar que contiene el destino del salto y que es evaluada por la instruccion condicional.
  7. 7. Una unidad (3) de manipulacion de codigo para generar un codigo, por lo que la unidad (3) de manipulacion de codigo esta adaptada para cargar el codigo (2) intermedio que se ha creado a partir del codigo (1) fuente original, por lo que el codigo (1) fuente original incluye en al menos una instruccion de salto, al reemplazar en al menos una instruccion de salto por al menos un marcador de salto, y para generar un codigo (4) fuente de destino del codigo (2) intermedio, por lo que la generacion del codigo (4) fuente de destino comprende la insercion de al menos un fragmento de codigo fuente en el codigo (4) fuente de destino, por lo que el al menos un fragmento de codigo fuente insertado es funcionalmente equivalente a al menos una instruccion de salto reemplazada, y por lo que el al menos un fragmento de codigo fuente insertado comprende una declaracion que arroja una excepcion, al menos una declaracion de bucle dentro del codigo fuente para el manejo de excepciones, al menos una declaracion condicional dentro de un bloque de prueba dentro de la instruccion de bucle, un bloque de captura correspondiente que captura la excepcion, y regresa al bloque de prueba, y una variable auxiliar que contiene el destino del salto y que es evaluada por la instruccion condicional.
  8. 8. Un sistema para generar un codigo, que comprende:
    - un compilador para la creacion (S1) del codigo (2) intermedio del codigo (1) fuente original, mediante el cual el codigo (1) fuente original incluye al menos una instruccion de salto, omitiendo al menos una instruccion de salto o reemplazando a en al menos una instruccion de salto por un marcador de salto, existiendo el codigo fuente original en un lenguaje de programacion de fuente y
    - una unidad (3) de manipulacion de codigo de acuerdo con la reivindicacion 6 o la reivindicacion 7.
  9. 9. Un sistema de acuerdo con la reivindicacion 8, en el que el al menos un fragmento de codigo fuente insertado en el codigo (4) fuente de destino realiza declaraciones de programa que son funcionalmente equivalentes a una instruccion de salto dinamica colocada en el codigo fuente original, si el destino de la instruccion de salto esta fuera del marco de pila de las instrucciones de salto.
  10. 10. Un sistema de acuerdo con una de las reivindicaciones 8 a 9, que comprende ademas medios para crear el codigo
    (5) final del codigo (4) fuente de destino, por lo que el codigo (5) final comprende un codigo independiente de hardware, estando el codigo (5) final para su ejecucion en un entorno de tiempo de ejecucion.
  11. 11. Un producto de programa informatico con un codigo de aplicacion que, cuando se carga en una unidad de procesamiento de datos, ejecuta el metodo de acuerdo con una de las reivindicaciones 1 a 5.
ES11807873.2T 2010-10-28 2011-10-28 Método y sistema para generar un código Active ES2645010T3 (es)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
PCT/EP2010/066414 WO2012055441A1 (en) 2010-10-28 2010-10-28 Method and system for generating code
WOPCT/EP2010/066414 2010-10-28
PCT/EP2011/069044 WO2012056023A1 (en) 2010-10-28 2011-10-28 Method and system for generating code

Publications (1)

Publication Number Publication Date
ES2645010T3 true ES2645010T3 (es) 2017-12-01

Family

ID=43778370

Family Applications (1)

Application Number Title Priority Date Filing Date
ES11807873.2T Active ES2645010T3 (es) 2010-10-28 2011-10-28 Método y sistema para generar un código

Country Status (14)

Country Link
US (1) US9519465B2 (es)
EP (1) EP2633399B1 (es)
CY (1) CY1119758T1 (es)
DK (1) DK2633399T3 (es)
ES (1) ES2645010T3 (es)
HR (1) HRP20171622T1 (es)
HU (1) HUE035094T2 (es)
LT (1) LT2633399T (es)
PL (1) PL2633399T3 (es)
PT (1) PT2633399T (es)
RS (1) RS56555B1 (es)
SI (1) SI2633399T1 (es)
SM (1) SMT201700500T1 (es)
WO (2) WO2012055441A1 (es)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9276829B2 (en) * 2013-02-07 2016-03-01 International Business Machines Corporation Transparently tracking provenance information in distributed data systems
US9710243B2 (en) * 2013-11-07 2017-07-18 Eagle Legacy Modernization, LLC Parser that uses a reflection technique to build a program semantic tree
CN107179935B (zh) * 2016-03-11 2021-01-29 华为技术有限公司 一种指令执行方法及虚拟机
CN110825386B (zh) * 2019-11-01 2023-07-14 腾讯科技(深圳)有限公司 代码的编译方法和装置、存储介质
US11899570B2 (en) 2019-12-12 2024-02-13 Cognizant Technology Solutions India Pvt. Ltd. System and method for optimizing assessment and implementation of microservices code for cloud platforms
US12014195B2 (en) 2019-12-12 2024-06-18 Cognizant Technology Solutions India Pvt. Ltd. System for providing an adaptable plugin framework for application transformation to cloud
CN111399850B (zh) * 2020-03-27 2023-05-16 象链网络科技(上海)有限公司 基于区块链的多语言智能合约编译方法
CN111475152B (zh) * 2020-04-14 2023-03-14 中国人民解放军战略支援部队信息工程大学 一种代码处理方法及装置
US11294649B1 (en) * 2021-01-13 2022-04-05 Amazon Technologies, Inc. Techniques for translating between high level programming languages
CN113254023B (zh) * 2021-05-14 2023-08-11 网易(杭州)网络有限公司 对象读取方法、装置和电子设备
US12536005B2 (en) 2023-02-13 2026-01-27 Oracle International Corporation Transforming a Java program using a symbolic description language model
US12450045B2 (en) 2023-02-13 2025-10-21 Oracle International Corporation Modeling java source code in a symbolic description language
US20240338186A1 (en) * 2023-04-06 2024-10-10 Oracle International Corporation Compile-Time Checking For Exhaustive Switch Statements And Expressions
US12511107B2 (en) * 2023-05-11 2025-12-30 Oracle International Corporation Lowering Java try statements in a symbolic description language

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6002874A (en) * 1997-12-22 1999-12-14 International Business Machines Corporation Method and system for translating goto-oriented procedural languages into goto-free object oriented languages
US6993751B2 (en) * 2001-05-14 2006-01-31 Microsoft Corporation Placing exception throwing instructions in compiled code
US8332828B2 (en) * 2002-11-20 2012-12-11 Purenative Software Corporation System for translating diverse programming languages
US20060031820A1 (en) * 2004-08-09 2006-02-09 Aizhong Li Method for program transformation and apparatus for COBOL to Java program transformation

Also Published As

Publication number Publication date
PL2633399T3 (pl) 2018-01-31
US9519465B2 (en) 2016-12-13
WO2012056023A1 (en) 2012-05-03
HUE035094T2 (en) 2018-05-02
SMT201700500T1 (it) 2017-11-15
DK2633399T3 (da) 2017-11-06
HRP20171622T1 (hr) 2017-12-01
RS56555B1 (sr) 2018-02-28
PT2633399T (pt) 2017-11-15
CY1119758T1 (el) 2018-06-27
LT2633399T (lt) 2018-02-12
EP2633399A1 (en) 2013-09-04
EP2633399B1 (en) 2017-07-26
WO2012055441A1 (en) 2012-05-03
SI2633399T1 (sl) 2017-12-29
US20130247017A1 (en) 2013-09-19

Similar Documents

Publication Publication Date Title
ES2645010T3 (es) Método y sistema para generar un código
Schardl et al. Tapir: Embedding fork-join parallelism into LLVM's intermediate representation
Hilsdale et al. Advice weaving in AspectJ
Bertolli et al. Integrating GPU support for OpenMP offloading directives into Clang
Wagelaar et al. Translational semantics of a co-evolution specific language with the EMF transformation virtual machine
Brachthäuser et al. Effect handlers for the masses
US8793654B2 (en) Method and a system for generating a software product
CN103514027B (zh) 一种增强软件保护易用性的方法
Diaz et al. On the implementation of GNU Prolog
Wagner et al. Realistic realizability: Specifying ABIs you can count on
CN101944061B (zh) 一种代码调试的方法及装置
Kats et al. Mixing source and bytecode: a case for compilation by normalization
Horn The TTC 2013 flowgraphs case
Schwarz Peeking inside the box: Attribute-oriented programming with java 1.5, part
Bettini et al. XTRAITJ: Traits for the Java platform
Reynolds et al. On the feasibility of an AOSD approach to Linux kernel extensions
Götz et al. Modulith: A Game Engine Made for Modding
Prasad et al. AOP support for C#
Briain Introduction to Programming
Chalin et al. The architecture of jml4, a proposed integrated verification environment for jml
Licker Low-level cross-language post-link optimisation
Newly-Developed Name and Surname: Philipp von Perponcher
Kats Supporting language extension and separate compilation by mixing Java and bytecode
Gauthier et al. XToF-A Tool for Tag-based Product Line Implementation.
Duhem et al. Making sbt macro-aware