aboutsummaryrefslogtreecommitdiff
path: root/asm/parser.h
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2024-04-14 02:45:48 +0630
committerAryadev Chavali <aryadev@aryadevchavali.com>2024-04-14 02:45:48 +0630
commit0ebbf3ca751e638a90cf886625992bb028f9b587 (patch)
tree626e1cbddb50f0ec7d5fb8e93c4a3adfa9943349 /asm/parser.h
parentb7a40f4ab0fc5c0f6b68f24437f479a29e72c9af (diff)
downloadovm-0ebbf3ca751e638a90cf886625992bb028f9b587.tar.gz
ovm-0ebbf3ca751e638a90cf886625992bb028f9b587.tar.bz2
ovm-0ebbf3ca751e638a90cf886625992bb028f9b587.zip
Start writing assembler in C++
Best language to use as it's already compatible with the headers I'm using and can pretty neatly enter the build system while also using the functions I've built for converting to and from bytecode!
Diffstat (limited to 'asm/parser.h')
-rw-r--r--asm/parser.h104
1 files changed, 0 insertions, 104 deletions
diff --git a/asm/parser.h b/asm/parser.h
deleted file mode 100644
index 7e2d1b7..0000000
--- a/asm/parser.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/* Copyright (C) 2023 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: 2023-10-24
- * Author: Aryadev Chavali
- * Description: Parser for assembly language
- */
-
-#ifndef PARSER_H
-#define PARSER_H
-
-#include "./lexer.h"
-
-#include <lib/inst.h>
-
-typedef enum
-{
- PERR_OK = 0,
- PERR_INTEGER_OVERFLOW,
- PERR_NOT_A_NUMBER,
- PERR_EXPECTED_UTYPE,
- PERR_EXPECTED_TYPE,
- PERR_EXPECTED_SYMBOL,
- PERR_EXPECTED_LABEL,
- PERR_EXPECTED_OPERAND,
- PERR_PREPROCESSOR_EXPECTED_NAME,
- PERR_PREPROCESSOR_EXPECTED_STRING,
- PERR_PREPROCESSOR_EXPECTED_END,
- PERR_PREPROCESSOR_FILE_NONEXISTENT,
- PERR_PREPROCESSOR_FILE_PARSE_ERROR,
- PERR_PREPROCESSOR_UNKNOWN_NAME,
- PERR_INVALID_RELATIVE_ADDRESS,
- PERR_UNKNOWN_OPERATOR,
- PERR_UNKNOWN_LABEL,
-} perr_t;
-
-const char *perr_as_cstr(perr_t);
-
-typedef struct
-{
- size_t stream_index;
- inst_t instruction;
- s_word address;
- struct PLabel
- {
- char *name;
- size_t size;
- } label;
- enum PResult_Type
- {
- PRES_LABEL = 0,
- PRES_LABEL_ADDRESS,
- PRES_GLOBAL_LABEL,
- PRES_RELATIVE_ADDRESS,
- PRES_COMPLETE_RESULT,
- } type;
-} presult_t;
-
-presult_t presult_label(size_t, const char *, size_t, s_word);
-presult_t presult_label_ref(size_t, inst_t, const char *, size_t);
-presult_t presult_instruction(size_t, inst_t);
-presult_t presult_relative(size_t, inst_t, s_word);
-presult_t presult_global(size_t, const char *, size_t, s_word);
-void presult_free(presult_t);
-void presults_free(presult_t *, size_t);
-
-typedef struct
-{
- char *name;
- size_t name_size;
- word addr;
-} label_t;
-
-label_t search_labels(label_t *, size_t, char *, size_t);
-
-typedef struct
-{
- char *name;
- size_t name_size;
- darr_t code;
-} block_t;
-
-block_t search_blocks(block_t *, size_t, char *, size_t);
-
-perr_t preprocess_use_blocks(token_stream_t *, token_stream_t *);
-perr_t preprocess_macro_blocks(token_stream_t *, token_stream_t *);
-// Analyses then inlines corresponding tokens into stream directly
-perr_t preprocessor(token_stream_t *);
-
-// Parses the next "parse result" from stream
-perr_t parse_next(token_stream_t *, presult_t *);
-// Constructs a program from the set of parse results (from repeatedly
-// calling parse_next)
-perr_t process_presults(presult_t *, size_t, size_t *, prog_t **);
-
-// Preprocesses, generates results then constructs a program all in
-// one routine (thing to call in most use cases).
-perr_t parse_stream(token_stream_t *, prog_t **);
-
-#endif