package pl.edu.amu.wmi.daut.re;
import java.util.List;
/**
* Klasa abstrakcyjna fabryki operatorów, czyli czegoś, co tworzy
* operatory.
*/
public abstract class RegexpOperatorFactory {
/**
* Główna metoda tworząca operator. Argumentem jest lista
* parametrów
*/
public RegexpOperator createOperator(List<String> params) {
if (params.size() != numberOfParams())
throw new IllegalArgumentException("unexpected number of parameters");
return doCreateOperator(params);
}
/**
* Zwraca arność tworzonego operatora (jego liczbę argumentów).
*/
public abstract int arity();
/**
* Zwraca liczbę parametrów operatora.
*
* Należy odróżnić argumenty i parametry: argumenty są (pod)wyrażeniami
* regularnymi, natomiast parametry to dodatkowe wartości
* modyfikujące działanie operatora. Np. operator (abc){4,10}
* ma jeden argument "(abc)" i dwa parametry (4 i 10).
*/
public abstract int numberOfParams();
/**
* Właściwa metoda tworząca operator, nie musi
* już sprawdzać, czy zgadza się liczba parametrów
* (robi to createOperator).
*/
protected abstract RegexpOperator doCreateOperator(List<String> params);
};