PROJECT TITLE: OG0 interpreter See http://www.radford.edu/itec380/2024fall-ibarland/Homeworks/Project/ AUTHORS: Ian Barland USER INSTRUCTIONS: Test cases are in ExprTest.java. The testing framework takes a list of pairs -- strings (must be legal OG0 syntax) and the expected value. The testing framework then makes two test for each string: it parses the string and toString's the parse tree, expecting back the same input string (up to white space), and it parses and evals the string, checking for the expected value. Note: The "sealed" version ("OG0-java-sealed/") puts ALL the interesting OG0 classes into a single file. Fewer files to navigate! It would also, if we wanted, let us put all the parsing code into JUST `Expr.parse` (likewise with `eval`), rather than distributed among all the constituent classes. And we can use a `switch` *expression* (just like the racket `cond`), with completeness statically ensured by the compiler (since Expr is sealed).