From 0ebbf3ca751e638a90cf886625992bb028f9b587 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Sun, 14 Apr 2024 02:45:48 +0630 Subject: 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! --- asm/parser.h | 104 ----------------------------------------------------------- 1 file changed, 104 deletions(-) delete mode 100644 asm/parser.h (limited to 'asm/parser.h') 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 - -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 -- cgit v1.2.3-13-gbd6f