From d01abac9e992948a15273b69e889effec689ef52 Mon Sep 17 00:00:00 2001 From: Hazem Krimi Date: Mon, 30 Mar 2026 15:59:50 +0100 Subject: [PATCH] feat: code translation scaffolding --- Makefile | 2 +- src/code.cpp | 11 +++++++++++ src/code.hpp | 3 +++ src/main.cpp | 14 +++++++++++++- 4 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 src/code.cpp create mode 100644 src/code.hpp diff --git a/Makefile b/Makefile index d3242fe..c313116 100644 --- a/Makefile +++ b/Makefile @@ -10,7 +10,7 @@ endif TARGET_NAME = vm-translator OUT_DIR = out TARGET = $(OUT_DIR)/$(TARGET_NAME) -SRCS = src/main.cpp src/utils.cpp src/parser.cpp +SRCS = src/main.cpp src/utils.cpp src/code.cpp src/parser.cpp OBJS = $(SRCS:src/%.cpp=$(OUT_DIR)/%.o) $(TARGET): $(OBJS) diff --git a/src/code.cpp b/src/code.cpp new file mode 100644 index 0000000..f5262f8 --- /dev/null +++ b/src/code.cpp @@ -0,0 +1,11 @@ +#include "types.hpp" +#include +#include + +int translateCommand(std::string &output, Command cmd) { + std::ostringstream stream; + + stream << "// " << cmd.line << std::endl; + output = stream.str(); + return 0; +} diff --git a/src/code.hpp b/src/code.hpp new file mode 100644 index 0000000..4857a9e --- /dev/null +++ b/src/code.hpp @@ -0,0 +1,3 @@ +#include "types.hpp" + +int translateCommand(std::string&, Command); diff --git a/src/main.cpp b/src/main.cpp index d26d71d..847428f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,12 +4,16 @@ #include #include +#include "code.hpp" #include "parser.hpp" #include "utils.hpp" int process(std::string source) { std::ifstream ifs(source); + std::string out = source.substr(0, source.find_last_of('.')) + ".asm"; + std::ofstream ofs(out); std::string line; + std::string output; std::vector commands; @@ -25,9 +29,17 @@ int process(std::string source) { } for (const Command &cmd : commands) { - std::cout << int(cmd.type) << " " << int(cmd.segment) << " " << cmd.index << std::endl; + int translateResult; + + if ((translateResult = translateCommand(output, cmd)) != 0) { + return translateResult; + } + + ofs << output; } + ifs.close(); + ofs.close(); return 0; }