41 lines
591 B
OCaml
41 lines
591 B
OCaml
|
type arithmetic_command =
|
||
|
| Add
|
||
|
| Sub
|
||
|
| Neg
|
||
|
| Eq
|
||
|
| Gt
|
||
|
| Lt
|
||
|
| And
|
||
|
| Or
|
||
|
| Not
|
||
|
|
||
|
type memory_segment =
|
||
|
| Argument
|
||
|
| Local
|
||
|
| Static
|
||
|
| Constant
|
||
|
| This
|
||
|
| That
|
||
|
| Pointer
|
||
|
| Temp
|
||
|
|
||
|
type memory_command =
|
||
|
| Push
|
||
|
| Pop
|
||
|
|
||
|
type branching_command =
|
||
|
| Label
|
||
|
| Goto
|
||
|
| Ifgoto
|
||
|
|
||
|
type function_command =
|
||
|
| Function
|
||
|
| Call
|
||
|
|
||
|
type expr =
|
||
|
| ArithmeticCommand of arithmetic_command
|
||
|
| MemoryAccessCommand of memory_command * memory_segment * int
|
||
|
| ProgramFlowCommand of branching_command * string
|
||
|
| FunctionCallCommand of function_command * string * int
|
||
|
| Return
|