Makevisitors: Stack Visitor
At this point in the assignment, makevisitors can generate a Java class
hierarchy and visitor from the data type definitions in haskell/stack.hs. Now,
we will implement an evaluator for the stack machine. To do so, we need to
implement a StackInstrVisitor.
The file java/ExampleStackProgram.java contains a partial implementation of a
StackInstrVisitor, along with a program that evaluates a sample list of stack
instructions. Your job is to complete the StackInstrVisitor implementation.
Your task: complete the StackInstrVisitor implementation by filling in the
implementation for the visit methods.
Comments.
- If you understand the visitor pattern well, this should be a straightforward implementation.
- You may want to review the lab, to brush up on how to write new visitors.
- Here are the semantics of the instructions, copied from our assignment earlier in the semester. Keep in mind that these rules are defined using the Haskell data type names.
| If the stack looks like | and the operation is | afterwards the stack should be |
|---|---|---|
| … | Push $r$ |
$r$ … |
| $a$ $b$ … | DoOp PlusOp |
$(b+a)$ … |
| $a$ $b$ … | DoOp MinusOp |
$(b-a)$ … |
| $a$ $b$ … | DoOp TimesOp |
$(b*a)$ … |
| $a$ $b$ … | DoOp DivOp |
$(b/a)$ … |
| $a$ $b$ … | Swap |
$b$ $a$ … |
-
To check that everything works, you can run the following command from the top-level code directory:
make stackIf you see the word
SUCCESS, then your Java code compiled and produced the correct answer. You’re all done!