source: tol/TolJava/TOLJava-Ejemplos/src/com/hcarralero/toljava/ejemplos/Ejemplo05.java @ 9887b93

1941-docker-image-to-testdevel
Last change on this file since 9887b93 was 9887b93, checked in by Humberto Carralero <hacarralero@…>, 15 years ago

Importing TolJava

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@3900 be4846ae-f051-483a-831f-b64e7d08527f

  • Property mode set to 100644
File size: 6.2 KB
Line 
1package com.hcarralero.toljava.ejemplos;
2
3//Se deben importar del paquete com.hcarralero.toljava todas las clases a usarse,
4//para este ejemplo se requieren las clases: TOLMachine, TOLMachineException, TOLReal y TOLCode.
5import com.hcarralero.toljava.TOLMachine;
6import com.hcarralero.toljava.TOLMachineException;
7import com.hcarralero.toljava.TOLReal;
8import com.hcarralero.toljava.TOLCode;
9import com.hcarralero.toljava.TOLObject;
10
11/**
12 * 5to Ejemplo de TOLJava para Consola:
13 *  1) Se crea una instancia de TOLMachine.
14 *  2) Se ejecuta una sentencia TOL para definir las funciones sumar y restar, así como las
15 *     la variable f de tipo Code con valor inicial sumar y la variable x de tipo Real.
16 *  3) Se procesa el resultado.
17 *  4) Se muestran los mensajes devueltos por el intéprete de TOL.
18 *  5) Se obtiene el valor de la variable f (debe ser el valor inicial "sumar").
19 *  6) Se muestra el valor de la variable f.
20 *  7) Se cambia el valor de la variable f por un nuevo valor: restar.
21 *  8) Se muestra el nuevo valor de la variable f.
22 *  9) Se crea un arreglo de objetos que servirá como lista de parámetros a la llamada a
23 *     la función f, el 1er parámetro es una constante de Tipo TOLReal y el 2do es una
24 *     cadena que representa el nombre de variable "x".
25 *  10) Se hace una llamada a la función f pasando como argumentos el nombre de 
26 *      función "f" y el arreglo de parámetros.  El resultado es asignado a la variable r3.
27 *  11) Se muestra el valor de r3 que es resultado de invocar la función f.
28 *
29 * @author Humberto Andrés Carralero López (hcarralero@gmail.com)
30 * @version 1.0
31 * @see com.hcarralero.toljava.TOLMachine, com.hcarralero.toljava.TOLMachineException,
32 *      com.hcarralero.toljava.TOLReal, com.hcarralero.toljava.TOLCode.
33 */
34public class Ejemplo05 {
35
36    /**
37     * @param args los argumenetos de la línea de comandos.
38     */
39    public static void main(String[] args) {
40        //Se crea una instancia de la clase TOLMachine.
41        TOLMachine tm= new TOLMachine();
42        //En una cadena se almacena el código TOL que se ejecutará; en este caso
43        //el código es para definir las funciones sumar y restar, así como la viariable f de tipo Code.
44        String code= "Real sumar(Real a, Real b) {Real r= a+b; r}; Real restar(Real a, Real b) {Real r= a-b; r}; Code f= sumar; Real x=5;";
45        //Se invoca el intérprete de TOL para ejecutar el código pasado por parámetro.
46        //El resultado es un arreglo de cadenas Object.
47        Object res[]= tm.execute(code);
48        System.out.println();
49        if (res==null) {
50            //Si el resultado es nulo, entonces se ha producido un error en el acceso a TOL.
51            System.out.println("ERROR ACCEDIENDO A TOL->execute");
52        } else {
53            //Se ha logrado acceder al intérprete y ejecutar el código.
54            int ne= 0;
55            try {
56                //La primera cadena representa el número de errores detectado por el Intérprete de TOL.
57                ne= Integer.parseInt((String)res[0]);
58                if (ne>0) {
59                    //El intérprete de TOL reportó al menos un error.
60                    System.out.println("Se ha(n) detectado "+ne+" error(es)");
61                } else {
62                    //El intérprete de TOL no reportó errores.
63                    System.out.println("No se han detectado errores");
64                }
65                //Los siguientes objetos que conforman la respuesta del intérprete pueden ser:
66                //Warnings, Errores o mensajes generados por el código TOL ejecutado.
67                //Para procesar los mensajes generados debe comprender el formato de
68                //estos mensajes. (Consulte la documentación de TOL).
69                for (int i= 1; i<res.length; ++i) {
70                    //Cada objeto es una cadena
71                    String strRes= (String)res[i];
72                    //Se obtiene la longitud de la cadena.
73                    int l= strRes.length();
74                    if (strRes.charAt(0)=='<'&&strRes.charAt(2)=='>'&&(strRes.charAt(1)=='E'||strRes.charAt(1)=='W')&&l>=7) {
75                        //En este caso el mensaje es un 'W'arning o un 'E'rror.
76                        System.out.println("\t"+strRes.substring(3, l-5));
77                    } else {
78                        //En este caso es un mensaje común.
79                        System.out.println("\t"+strRes);
80                    }
81                }
82                //Se obtiene el valor de la variable f (debe ser el valor inicial "sumar").
83                Object objf= tm.getVariable("f");
84                //Se imprime el valor de la variable f.
85                System.out.println("Valor de f:["+objf+"]");
86                //Se asigna un nuevo valor a f, la función "restar" (el valor de información no se tiene en cuenta).
87                tm.setVariableValue( "f", new TOLCode("restar", null));
88                //Se obtiene nuevamente el valor de la variable f (ya modificado debería ser "restar").
89                objf= tm.getVariable("f");
90                //Se imprime el nuevo valor de la variable f.
91                System.out.println("NUEVO Valor de f:["+objf+"]");
92                //Se crea un arreglo de objetos que servirá como lista de parámetros a la llamada a
93                //la función f, el 1er parámetro es una constante de Tipo TOLReal y el 2do es una
94                //cadena que representa el nombre de variable "x".
95                Object pars[]= {new TOLReal(12), "x"};
96                //Se hace una llamada a la función f pasando como argumentos el nombre de
97                //función "f" y el arreglo de parámetros. El resultado es asignado a la variable r3.
98                TOLObject or3= tm.callCode("f", pars);
99                TOLReal r3= (TOLReal)or3;
100                //Se muestra el valor de r3 que es resultado de invocar la función f.
101                System.out.println("f(12, x)="+r3);
102            } catch (NumberFormatException ex) {
103                //Algo inusual (ERROR INTERNO DE TOLJava) ha ocurrido.
104                System.out.println("ERROR DE ACCESO AL NÚMERO DE ERRORES");
105            } catch (TOLMachineException ex) {
106                //Algún error ha ocurrido en el acceso a la variable f.
107                System.out.println("ERROR accediendo a la variable f: "+ex.getMessage());
108            }
109        }
110    }
111}
Note: See TracBrowser for help on using the repository browser.