summaryrefslogtreecommitdiff
path: root/src/main/java/sevenUnits/utils/ExpressionParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/sevenUnits/utils/ExpressionParser.java')
-rw-r--r--src/main/java/sevenUnits/utils/ExpressionParser.java12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/main/java/sevenUnits/utils/ExpressionParser.java b/src/main/java/sevenUnits/utils/ExpressionParser.java
index 1d3d44d..941c2a4 100644
--- a/src/main/java/sevenUnits/utils/ExpressionParser.java
+++ b/src/main/java/sevenUnits/utils/ExpressionParser.java
@@ -461,10 +461,12 @@ public final class ExpressionParser<T> {
*
* @param expression expression
* @return expression in RPN
+ * @throws IllegalArgumentException if expression is invalid (e.g.
+ * "{@code 3 *}")
* @since 2019-03-17
* @since v0.2.0
*/
- private String convertExpressionToReversePolish(final String expression) {
+ String convertExpressionToReversePolish(final String expression) {
Objects.requireNonNull(expression, "expression must not be null.");
final List<String> components = new ArrayList<>();
@@ -541,6 +543,9 @@ public final class ExpressionParser<T> {
switch (this
.getTokenType(components.get(highestPriorityOperatorPosition))) {
case UNARY_OPERATOR:
+ if (components.size() < 2)
+ throw new IllegalArgumentException(
+ "Invalid expression \"" + expression + "\"");
final String unaryOperator = components
.remove(highestPriorityOperatorPosition);
final String operand = components
@@ -549,6 +554,9 @@ public final class ExpressionParser<T> {
operand + " " + unaryOperator);
break;
case BINARY_OPERATOR:
+ if (components.size() < 3)
+ throw new IllegalArgumentException(
+ "Invalid expression \"" + expression + "\"");
final String binaryOperator = components
.remove(highestPriorityOperatorPosition);
final String operand1 = components
@@ -672,7 +680,7 @@ public final class ExpressionParser<T> {
* @since 2019-03-14
* @since v0.2.0
*/
- private T parseReversePolishExpression(final String expression) {
+ T parseReversePolishExpression(final String expression) {
Objects.requireNonNull(expression, "expression must not be null.");
final Deque<T> stack = new ArrayDeque<>();