aboutsummaryrefslogtreecommitdiff
path: root/asm/preprocesser.hpp
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2024-04-14 17:22:34 +0630
committerAryadev Chavali <aryadev@aryadevchavali.com>2024-04-14 17:25:28 +0630
commit72ef40e6718cbe309a8fe6f32ac31adb1a40dda2 (patch)
tree1cd7b248e0fbad33c0023b4a85142456632b4f60 /asm/preprocesser.hpp
parent86e9d51ab0b9ed2c5ccd1cf5f06fa3f3448c8f31 (diff)
downloadovm-72ef40e6718cbe309a8fe6f32ac31adb1a40dda2.tar.gz
ovm-72ef40e6718cbe309a8fe6f32ac31adb1a40dda2.tar.bz2
ovm-72ef40e6718cbe309a8fe6f32ac31adb1a40dda2.zip
parser -> preprocesser + parser
I've decided to split the module parsing into two modules, one for the preprocessing stage which only deals with tokens and the parsing stage which generates bytecode.
Diffstat (limited to 'asm/preprocesser.hpp')
-rw-r--r--asm/preprocesser.hpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/asm/preprocesser.hpp b/asm/preprocesser.hpp
new file mode 100644
index 0000000..9d733dd
--- /dev/null
+++ b/asm/preprocesser.hpp
@@ -0,0 +1,39 @@
+/* Copyright (C) 2024 Aryadev Chavali
+
+ * You may distribute and modify this code under the terms of the GPLv2
+ * license. You should have received a copy of the GPLv2 license with
+ * this file. If not, please write to: aryadev@aryadevchavali.com.
+
+ * Created: 2024-04-14
+ * Author: Aryadev Chavali
+ * Description: Preprocessor which occurs after lexing before parsing.
+ */
+
+#ifndef PREPROCESSER_HPP
+#define PREPROCESSER_HPP
+
+#include <tuple>
+
+#include "./lexer.hpp"
+
+enum pp_err_t
+{
+ OK = 0,
+ EXPECTED_NAME,
+ EXPECTED_STRING,
+ EXPECTED_END,
+ FILE_NONEXISTENT,
+ FILE_PARSE_ERROR,
+ UNKNOWN_NAME,
+};
+
+std::pair<std::vector<token_t>, pp_err_t>
+preprocesser(const std::vector<token_t> &);
+
+std::pair<std::vector<token_t>, pp_err_t>
+preprocess_macro_blocks(const std::vector<token_t> &);
+
+std::pair<std::vector<token_t>, pp_err_t>
+preprocess_use_blocks(const std::vector<token_t> &);
+
+#endif