* For example,
* {@code 2 * (3 + 4)}
* becomes
* {@code 2 3 4 + *}.
*
* @param expression
* @return
* @since 2019-03-17
*/
private String convertExpressionToReversePolish(final String expression) {
Objects.requireNonNull(expression, "expression must not be null.");
// TODO method stub org.unitConverter.expressionParser.ExpressionParser.convertExpressionToPolish(expression)
throw new UnsupportedOperationException();
}
/**
* Determines whether an inputted string is an object or an operator
*
* @param token
* string to input
* @return type of token it is
* @throws NullPointerException
* if {@code expression} is null
* @since 2019-03-14
*/
private TokenType getTokenType(final String token) {
Objects.requireNonNull(token, "token must not be null.");
if (this.unaryOperators.containsKey(token))
return TokenType.UNARY_OPERATOR;
else if (this.binaryOperators.containsKey(token))
return TokenType.BINARY_OPERATOR;
else
return TokenType.OBJECT;
}
/**
* Parses an expression.
*
* @param expression
* expression to parse
* @return result
* @throws NullPointerException
* if {@code expression} is null
* @since 2019-03-14
*/
public T parseExpression(final String expression) {
return this.parseReversePolishExpression(this.convertExpressionToReversePolish(expression));
}
/**
* Parses an expression expressed in reverse Polish notation.
*
* @param expression
* expression to parse
* @return result
* @throws NullPointerException
* if {@code expression} is null
* @since 2019-03-14
*/
private T parseReversePolishExpression(final String expression) {
Objects.requireNonNull(expression, "expression must not be null.");
final Deque