nswer the given question with a proper explanation and step-by-step solution. Hello team, Need some help with problems below using the langauge JAVA. I need to modify the CalcParser class provided below. I need this to produce a string containing commands to evaluate the expression on a stack machine. For example, if you give the command java CalcParser 1+2*3, the output should be a sequence of stack commands such as this: push 1.0 push 2.0
Answer the given question with a proper explanation and step-by-step solution.
Hello team,
Need some help with problems below using the langauge JAVA.
I need to modify the CalcParser class provided below. I need this to produce a string containing commands to evaluate the expression on a stack machine. For example, if you give the command java CalcParser 1+2*3, the output should be a sequence of stack commands such as this:
push 1.0
push 2.0
push 3.0
multiply
add
7.0
For the command java CalcParser (1+2)*3, on the other hand, it should print a sequence like this:
push 1.0
push 2.0
add
push 3.0
multiply
9.0
CODE:
public class CalcParser {
private CalcLexer lexer;
private String errorMessage = null;
private double value;
public CalcParser(String s) {
lexer = new CalcLexer(s);
errorMessage = lexer.getErrorMessage();
if (errorMessage != null) return;
value = parseExpression();
if (errorMessage != null) return;
match(CalcLexer.EOLN_TOKEN);
if (errorMessage != null) return;
}
public String getErrorMessage() {
return errorMessage;
}
public String getValue() {
return Double.toString(value);
}
private void match(int token) {
if (lexer.nextToken() != token) {
if (token == CalcLexer.EOLN_TOKEN)
errorMessage =
"Unexpected text after the expression.";
else if (token == CalcLexer.NUMBER_TOKEN)
errorMessage = "Expected a number.";
else errorMessage =
"Expected a " + ((char) token) + ".";
return;
}
lexer.advance();
errorMessage = lexer.getErrorMessage();
}
private double parseExpression() {
double result = parseMulexp();
if (errorMessage != null) return result;
while (true) {
if (lexer.nextToken() == '+') {
match('+');
if (errorMessage != null) return result;
result += parseMulexp();
if (errorMessage != null) return result;
}
else if (lexer.nextToken() == '-') {
match('-');
if (errorMessage != null) return result;
result -= parseMulexp();
if (errorMessage != null) return result;
}
else return result;
}
}
private double parseMulexp() {
double result = parseRootexp();
if (errorMessage != null) return result;
while (true) {
if (lexer.nextToken() == '*') {
match('*');
if (errorMessage != null) return result;
result *= parseRootexp();
if (errorMessage != null) return result;
}
else if (lexer.nextToken() == '/') {
match('/');
if (errorMessage != null) return result;
result /= parseRootexp();
if (errorMessage != null) return result;
}
else return result;
}
}
private double parseRootexp() {
double result = 0.0;
if (lexer.nextToken() == '(') {
match('(');
if (errorMessage != null) return result;
result = parseExpression();
if (errorMessage != null) return result;
match(')');
if (errorMessage != null) return result;
}
else if (lexer.nextToken()==CalcLexer.NUMBER_TOKEN){
result = lexer.getNum();
if (errorMessage != null) return result;
match(CalcLexer.NUMBER_TOKEN);
if (errorMessage != null) return result;
}
else {
errorMessage =
"Expected a number or a parenthesis.";
}
return result;
}
}
Thank you in advance!

Step by step
Solved in 3 steps









