About
Games
Software
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 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.

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:
public void error(String message)
Se invoca a este método cada vez que se produce un error en la interpretación del código Forth.
public void output(String o)
Este método se invoca cada vez que el programa realiza una salida.
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 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