An interpreter not only parses expressions for their syntax, but also evaluates them to determine their values. Extend the parser of the case study so that it both parses and evaluates expressions. The only change to the user interface is that the output contains the value of the expression if that expression is syntactically correct. The program also detects as a semantic error the attempt to divide by 0. Make each parsing method responsible for computing and returning the value of the portion of the expression that it parses. For example, the method primary has the following options:

The current token is an integer literal, so return that token’s integer value.

The current token is a left parenthesis, so consume it, call expression, and return that method’s value.

The current token is something else, so there is a syntax error. Return  a default value of 0.