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
********************************************************
********************************************************
Please help, thank you
Computer Science Department San Francisco State University CSC 413 Assignment 1 -
Expression Evaluator Due Date: Sunday, February 19, at midnight. Note that the due date applies
to the last commit timestamp into the main branch of your repository. Note that no late
assignments will be accepted. Overview The purpose of this assignment is to practice object
oriented design to create an object that evaluates mathematical expressions. You are provided
with a project skeleton, which will be automatically cloned into your github repository when you
begin the assignment via this link: https:/I classroom.github.com/a/xpMT29ot. Submission Your
assignment will be submitted using github. Only the main branch of your repository will be
graded. Late submission is determined by the last commit time on the main branch. You are
required to answer the questions in the README . ad file in your repository. Your program will
be tested with a script, which will use some of the following commands. You are encouraged to
run these commands at a command prompt to ensure your project compiles without error! 1. git
clone your-repository-name 2. cd your-repository-name 3. find . -name "* .class" -type f -delete
4. find. -name "*.jar" -type f -delete 5. rm -rf tests 6. copy testing dependencies, current tests,
and some additional tests added to further exercise your code, then execute tests from the
command line The grading rubric is available in Canvas. Requirements You will be provided
with a code skeleton for the Evaluator class (Evaluator. java). You should program the utility
classes it uses - Operand and operator - and then follow the algorithm described below to
complete the implementation of the Evaluator class. The Evaluator implements a single public
method, eval, that takes a single string parameter that represents an infix mathematical
expression, parses and evaluates the expression, and returns the integer result. An example
expression is " 2 + 3 * 4 ", which would be evaluated to 14. The expressions are composed of
integer operands and operators drawn from the set + , , , / , , ( , and ). These operators have the
following precedence: The algorithm that is partially implemented in eval processes the tokens in
the expression string using two stacks; one for operators and one for operands (algorithm
reproduced here from http://csis.pace.edu/ murthy/ProgrammingProblems/ 16 Evaluation of infix
expressions): - If an operand token is scanned, an operand object is created from the token, and
pushed to the operand Stack - If an operator token is scanned, and the operator Stack is empty,
then an operator object is created from the token, and pushed to the operator Stack - If an
operator token is scanned, and the operator stack is not empty, and the operator's precedence is
greater than the precedence of the Operator at the top of the St a c k , then an operator object is
created from the token, and pushed to the operator stack - If the token is (, an operator object is
created from the token, and pushed to the operator Stack - If the token is ), then process
Operators until the corresponding ( is encountered. Pop the (Operator. - If none of the above
cases apply, process an Operator. The operand class allows for the generalization of operands in
our calculations. Note that two constructors are required: the constructor with the string
parameter will be used to create new operands as we retrieve tokens from the string expression,
and the constructor with the int parameter will be used to create new operands in the execute
method of operator subclasses. You must also consider how to maintain the state of the operand -
how should the token or vaiue be stored in the operand instance? Do we need both a string and
int. field in the class? In addition to the constructors, the following methods must be
implemented: - boolean check ( String token ) This method should return true if the token passed
as a parameter is a valid operand token - inl gelvalue() This method returns the integer value of
this operand

More Related Content

DOCX
----------Evaluator-java---------------- package evaluator- import j.docx
DOCX
META-INFMANIFEST.MFManifest-Version 1.0.classpath.docx
DOCX
java assignment
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
Tested on Eclipse and both class should be in same packageimport.pdf
PDF
Please read the comment ins codeExpressionTree.java-------------.pdf
PDF
Operator Overloading In Scala
----------Evaluator-java---------------- package evaluator- import j.docx
META-INFMANIFEST.MFManifest-Version 1.0.classpath.docx
java assignment
java write a program to evaluate the postfix expressionthe program.pdf
The concept of stack is extremely important in computer science and .pdf
Tested on Eclipse and both class should be in same packageimport.pdf
Please read the comment ins codeExpressionTree.java-------------.pdf
Operator Overloading In Scala

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

DOCX
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
PDF
Main class --------------------------import java.awt.FlowLayout.pdf
PDF
Java Code The traditional way to deal with these in Parsers is the .pdf
PDF
StackInterface An interface for the ADT stack. Do not modif.pdf
PPTX
conversion of Infix to Postfix conversion using stack
PPT
data structure and algorithm by bomboat_3
PPTX
05 operators
DOCX
Operators
PPTX
02 Java Language And OOP PART II
PPTX
Pj01 4-operators and control flow
PPT
operators.ppt
PDF
Applications of stack
PPTX
Class_IX_Operators.pptx
PPTX
Operators
PPTX
infixtopostfixconversion-110304220159-phpapp01.pptx
PPTX
Lect-3 Java VKA.pptx
PDF
Data structuresUsing java language and develop a prot.pdf
PDF
  package Chapter_20;import ToolKit.PostfixNotation;import javaf.pdf
PPT
MO 2020 DS Stacks 3 AB.ppt
PDF
TI1220 Lecture 9: Parsing & interpretation
New folderjsjfArrayStack.classpackage jsjf;publicsynchronize.docx
Main class --------------------------import java.awt.FlowLayout.pdf
Java Code The traditional way to deal with these in Parsers is the .pdf
StackInterface An interface for the ADT stack. Do not modif.pdf
conversion of Infix to Postfix conversion using stack
data structure and algorithm by bomboat_3
05 operators
Operators
02 Java Language And OOP PART II
Pj01 4-operators and control flow
operators.ppt
Applications of stack
Class_IX_Operators.pptx
Operators
infixtopostfixconversion-110304220159-phpapp01.pptx
Lect-3 Java VKA.pptx
Data structuresUsing java language and develop a prot.pdf
  package Chapter_20;import ToolKit.PostfixNotation;import javaf.pdf
MO 2020 DS Stacks 3 AB.ppt
TI1220 Lecture 9: Parsing & interpretation

More from janettjz6sfehrle (20)

DOCX
1 - how do you think Telehealth will impact and expand healthcare prac.docx
DOCX
01 (10 points) Create a file called 01-py- This file will use one posi.docx
DOCX
0-05) (Give three decimal places).docx
DOCX
-The melanocortin 1 receptor(MC1R) has emerged as a melanoma susceptib.docx
DOCX
-Reuploaded since the solution I got before was not what the assignmen.docx
DOCX
-Please give me some time to put away my laptop- We can have a convers.docx
DOCX
-H1-3- (inverse- py) Write a complete Python program- It should prompt.docx
DOCX
-Ferns differ from mosses in having A function of the roots is to abso.docx
DOCX
-Choose- A line that can be applied above- below or to the sides of a.docx
DOCX
-Conley is the CEO of a major academic med- ical center in the midwest.docx
DOCX
-51003i+2i2.docx
DOCX
-2- num_list ---.docx
DOCX
-10 Points- Description In this assignment you will translate a system.docx
DOCX
---During period of illness - infection can easily be spread- It is al.docx
DOCX
- Write-up (Individual) What is the EI Nio Southern Oscillation (ENSO).docx
DOCX
- yoars (Round to two decimal places as needed).docx
DOCX
- This person- role- or group will be a subject matter expert who can.docx
DOCX
- Interpret the data in each of the cases using 2 different nontechnic.docx
DOCX
- Python Programming Section 01 Spring 2023 CO Write a Python program.docx
DOCX
(Total marks for sub-question 16-5- ) Suppose that (Yt) is a (weakly).docx
1 - how do you think Telehealth will impact and expand healthcare prac.docx
01 (10 points) Create a file called 01-py- This file will use one posi.docx
0-05) (Give three decimal places).docx
-The melanocortin 1 receptor(MC1R) has emerged as a melanoma susceptib.docx
-Reuploaded since the solution I got before was not what the assignmen.docx
-Please give me some time to put away my laptop- We can have a convers.docx
-H1-3- (inverse- py) Write a complete Python program- It should prompt.docx
-Ferns differ from mosses in having A function of the roots is to abso.docx
-Choose- A line that can be applied above- below or to the sides of a.docx
-Conley is the CEO of a major academic med- ical center in the midwest.docx
-51003i+2i2.docx
-2- num_list ---.docx
-10 Points- Description In this assignment you will translate a system.docx
---During period of illness - infection can easily be spread- It is al.docx
- Write-up (Individual) What is the EI Nio Southern Oscillation (ENSO).docx
- yoars (Round to two decimal places as needed).docx
- This person- role- or group will be a subject matter expert who can.docx
- Interpret the data in each of the cases using 2 different nontechnic.docx
- Python Programming Section 01 Spring 2023 CO Write a Python program.docx
(Total marks for sub-question 16-5- ) Suppose that (Yt) is a (weakly).docx

Recently uploaded (20)

PDF
2.FourierTransform-ShortQuestionswithAnswers.pdf
PDF
Classroom Observation Tools for Teachers
PDF
TR - Agricultural Crops Production NC III.pdf
PDF
Insiders guide to clinical Medicine.pdf
PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PPTX
Microbial diseases, their pathogenesis and prophylaxis
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PPTX
master seminar digital applications in india
PPTX
GDM (1) (1).pptx small presentation for students
PDF
O7-L3 Supply Chain Operations - ICLT Program
PDF
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PPTX
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
PDF
Basic Mud Logging Guide for educational purpose
PDF
Pre independence Education in Inndia.pdf
PDF
01-Introduction-to-Information-Management.pdf
PDF
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf
2.FourierTransform-ShortQuestionswithAnswers.pdf
Classroom Observation Tools for Teachers
TR - Agricultural Crops Production NC III.pdf
Insiders guide to clinical Medicine.pdf
Module 4: Burden of Disease Tutorial Slides S2 2025
Microbial diseases, their pathogenesis and prophylaxis
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
master seminar digital applications in india
GDM (1) (1).pptx small presentation for students
O7-L3 Supply Chain Operations - ICLT Program
Black Hat USA 2025 - Micro ICS Summit - ICS/OT Threat Landscape
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
Abdominal Access Techniques with Prof. Dr. R K Mishra
human mycosis Human fungal infections are called human mycosis..pptx
STATICS OF THE RIGID BODIES Hibbelers.pdf
1st Inaugural Professorial Lecture held on 19th February 2020 (Governance and...
Basic Mud Logging Guide for educational purpose
Pre independence Education in Inndia.pdf
01-Introduction-to-Information-Management.pdf
Saundersa Comprehensive Review for the NCLEX-RN Examination.pdf

----------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 ******************************************************** ******************************************************** Please help, thank you Computer Science Department San Francisco State University CSC 413 Assignment 1 - Expression Evaluator Due Date: Sunday, February 19, at midnight. Note that the due date applies to the last commit timestamp into the main branch of your repository. Note that no late assignments will be accepted. Overview The purpose of this assignment is to practice object oriented design to create an object that evaluates mathematical expressions. You are provided with a project skeleton, which will be automatically cloned into your github repository when you begin the assignment via this link: https:/I classroom.github.com/a/xpMT29ot. Submission Your assignment will be submitted using github. Only the main branch of your repository will be graded. Late submission is determined by the last commit time on the main branch. You are required to answer the questions in the README . ad file in your repository. Your program will be tested with a script, which will use some of the following commands. You are encouraged to
  • 11. run these commands at a command prompt to ensure your project compiles without error! 1. git clone your-repository-name 2. cd your-repository-name 3. find . -name "* .class" -type f -delete 4. find. -name "*.jar" -type f -delete 5. rm -rf tests 6. copy testing dependencies, current tests, and some additional tests added to further exercise your code, then execute tests from the command line The grading rubric is available in Canvas. Requirements You will be provided with a code skeleton for the Evaluator class (Evaluator. java). You should program the utility classes it uses - Operand and operator - and then follow the algorithm described below to complete the implementation of the Evaluator class. The Evaluator implements a single public method, eval, that takes a single string parameter that represents an infix mathematical expression, parses and evaluates the expression, and returns the integer result. An example expression is " 2 + 3 * 4 ", which would be evaluated to 14. The expressions are composed of integer operands and operators drawn from the set + , , , / , , ( , and ). These operators have the following precedence: The algorithm that is partially implemented in eval processes the tokens in the expression string using two stacks; one for operators and one for operands (algorithm reproduced here from http://csis.pace.edu/ murthy/ProgrammingProblems/ 16 Evaluation of infix expressions): - If an operand token is scanned, an operand object is created from the token, and pushed to the operand Stack - If an operator token is scanned, and the operator Stack is empty, then an operator object is created from the token, and pushed to the operator Stack - If an operator token is scanned, and the operator stack is not empty, and the operator's precedence is greater than the precedence of the Operator at the top of the St a c k , then an operator object is created from the token, and pushed to the operator stack - If the token is (, an operator object is created from the token, and pushed to the operator Stack - If the token is ), then process Operators until the corresponding ( is encountered. Pop the (Operator. - If none of the above cases apply, process an Operator. The operand class allows for the generalization of operands in our calculations. Note that two constructors are required: the constructor with the string parameter will be used to create new operands as we retrieve tokens from the string expression, and the constructor with the int parameter will be used to create new operands in the execute method of operator subclasses. You must also consider how to maintain the state of the operand - how should the token or vaiue be stored in the operand instance? Do we need both a string and int. field in the class? In addition to the constructors, the following methods must be implemented: - boolean check ( String token ) This method should return true if the token passed as a parameter is a valid operand token - inl gelvalue() This method returns the integer value of this operand