summaryrefslogtreecommitdiff
path: root/src/main/java/sevenUnits/utils/ExpressionParser.java
diff options
context:
space:
mode:
authorAdrien Hopkins <ahopk127@my.yorku.ca>2021-12-02 16:46:15 -0500
committerAdrien Hopkins <ahopk127@my.yorku.ca>2021-12-02 16:46:15 -0500
commit345fa45ae562e4699cc9c2e039dc82c7a66b0451 (patch)
tree970052482622edd7e7fa950dfcee66b165818a4f /src/main/java/sevenUnits/utils/ExpressionParser.java
parent54e481cdb7115b236bcddb86b785d88dcc757c39 (diff)
parent8ea77520ce58e948eeffc4c2e8c25c69e88ed00a (diff)
Merge branch 'testing-upgrades' into develop
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<>();