package shuntingyard;

import tokens.Token;
import tokens.TokenType;

import java.util.ArrayList;
import java.util.EmptyStackException;
import java.util.Stack;


/**
 * ShuntingYard stellt die Methode convertToRPN() bereit, die ein Array von Tokens in Infix-Notation mithilfe des
 * Shunting-Yard-Algorithmus von Dijkstra in ein Array von Tokens in umgekehrter polnischer Notation konvertiert.
 */
public class ShuntingYard {
	
	// TODO: Pseudocode des Shunting-Yard-Algorithmus in Java implementieren. Benutze einen Switch-Case.
    /**
     * convertToRPN wandelt das Array tokens, das einen mathematischen Ausdruck in Infix-Schreibweise darstellt,
     * in ein Array von Tokens um, das denselben Ausdruck in umgekehrter polnischer Notation darstellt.
     *
     * Hierfür wird der Shunting-Yard-Algorithmus genutzt, siehe https://en.m.wikipedia.org/wiki/Shunting-yard_algorithm
     *
     * @param tokens Tokens in Infix-Schreibweise.
     * @return Tokens in umgekehrter polnischer Notation.
     */
    public static Token[] convertToRPN(Token[] tokens) {
		// In result kann das neue Ergebnis Stück für Stück geschrieben werden
        ArrayList<Token> result = new ArrayList<>();
		// Bitte Stack benutzen. Syntax wie in Part3.
        Stack<Token> stack = new Stack<>();

        //TODO: hier den Algorithmus implementieren


        // Hier wird die result Liste in ein Array vom Typ Token umgewandelt
        return result.toArray(new Token[0]);
    }
}
