SlideShare a Scribd company logo
**********Evaluator.java****************
package evaluator;
import java.util.*;
import operand.Operand;
import operator.Operator;
public class Evaluator {
private Stack<Operand> operandStack;
private Stack<Operator> operatorStack;
private StringTokenizer tokenizer;
private static final String DELIMITERS = "+-*^/() ";
public Evaluator() {
operandStack = new Stack<Operand>();
operatorStack = new Stack<Operator>();
}
public int eval(String expression) {
int result = 0;
String token;
Operator hashOpr = Operator.operators.get("#");
oprStack.push(hashOpr);
String delimiters = "+-*/#!";
// The 3rd argument is true to indicate that the delimiters should be used
// as tokens, too. But, we'll need to remember to filter out spaces.
this.tokenizer = new StringTokenizer(expression, DELIMITERS, true);
while (this.tokenizer.hasMoreTokens()) {
// filter out spaces
if (!(token = this.tokenizer.nextToken()).equals(" ")) {
// check if token is an operand
if (Operand.check(token)) {
operandStack.push(new Operand(token));
} else {
if (!Operator.check(token)) {
System.out.println("*****invalid token******");
System.exit(1);
}
// TODO Operator is abstract - this line will need to be fixed:
// ( The Operator class should contain an instance of a HashMap,
// and values will be instances of the Operators. See Operator class
// skeleton for an example. )
Operator newOperator = null; // new Operator( token );
while (operatorStack.peek().priority() >= newOperator.priority()) {
// note that when we eval the expression 1 - 2 we will
// push the 1 then the 2 and then do the subtraction operation
// This means that the first number to be popped is the
// second operand, not the first operand - see the following code
Operator oldOpr = operatorStack.pop();
Operand op2 = operandStack.pop();
Operand op1 = operandStack.pop();
operandStack.push(oldOpr.execute(op1, op2));
}
operatorStack.push(newOperator);
}
}
}
// Control gets here when we've picked up all of the tokens; you must add
// code to complete the evaluation - consider how the code given here
// will evaluate the expression 1+2*3
// When we have no more tokens to scan, the operand stack will contain 1 2
// and the operator stack will have + * with 2 and * on the top;
// In order to complete the evaluation we must empty the stacks (except
// the init operator on the operator stack); that is, we should keep
// evaluating the operator stack until empty
// Suggestion: create a method that takes an operator as argument and
// then executes the while loop; also, move the stacks out of the main
// method
return 0;
}
/**
* Class to help test your Evaluator:
* javac EvaluatorTester
* java EvaluatorTester "1+2" "3*5"
*/
public static void main(String[] args) {
Evaluator evaluator = new Evaluator();
for (String arg : args) {
System.out.format("%s = %dn", arg, evaluator.eval(arg));
}
}
}
************************************Operand.Java*******************************
*******************
package operand;
public class Operand {
public Operand( String token ) {
}
public Operand( int value ) {
}
public int getValue() {
return 0;
}
public static boolean check( String token ) {
return false;
}
}
*******************************************************EvaluatorTest.java*******
****************************************
package tests;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import evaluator.Evaluator;
public class EvaluatorTest {
@Test
void testSimpleAddition() {
Evaluator evaluator = new Evaluator();
assertEquals(3, evaluator.eval("1 +2"));
}
@Test
void testSimpleDivision() {
Evaluator evaluator = new Evaluator();
assertEquals(0, evaluator.eval("1/2"));
}
@Test
void testSimpleExpression() {
Evaluator evaluator = new Evaluator();
assertEquals(7, evaluator.eval("1+2*3"));
}
@Test
void testSimpleParenthesizedExpression() {
Evaluator evaluator = new Evaluator();
assertEquals(9, evaluator.eval("(1+2)*3"));
}
@Test
void testComplexExpressionWithNegativeResult() {
Evaluator evaluator = new Evaluator();
assertEquals(7, evaluator.eval("2-(3/10)+2-5"));
}
@Test
void testAnotherComplexExpressionWithNegativeResult() {
Evaluator evaluator = new Evaluator();
assertEquals(-6, evaluator.eval("(6-12*2)/3"));
}
@Test
void testSimpleExponentiation() {
Evaluator evaluator = new Evaluator();
assertEquals(9, evaluator.eval("3^2"));
}
@Test
void testSlightlyMoreComplexExponentiation() {
Evaluator evaluator = new Evaluator();
assertEquals(4, evaluator.eval("3^2/2"));
}
@Test
void testHardMode() {
Evaluator evaluator = new Evaluator();
assertEquals(1176, evaluator.eval("2+3-5*((2-3)*2-5*2+3*(2-3-5-5*6)+4/2)*2-9"));
}
@Test
void testProperStackUsage() {
Evaluator evaluator = new Evaluator();
// Stacks should be emptied and in a valid state after the first evaluation occurs,
// so the second evaluation should run without exception and provide
assertEquals(6, evaluator.eval("1+2+3"));
assertEquals(1, evaluator.eval("10-8-1"));
}
}
******************************************************OperandTest.java*********
**********************************************************
package tests;
import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import org.junit.jupiter.api.Test;
import operand.Operand;
public class OperandTest {
@Test
void testCheck() {
ArrayList<String> validOperands =
new ArrayList<>(Arrays.asList( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" ));
validOperands.forEach(operand -> assertTrue(Operand.check(operand)));
assertFalse(Operand.check("a"));
}
@Test
void testGetValueFromOriginalString() {
Operand operandOne = new Operand("3");
assertEquals(3, operandOne.getValue());
}
@Test
void testGetValueFromOriginalInt() {
Operand operandTwo = new Operand(7);
assertEquals(7, operandTwo.getValue());
}
}
*******************************************************OperatorTest.java********
*********************************************
package tests;
import org.junit.jupiter.api.Test;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertFalse;
import java.util.ArrayList;
import java.util.Arrays;
import operator.Operator;
public class OperatorTest {
@Test
void testCheck() {
ArrayList<String> validOperators =
new ArrayList<>(Arrays.asList( "+", "-", "*", "/", "^" ));
validOperators.forEach(operator -> assertTrue(Operator.check(operator)));
assertFalse(Operator.check("1"));
}
}
******************************************************************************
****************
This is the readme
[![Open in Visual Studio Code](https://classroom.github.com/assets/open-in-vscode-
c66648af7eb3fe8bc4f294546bfd86ef473780cde1dea487d3c4ff354943c9ae.svg)](https://classroo
m.github.com/online_ide?assignment_repo_id=10049933&assignment_repo_type=AssignmentR
epo)
# Assignment 1 Documentation
Author: Eduardo Ruiz (please keep the Author: heading for my grading script)
## Overview of code skeleton
The folders `.devcontainer`, `.vscode`, and `lib` contain configuration information that must not
be deleted or modified. The remaining folders will be discussed in class.
## Scope of Work
| Requirement | Completed? | Comments from student |
| ------------------------- | ---------- | --------------------- |
| 1 - Implement algorithm | [] | |
| 2 - Tests | [] | |
| 3 - Class implementations | [] | |
## Class diagrams
REPLACE THIS TEXT: Include a diagram of all of the classes you worked with in this
assignment, indicating their relationships. For each class, include a one line description of its
responsibility. If you are looking for a tool to use to create the class diagram, check out
[Mermaid](https://mermaid.js.org/syntax/classDiagram.html) - this allows you to write
markdown in this file that will be rendered as class diagrams.
## Results and Conclusions
### What I Learned
REPLACE THIS TEXT: Describe what you learned by completing this assignment
### Challenged I Encountered
REPLACE THIS TEXT: Describe challenges you encountered completing this assignment, and
how you overcame those challenges
********************************************************
********************************************************
While the operator stack is not empty, pop the operator from the operator stack, create an
operand object from the popped operator, and push it to the operand stack. While the operand
stack has more than one operand, pop two operands from the operand stack and one operator
from the operator stack, and apply the operator to the operands. Push the result back to the
operand stack. The result of the expression is the single operand left on the operand stack. You
are required to implement the missing parts of this algorithm in the eval method of the Evaluator
class.
Please help, thank you
----------Evaluator-java---------------- package evaluator-   import j.docx

More Related Content

DOCX
----------Evaluator-java---------------- package evaluator- import j.docx
PDF
java write a program to evaluate the postfix expressionthe program.pdf
PDF
The concept of stack is extremely important in computer science and .pdf
PDF
Java Code The traditional way to deal with these in Parsers is the .pdf
DOCX
java assignment
PDF
Tested on Eclipse and both class should be in same packageimport.pdf
DOCX
META-INFMANIFEST.MFManifest-Version 1.0.classpath.docx
PDF
StackInterface An interface for the ADT stack. Do not modif.pdf
----------Evaluator-java---------------- package evaluator- import j.docx
java write a program to evaluate the postfix expressionthe program.pdf
The concept of stack is extremely important in computer science and .pdf
Java Code The traditional way to deal with these in Parsers is the .pdf
java assignment
Tested on Eclipse and both class should be in same packageimport.pdf
META-INFMANIFEST.MFManifest-Version 1.0.classpath.docx
StackInterface An interface for the ADT stack. Do not modif.pdf

Similar to ----------Evaluator-java---------------- package evaluator- import j.docx (20)

PDF
Please read the comment ins codeExpressionTree.java-------------.pdf
DOCX
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
PDF
Operator Overloading In Scala
PPTX
conversion of Infix to Postfix conversion using stack
PPT
Postfix Evaluations using Stack
PPTX
Ch05_Stacks implementation in data structures.pptx
PDF
Applications of stack
PPTX
infixtopostfixconversion-110304220159-phpapp01.pptx
DOCX
C-Sharp Arithmatic Expression Calculator
PPTX
Infix postfixcoversion
PDF
Data structuresUsing java language and develop a prot.pdf
PPTX
Evaluation of prefix expression with example
PPT
MO 2020 DS Stacks 3 AB.ppt
PPT
data structure and algorithm by bomboat_3
PDF
Main class --------------------------import java.awt.FlowLayout.pdf
PDF
TI1220 Lecture 9: Parsing & interpretation
PDF
Ds stack 03
PPTX
Infix to postfix conversion
PPTX
DS UNIT1_STACKS.pptx
DOCX
This first assignment will focus on coding in Python, applying kno.docx
Please read the comment ins codeExpressionTree.java-------------.pdf
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
Operator Overloading In Scala
conversion of Infix to Postfix conversion using stack
Postfix Evaluations using Stack
Ch05_Stacks implementation in data structures.pptx
Applications of stack
infixtopostfixconversion-110304220159-phpapp01.pptx
C-Sharp Arithmatic Expression Calculator
Infix postfixcoversion
Data structuresUsing java language and develop a prot.pdf
Evaluation of prefix expression with example
MO 2020 DS Stacks 3 AB.ppt
data structure and algorithm by bomboat_3
Main class --------------------------import java.awt.FlowLayout.pdf
TI1220 Lecture 9: Parsing & interpretation
Ds stack 03
Infix to postfix conversion
DS UNIT1_STACKS.pptx
This first assignment will focus on coding in Python, applying kno.docx
Ad

More from Adamq0DJonese (20)

DOCX
1) What are the five tenets of wireless LAN (802-11) troubleshooting- (1).docx
DOCX
1) Water soluble compounds have lower bioconcentration factors than do.docx
DOCX
1) Spatial Concepts of Location- Direction and Distance (absolute and.docx
DOCX
1) How are DNA and RNA similar and how are they different- 2) What are.docx
DOCX
1) Identify the following parts of a flower-2) Identify these flowers.docx
DOCX
1) design a clocked latch version using NOR gates2) Design the version.docx
DOCX
1) Given the following program- Count -0 While (Count !- 5)- Count - C.docx
DOCX
1) Explain at least two different things that can happen when a meteor.docx
DOCX
1) Assume that you measure the OD of two E-coli cultures- culture A an.docx
DOCX
1) Define filtration- phagocytosis- pinocytosis- endocytosis and exocy.docx
DOCX
1) A pair of fair dice were tossed- Assuming X represents the sum of t.docx
DOCX
1 What are the advantages and disadvantages of globalization- Give exa.docx
DOCX
1 point- Regarding chronic disease- which of the following statements.docx
DOCX
1 point Which of the following is an example of a Type I error- An inn.docx
DOCX
1 Elonis v- United States- is the main case on 875(c)- What is the men.docx
DOCX
1 1- A government wants to provide student loans to students in their.docx
DOCX
1 a- The analysis of sedimentary rock determines- The size and s.docx
DOCX
0 points) Answer the questions on ListReferenceBased class (NOTE that.docx
DOCX
0 Conditional Format as Cell Cells Formatting - Table - Styles - Style.docx
DOCX
-Pyro-Diversity- means the many species that grow back after a fire re.docx
1) What are the five tenets of wireless LAN (802-11) troubleshooting- (1).docx
1) Water soluble compounds have lower bioconcentration factors than do.docx
1) Spatial Concepts of Location- Direction and Distance (absolute and.docx
1) How are DNA and RNA similar and how are they different- 2) What are.docx
1) Identify the following parts of a flower-2) Identify these flowers.docx
1) design a clocked latch version using NOR gates2) Design the version.docx
1) Given the following program- Count -0 While (Count !- 5)- Count - C.docx
1) Explain at least two different things that can happen when a meteor.docx
1) Assume that you measure the OD of two E-coli cultures- culture A an.docx
1) Define filtration- phagocytosis- pinocytosis- endocytosis and exocy.docx
1) A pair of fair dice were tossed- Assuming X represents the sum of t.docx
1 What are the advantages and disadvantages of globalization- Give exa.docx
1 point- Regarding chronic disease- which of the following statements.docx
1 point Which of the following is an example of a Type I error- An inn.docx
1 Elonis v- United States- is the main case on 875(c)- What is the men.docx
1 1- A government wants to provide student loans to students in their.docx
1 a- The analysis of sedimentary rock determines- The size and s.docx
0 points) Answer the questions on ListReferenceBased class (NOTE that.docx
0 Conditional Format as Cell Cells Formatting - Table - Styles - Style.docx
-Pyro-Diversity- means the many species that grow back after a fire re.docx
Ad

Recently uploaded (20)

PDF
Anesthesia in Laparoscopic Surgery in India
PPTX
Microbial diseases, their pathogenesis and prophylaxis
PDF
Insiders guide to clinical Medicine.pdf
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PDF
O7-L3 Supply Chain Operations - ICLT Program
PPTX
Lesson notes of climatology university.
PDF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
PDF
TR - Agricultural Crops Production NC III.pdf
PPTX
Cell Types and Its function , kingdom of life
PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PDF
01-Introduction-to-Information-Management.pdf
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PPTX
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
PDF
RMMM.pdf make it easy to upload and study
PDF
O5-L3 Freight Transport Ops (International) V1.pdf
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PDF
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
Anesthesia in Laparoscopic Surgery in India
Microbial diseases, their pathogenesis and prophylaxis
Insiders guide to clinical Medicine.pdf
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
Module 4: Burden of Disease Tutorial Slides S2 2025
O7-L3 Supply Chain Operations - ICLT Program
Lesson notes of climatology university.
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
TR - Agricultural Crops Production NC III.pdf
Cell Types and Its function , kingdom of life
2.FourierTransform-ShortQuestionswithAnswers.pdf
01-Introduction-to-Information-Management.pdf
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
Introduction_to_Human_Anatomy_and_Physiology_for_B.Pharm.pptx
RMMM.pdf make it easy to upload and study
O5-L3 Freight Transport Ops (International) V1.pdf
human mycosis Human fungal infections are called human mycosis..pptx
Physiotherapy_for_Respiratory_and_Cardiac_Problems WEBBER.pdf
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
Pharmacology of Heart Failure /Pharmacotherapy of CHF

----------Evaluator-java---------------- package evaluator- import j.docx

  • 1. **********Evaluator.java**************** package evaluator; import java.util.*; import operand.Operand; import operator.Operator; public class Evaluator { private Stack<Operand> operandStack; private Stack<Operator> operatorStack; private StringTokenizer tokenizer; private static final String DELIMITERS = "+-*^/() "; public Evaluator() { operandStack = new Stack<Operand>(); operatorStack = new Stack<Operator>(); } public int eval(String expression) { int result = 0; String token; Operator hashOpr = Operator.operators.get("#"); oprStack.push(hashOpr); String delimiters = "+-*/#!"; // The 3rd argument is true to indicate that the delimiters should be used // as tokens, too. But, we'll need to remember to filter out spaces. this.tokenizer = new StringTokenizer(expression, DELIMITERS, true);
  • 2. while (this.tokenizer.hasMoreTokens()) { // filter out spaces if (!(token = this.tokenizer.nextToken()).equals(" ")) { // check if token is an operand if (Operand.check(token)) { operandStack.push(new Operand(token)); } else { if (!Operator.check(token)) { System.out.println("*****invalid token******"); System.exit(1); } // TODO Operator is abstract - this line will need to be fixed: // ( The Operator class should contain an instance of a HashMap, // and values will be instances of the Operators. See Operator class // skeleton for an example. ) Operator newOperator = null; // new Operator( token ); while (operatorStack.peek().priority() >= newOperator.priority()) { // note that when we eval the expression 1 - 2 we will // push the 1 then the 2 and then do the subtraction operation // This means that the first number to be popped is the // second operand, not the first operand - see the following code Operator oldOpr = operatorStack.pop(); Operand op2 = operandStack.pop();
  • 3. Operand op1 = operandStack.pop(); operandStack.push(oldOpr.execute(op1, op2)); } operatorStack.push(newOperator); } } } // Control gets here when we've picked up all of the tokens; you must add // code to complete the evaluation - consider how the code given here // will evaluate the expression 1+2*3 // When we have no more tokens to scan, the operand stack will contain 1 2 // and the operator stack will have + * with 2 and * on the top; // In order to complete the evaluation we must empty the stacks (except // the init operator on the operator stack); that is, we should keep // evaluating the operator stack until empty // Suggestion: create a method that takes an operator as argument and // then executes the while loop; also, move the stacks out of the main // method return 0; } /** * Class to help test your Evaluator: * javac EvaluatorTester
  • 4. * java EvaluatorTester "1+2" "3*5" */ public static void main(String[] args) { Evaluator evaluator = new Evaluator(); for (String arg : args) { System.out.format("%s = %dn", arg, evaluator.eval(arg)); } } } ************************************Operand.Java******************************* ******************* package operand; public class Operand { public Operand( String token ) { } public Operand( int value ) { } public int getValue() { return 0; } public static boolean check( String token ) { return false; } }
  • 5. *******************************************************EvaluatorTest.java******* **************************************** package tests; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import evaluator.Evaluator; public class EvaluatorTest { @Test void testSimpleAddition() { Evaluator evaluator = new Evaluator(); assertEquals(3, evaluator.eval("1 +2")); } @Test void testSimpleDivision() { Evaluator evaluator = new Evaluator(); assertEquals(0, evaluator.eval("1/2")); } @Test void testSimpleExpression() { Evaluator evaluator = new Evaluator(); assertEquals(7, evaluator.eval("1+2*3")); } @Test void testSimpleParenthesizedExpression() {
  • 6. Evaluator evaluator = new Evaluator(); assertEquals(9, evaluator.eval("(1+2)*3")); } @Test void testComplexExpressionWithNegativeResult() { Evaluator evaluator = new Evaluator(); assertEquals(7, evaluator.eval("2-(3/10)+2-5")); } @Test void testAnotherComplexExpressionWithNegativeResult() { Evaluator evaluator = new Evaluator(); assertEquals(-6, evaluator.eval("(6-12*2)/3")); } @Test void testSimpleExponentiation() { Evaluator evaluator = new Evaluator(); assertEquals(9, evaluator.eval("3^2")); } @Test void testSlightlyMoreComplexExponentiation() { Evaluator evaluator = new Evaluator(); assertEquals(4, evaluator.eval("3^2/2")); }
  • 7. @Test void testHardMode() { Evaluator evaluator = new Evaluator(); assertEquals(1176, evaluator.eval("2+3-5*((2-3)*2-5*2+3*(2-3-5-5*6)+4/2)*2-9")); } @Test void testProperStackUsage() { Evaluator evaluator = new Evaluator(); // Stacks should be emptied and in a valid state after the first evaluation occurs, // so the second evaluation should run without exception and provide assertEquals(6, evaluator.eval("1+2+3")); assertEquals(1, evaluator.eval("10-8-1")); } } ******************************************************OperandTest.java********* ********************************************************** package tests; import static org.junit.Assert.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.ArrayList; import java.util.Arrays; import org.junit.jupiter.api.Test; import operand.Operand;
  • 8. public class OperandTest { @Test void testCheck() { ArrayList<String> validOperands = new ArrayList<>(Arrays.asList( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" )); validOperands.forEach(operand -> assertTrue(Operand.check(operand))); assertFalse(Operand.check("a")); } @Test void testGetValueFromOriginalString() { Operand operandOne = new Operand("3"); assertEquals(3, operandOne.getValue()); } @Test void testGetValueFromOriginalInt() { Operand operandTwo = new Operand(7); assertEquals(7, operandTwo.getValue()); } } *******************************************************OperatorTest.java******** ********************************************* package tests; import org.junit.jupiter.api.Test; import static org.junit.Assert.assertTrue;
  • 9. import static org.junit.jupiter.api.Assertions.assertFalse; import java.util.ArrayList; import java.util.Arrays; import operator.Operator; public class OperatorTest { @Test void testCheck() { ArrayList<String> validOperators = new ArrayList<>(Arrays.asList( "+", "-", "*", "/", "^" )); validOperators.forEach(operator -> assertTrue(Operator.check(operator))); assertFalse(Operator.check("1")); } } ****************************************************************************** **************** This is the readme [![Open in Visual Studio Code](https://classroom.github.com/assets/open-in-vscode- c66648af7eb3fe8bc4f294546bfd86ef473780cde1dea487d3c4ff354943c9ae.svg)](https://classroo m.github.com/online_ide?assignment_repo_id=10049933&assignment_repo_type=AssignmentR epo) # Assignment 1 Documentation Author: Eduardo Ruiz (please keep the Author: heading for my grading script) ## Overview of code skeleton The folders `.devcontainer`, `.vscode`, and `lib` contain configuration information that must not be deleted or modified. The remaining folders will be discussed in class. ## Scope of Work
  • 10. | Requirement | Completed? | Comments from student | | ------------------------- | ---------- | --------------------- | | 1 - Implement algorithm | [] | | | 2 - Tests | [] | | | 3 - Class implementations | [] | | ## Class diagrams REPLACE THIS TEXT: Include a diagram of all of the classes you worked with in this assignment, indicating their relationships. For each class, include a one line description of its responsibility. If you are looking for a tool to use to create the class diagram, check out [Mermaid](https://mermaid.js.org/syntax/classDiagram.html) - this allows you to write markdown in this file that will be rendered as class diagrams. ## Results and Conclusions ### What I Learned REPLACE THIS TEXT: Describe what you learned by completing this assignment ### Challenged I Encountered REPLACE THIS TEXT: Describe challenges you encountered completing this assignment, and how you overcame those challenges ******************************************************** ******************************************************** While the operator stack is not empty, pop the operator from the operator stack, create an operand object from the popped operator, and push it to the operand stack. While the operand stack has more than one operand, pop two operands from the operand stack and one operator from the operator stack, and apply the operator to the operands. Push the result back to the operand stack. The result of the expression is the single operand left on the operand stack. You are required to implement the missing parts of this algorithm in the eval method of the Evaluator class. Please help, thank you