project11 - complete

This commit is contained in:
2025-11-21 10:24:48 -05:00
parent 30d7936c6e
commit 912b16855a
10 changed files with 2290 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
#ifndef VM_WRITER_H
#define VM_WRITER_H
#include <stdio.h>
/* VM segments */
typedef enum {
SEG_CONST,
SEG_ARG,
SEG_LOCAL,
SEG_STATIC,
SEG_THIS,
SEG_THAT,
SEG_POINTER,
SEG_TEMP
} Segment;
/* VM arithmetic commands */
typedef enum {
CMD_ADD,
CMD_SUB,
CMD_NEG,
CMD_EQ,
CMD_GT,
CMD_LT,
CMD_AND,
CMD_OR,
CMD_NOT
} Command;
/* VM writer structure */
typedef struct {
FILE* file;
} VMWriter;
/* Function prototypes */
VMWriter* vm_writer_new(const char* filename);
void vm_writer_close(VMWriter* writer);
void vm_writer_write_push(VMWriter* writer, Segment segment, int index);
void vm_writer_write_pop(VMWriter* writer, Segment segment, int index);
void vm_writer_write_arithmetic(VMWriter* writer, Command command);
void vm_writer_write_label(VMWriter* writer, const char* label);
void vm_writer_write_goto(VMWriter* writer, const char* label);
void vm_writer_write_if(VMWriter* writer, const char* label);
void vm_writer_write_call(VMWriter* writer, const char* name, int nArgs);
void vm_writer_write_function(VMWriter* writer, const char* name, int nLocals);
void vm_writer_write_return(VMWriter* writer);
#endif