- Define an abstract syntax for the full IMP language.
- Implement the abstract syntax defined in Part 1.
- Define a large-step operational semantics for the abstract syntax defined in Part 1. Note that most, if not all, of this semantics is defined in your text.
- Implement a large-step evaluation function for the abstract syntax defined in Part 2. Your evaluation function should accept an abstract syntax structure and an initial state, and produce a final state.
- Define a small-step operational semantics for the abstract syntax defined in Part 1.
- Implement a small-step evaluation function for the abstract syntax defined in Part 2. You should provide an interface to your top-level interpretation function that has the same signature as your large-step interpreter.
- Define a proof scheme for your small-step operational semantics similar to that defined for the large-step operational semantics defined in the text.
- Provide evidence that your interpreters from Part 4 and Part 6 are equivalent. Do not attempt a formal proof or exhaustive testing, simply provide a collection of test cases that demonstrate the equivalence of the two interpreters.
In essense, there are three activities to this project - defining semantics, implementing interpreters and establishing correctness. We will repeat these steps in form for each of the semantic systems that we learn. This project emphasizes implementing interpreters. As we move further into the semester, definition and correctness will play a larger role.
Due: October 13