Un intérprete sencillo

En este documento se explica el funcionamiento del intérprete que se incluye en la distribución de SFI.

Se ha empleado el código a fecha de 2004-01-09, que puede variar en un futuro.

La aplicación

La aplicación es un applet que consta de 2 áreas de texto y un botón que comienza la ejecución del código. El área de texto superior permite la escritura y es donde escribirémos el código Forth, mientras que el área de texto inferior es donde veremos la salida de la ejecución y es solo lectura.

el applet
Detalle del applet

La aplicación no contiene una instancia del la clase sfi. En su lugar es necesario crear una subclase que reemplace los métodos:

La clase interpreter

La clase que hereda de la clase sfi se ha llamado interpreter, y es la siguiente:

public class interpreter extends sfi {

	private java.awt.TextArea in;
	private java.awt.TextArea out;

	/** Creates a new instance of interpreter */
	public interpreter(java.awt.TextArea pin, java.awt.TextArea pout)
	{
		out=pout;
		in=pin;
        }

	/* setup our custom in/out process */
	public void error(String message)
	{
		output("Error line " + line() + " (col. " + col() +
	               ") : " + message);

	        in.setCaretPosition(ip());
	}

        public void output(String o)
	{
	       out.append(o);
	}

}

De esta forma conseguimos que el intérprete emplee como salida un TextArea de nuestro applet y además, gracias al paso del TextArea desde el que se obtiene el código, posicionar el cursor en el punto donde se detecta el error.

También se emplean en error los métodos line(), col() e ip(). Son métodos consultores que nos muestran el número de linea, la columna y la posición del programa en el momento actual.

La clase base emplea por defecto System.out para la salida.

El applet scriptTester

El applet que contiene a la clase interpreter es sencillo. Vamos a concentrarnos en el método que se invoca al pulsar Execute:

private void ExecuteActionPerformed(java.awt.event.ActionEvent evt) {
	
	Output.setText("");
	
	interpreter i=new interpreter(Input, Output);
	i.execute(Input.getText());

}

Este método limpia la salida (el TextArea superior) y crea una nueva instancia de la clase interpreter, pasando como parámetros los dos TextArea del applet. Depués se llama al método execute(String program) del intérprete con el código Forth a ejecutar, en este caso, el texto introducido en el TextArea superior.

Esta es una aplicación muy sencilla y la comunicación con el intérprete es nula, pero sirve como ejemplo de como crear un intérprete y para probar la clase sfi.


Última modificación: 9 de Enero de 2004