diff options
Diffstat (limited to 'asm/parser.h')
-rw-r--r-- | asm/parser.h | 104 |
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 |