Skip to content

Implementación de Funciones Auxiliares

La gramática atribuida obtenida en este capítulo requiere de una función auxiliar sameType, tal y como se declaró en la especificación:

NameDescription
sameType(type_a, type_b)True if the params are equal

A la hora de implementar las funciones auxiliares que surjan en una gramática atribuida, se tienen fundamentalmente dos opciones:

  1. Añadir dichas operaciones en los nodos del ast. De esta manera, se añadiría al interfaz Type un método que indique si es igual a otro tipo que se pase como parámetro.
    java
     public interface Type {
          // ...
          public boolean sameType(Type other);
     }
  2. La otra opción es añadir las funciones auxiliares en el visitor de la etapa que se está implementado.

En este tutorial se optará por la segunda opción. Dado que se está utilizando el patrón visitor, se intentará cumplir su propósito de que el código de una nueva operación que se quiera aplicar sobre el modelo (el árbol) no se implemente sobre este. De esta manera, si se añaden o eliminan operaciones (visitors), esto no afectará a los nodos del árbol y se evita su acoplamiento.

Por ello, dado que sameType es una operación requerida sólo por esta etapa, se implementará en este visitor como un método privado.

java
public class TypeChecking extends DefaultVisitor {

    // ... (ommited for brevity)


    //# Auxiliary methods -----------

    private boolean sameType(Expression a, Expression b) {
        return (a.getType().getClass() == b.getType().getClass());
    }

}