package tokens;

/**
 * Ein Token ist ein zusammengehöriges Symbol, das Teil eines mathematischen Ausdrucks ist. Es entspricht ungefähr
 * einem "Wort"; hier kann es entweder Operatoren oder Operanden von Rechenoperationen darstellen. Eine einzelne Zahl
 * (nicht Ziffer) ist bspw. ein Token, die Variable x ist ein Token, ein Operator ist ein Token, der Name einer Funktion
 * ist ein Token.
 */
public class Token {

    protected TokenType type;

	// TODO: Schreibe zwei(2) Konstruktoren, die die jeweiligen Bedingungen erfüllen:

    /**
     * Es soll kein Token ohne Type konstruiert werden, außer von Unterklassen.
     */
    

    /**
     * Erzeugt einen Token mit dem angegebenen Typ.
     * @param type Tokentyp.
     */
    

	// TODO: Schreibe einen Getter für den TokenType
    /**
     * getType gibt den Typ dieses Tokens zurück.
     * @return Tokentyp.
     */
     

    /**
     * toString gibt den Token in lesbarer Form aus.
     * @return Token als String.
     */
    public String toString() {
        switch (this.type) {
            case X:
                return "x";
            case PLUS:
                return "+";
            case MINUS:
                return "-";
            case TIMES:
                return "*";
            case DIVIDED:
                return "/";
            case POWER:
                return "^";
            default:
                throw new IllegalArgumentException("Keine toString-Implementierung für tokenType " + this.type);
        }
    }
}
