Problemas con un algoritmo de patio de maniobras

He implementado con éxito un algoritmo de patio de maniobras en Java. El algoritmo en sí mismo era simple, sin embargo, estoy teniendo problemas con el tokenizer. Actualmente el algoritmo funciona con todo lo que quiero excluyendo una cosa. ¿Cómo puedo saber la diferencia entre resta (-) y negativa (-)

como 4-3 es resta pero -4 + 3 es negativo

Ahora sé cómo averiguar cuándo debería ser negativo y cuándo debería ser menos, pero en qué lugar del algoritmo debería colocarse porque si lo usa como una función, no siempre funcionará, por ejemplo,

3 + 4 * 2 / - (1 - 5) ^ 2 ^ 3

cuando 1-5 se convierte en -4 se convertirá en 4 antes de que se cuadre y cube

como 3 + 4 * 2 / cos (1 - 5) ^ 2 ^ 3, tomarías el coseno antes de cuadrar y cortar en cubos

pero en matemática real no lo haría con un - porque lo que realmente dice es 3 + 4 * 2 / - ((1 - 5) ^ 2 ^ 3) para tener el valor correcto

Respuestas a la pregunta(4)

Su respuesta a la pregunta