From fd2ba6612492301613943e4c6e487404151735ff Mon Sep 17 00:00:00 2001 From: emilia Date: Sat, 21 Mar 2026 03:30:55 +0100 Subject: [PATCH] corrected me forcing c99 because i use strtok_r that isn't c99 compliant --- Makefile | 8 +- build/SterlingCompiler | Bin 0 -> 270992 bytes include/SterlingCompiler.h | 162 ++--- obj/main.o | Bin 33219 -> 312904 bytes source/array.h | 66 -- source/list.h | 3 + source/main.c | 1164 ++++++++++++++++++------------------ 7 files changed, 674 insertions(+), 729 deletions(-) create mode 100644 build/SterlingCompiler delete mode 100644 source/array.h diff --git a/Makefile b/Makefile index 27d23d1..1576baf 100644 --- a/Makefile +++ b/Makefile @@ -1,12 +1,12 @@ -NAME := Sterling +NAME := SterlingCompiler SRC := $(wildcard source/*.c) OBJ := $(SRC:source/%.c=obj/%.o) CC := gcc -CFLAG := -ggdb -Wall -Wextra -Werror -Wpedantic -I include -O0 -std=c99 -fsignaling-nans -LFLAG := +CFLAG := -ggdb -Wall -Wextra -Werror -Wpedantic -I include -Og -fsignaling-nans -fsanitize=address -fsanitize=undefined +LDFLAG := -lasan -lubsan -lpthread all: $(NAME) @@ -14,7 +14,7 @@ obj/%.o : source/%.c | makedir $(CC) $(CFLAG) -c $< -o $@ $(NAME): $(OBJ) - $(CC) $(OBJ) $(LFLAG) -o build/$(NAME) + $(CC) $(OBJ) $(LDFLAG) -o build/$(NAME) makedir: mkdir -p obj diff --git a/build/SterlingCompiler b/build/SterlingCompiler new file mode 100644 index 0000000000000000000000000000000000000000..e7aef1746aa6d516ef25ed7affe0568c4a0035ff GIT binary patch literal 270992 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 WC8g~@hjY{LSD!chrwJe_X8!`XEmHsh literal 0 HcmV?d00001 diff --git a/include/SterlingCompiler.h b/include/SterlingCompiler.h index 2301c91..cd3122e 100644 --- a/include/SterlingCompiler.h +++ b/include/SterlingCompiler.h @@ -1,81 +1,81 @@ -#ifndef STERLING_COMPILER_H -# define STERLING_COMPILER_H - -#include -#include -#include -#include -#include -#include -#include - -//simd -# ifdef __x86_64__ -# include -# endif - -typedef enum { - TOK_NONE = 1 << 0, - TOK_RAW = 1 << 1, - TOK_STRING = 1 << 2,//"asdfasf"; L"WideString" - TOK_LITERAL = 1 << 3,//INT: 42, 0xff, 0777, 100L; FLOAT:3.14, 1e-5, 2.0f; ENUM; char CONST 'a' '\n' L'x' - TOK_OP = 1 << 4, - TOK_PREPROC = 1 << 5, - TOK_COMMENT = 1 << 6, - TOK_KEY = 1 << 7, - TOK_ID = 1 << 8, - TOK_NUM = 1 << 9 -} TKN_CTX; - -typedef struct Token_s { - size_t size; - TKN_CTX ctx; - char *data; -} Token_t; - -typedef struct { - char *op; - size_t len; -} MultiOp; - -typedef struct { - const char *name; - TKN_CTX ctx; -} KeywordEntry; - - -const char *SYMBOLS = ";(){}[]$%&*#@!?:,.<>|-+=~`^"; - -// Common C operators (Order matters: put longer ones first if you add 3-char ops) -static const MultiOp MUNCH_TABLE[] = { - {"%:%:", 4}, - {"<<=", 3}, {">>=", 3}, {"...", 3}, - {"\?\?=", 3}, {"\?\?/", 3}, {"\?\?'", 3}, {"\?\?(", 3}, - {"\?\?)", 3}, {"\?\?!", 3}, {"\?\?<", 3}, - {"\?\?>", 3}, {"\?\?-", 3}, //trigraph - {"==", 2}, {"!=", 2}, {"<=", 2}, {">=", 2}, {"##", 2}, - {"++", 2}, {"--", 2}, {"->", 2}, {"+=", 2}, {"%=",2}, - {"-=", 2}, {"*=", 2}, {"/=", 2}, {"&&", 2}, {"||", 2}, - {"^=", 2}, {"<<", 2}, {">>", 2}, {"|=", 2}, {"&=", 2},// - {"<:", 2}, {":>", 2}, {"<%", 2}, {"%>", 2}, {"%:", 2},//digraphs - {NULL, 0} -}; - -// This can be expanded at runtime if you use a dynamic array instead of a static one -static const KeywordEntry KEYWORD_TABLE[] = { - {"if", TOK_KEY}, - {"else", TOK_KEY}, - {"while", TOK_KEY}, - {"return", TOK_KEY}, - {"var", TOK_KEY}, - {"int", TOK_KEY}, - {"float", TOK_KEY}, - {"void", TOK_KEY}, - {"include", TOK_PREPROC}, - {"define", TOK_PREPROC}, - {"comptime",TOK_KEY}, - {"reflect", TOK_KEY}, - {NULL, TOK_NONE} -}; - -#endif +#ifndef STERLING_COMPILER_H +# define STERLING_COMPILER_H + +#include +#include +#include +#include +#include +#include +#include + +//simd +# ifdef __x86_64__ +# include +# endif + +typedef enum { + TOK_NONE = 1 << 0, + TOK_RAW = 1 << 1, + TOK_STRING = 1 << 2,//"asdfasf"; L"WideString" + TOK_LITERAL = 1 << 3,//INT: 42, 0xff, 0777, 100L; FLOAT:3.14, 1e-5, 2.0f; ENUM; char CONST 'a' '\n' L'x' + TOK_OP = 1 << 4, + TOK_PREPROC = 1 << 5, + TOK_COMMENT = 1 << 6, + TOK_KEY = 1 << 7, + TOK_ID = 1 << 8, + TOK_NUM = 1 << 9 +} TKN_CTX; + +typedef struct Token_s { + size_t size; + TKN_CTX ctx; + char *data; +} Token_t; + +typedef struct { + char *op; + size_t len; +} MultiOp; + +typedef struct { + const char *name; + TKN_CTX ctx; +} KeywordEntry; + + +const char *SYMBOLS = ";(){}[]$%&*#@!?:,.<>|-+=~`^"; + +// Common C operators (Order matters: put longer ones first if you add 3-char ops) +static const MultiOp MUNCH_TABLE[] = { + {"%:%:", 4}, + {"<<=", 3}, {">>=", 3}, {"...", 3}, + {"\?\?=", 3}, {"\?\?/", 3}, {"\?\?'", 3}, {"\?\?(", 3}, + {"\?\?)", 3}, {"\?\?!", 3}, {"\?\?<", 3}, + {"\?\?>", 3}, {"\?\?-", 3}, //trigraph + {"==", 2}, {"!=", 2}, {"<=", 2}, {">=", 2}, {"##", 2}, + {"++", 2}, {"--", 2}, {"->", 2}, {"+=", 2}, {"%=",2}, + {"-=", 2}, {"*=", 2}, {"/=", 2}, {"&&", 2}, {"||", 2}, + {"^=", 2}, {"<<", 2}, {">>", 2}, {"|=", 2}, {"&=", 2},// + {"<:", 2}, {":>", 2}, {"<%", 2}, {"%>", 2}, {"%:", 2},//digraphs + {NULL, 0} +}; + +// This can be expanded at runtime if you use a dynamic array instead of a static one +static const KeywordEntry KEYWORD_TABLE[] = { + {"if", TOK_KEY}, + {"else", TOK_KEY}, + {"while", TOK_KEY}, + {"return", TOK_KEY}, + {"var", TOK_KEY}, + {"int", TOK_KEY}, + {"float", TOK_KEY}, + {"void", TOK_KEY}, + {"include", TOK_PREPROC}, + {"define", TOK_PREPROC}, + {"comptime",TOK_KEY}, + {"reflect", TOK_KEY}, + {NULL, TOK_NONE} +}; + +#endif diff --git a/obj/main.o b/obj/main.o index 4c0aba5a7c53b6ff9f3fd376d280653b1dee38a7..0864745aa19f0f87c8d8c96a0f6d88b693f9bd1a 100644 GIT binary patch literal 312904 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 diff --git a/source/array.h b/source/array.h deleted file mode 100644 index bb021ed..0000000 --- a/source/array.h +++ /dev/null @@ -1,66 +0,0 @@ -#ifndef ARRAY_H -# define ARRAY_H - -#include -#include -#include -#include - -typedef struct Header_s{ - int size; - int capacity; - int type; -} Header; - -#ifndef memset - -void *memset(void *src, char c, size_t size) { - for (int i = 0; i < size; i++) { - *(char *)(src + i) = c; - } - return (src); -} - -#endif - -typedef void *Array; - -#define ARRAY_BASE_CAPACITY 64 - -#define ArraySize(arr) ((Header*)(arr) - 1)->size - -#define ArrayFree(arr) free(((Header*)(arr) - 1)) - -#define ArrayPush(arr, x)\ - do {\ - Header *head = NULL;\ - if (!arr) { \ - head = malloc(sizeof(x) * ARRAY_BASE_CAPACITY + sizeof(Header));\ - head->size = 0;\ - head->type = sizeof(x);\ - head->capacity = ARRAY_BASE_CAPACITY;\ - arr = (void *)(head + 1);\ - }\ - head = (Header*)(arr)-1;\ - assert(sizeof(x) == head->type);\ - if (head->size >= head->capacity) {\ - head->capacity *= 2;\ - head = realloc(head, head->type *head->capacity + sizeof(Header));\ - arr = (void *)(head + 1);\ - }\ - (arr)[head->size++] = x;\ - } while(0) - -#define ArrayClear(arr)\ - do {\ - assert(arr);\ - Header * head = (Header*)(arr)-1;\ - memset(arr, 0, head->size * head->type);\ - } while(0)\ - - -# ifdef ARRAY_IMPL - -# endif - -#endif diff --git a/source/list.h b/source/list.h index 2c704f2..a87d7e9 100644 --- a/source/list.h +++ b/source/list.h @@ -124,8 +124,11 @@ void ListFree(list_t *lst, void (*free_func)(void*)) { free(current); current = next; } + //seems like i got a leak here, but may not be that bad since it is only called when closing lst->size = 0; lst->first = lst->last = NULL; + free(lst); + lst = NULL; } void *ListPeekK(const list_iter_t *it, size_t k) { diff --git a/source/main.c b/source/main.c index 771939c..7a808a6 100644 --- a/source/main.c +++ b/source/main.c @@ -1,578 +1,586 @@ -#define LIST_IMPLEMENTATION -#include "list.h" - -#include "../include/SterlingCompiler.h" - -# ifndef strndup -char *strndup(const char *s, size_t n) { - char *str = calloc(n + 1, sizeof(char)); - memcpy(str, s, n); - return (str); -} -# endif - -char *LoadFile(const char *filename) { - FILE *file = NULL; - char *data = NULL; - file = fopen(filename, "r"); - assert(file); - fseek(file, 0, SEEK_END); - long size = ftell(file); - fseek(file, 0, SEEK_SET); - data = (char *)malloc(size + 1); - assert(data); - fread(data, 1, size, file); - data[size] = 0x00; - fclose(file); - return (data); -} - -bool IsWhitespace(const char *s) { - while (*s) { - if (!isspace((unsigned char)*s)) return false; - s++; - } - return true; -} - -bool IsNumeric(const char *s) { - if (!s || !*s) return false; - for (int i = 0; s[i]; i++) { - if (!isdigit((unsigned char)s[i])) return false; - } - return true; -} - -bool IsComplexNumeric(const char *s, size_t len) { - if (len == 0) return false; - - // Most numbers start with a digit - if (isdigit((unsigned char)s[0])) return true; - - // Floats can start with a dot (e.g., .5) - if (s[0] == '.' && len > 1 && isdigit((unsigned char)s[1])) return true; - - return false; -} - -void ResolveTrigraphs(char *data) { - char *src = data, *dst = data; - while (*src) { - if (src[0] == '?' && src[1] == '?' && src[2]) { - char c = 0; - switch (src[2]) { - case '=': c = '#'; break; case '/': c = '\\'; break; - case '\'': c = '^'; break; case '(': c = '['; break; - case ')': c = ']'; break; case '!': c = '|'; break; - case '<': c = '{'; break; case '>': c = '}'; break; - case '-': c = '~'; break; - } - if (c) { *dst++ = c; src += 3; continue; } - } - *dst++ = *src++; - } - *dst = '\0'; -} - -typedef struct { - list_iter_t iter; - list_t *tokens; - bool error; -} Parser_t; - -// Initialize the parser -Parser_t ParserInit(list_t *lst) { - return (Parser_t){ .iter = ListGetIter(lst), .tokens = lst, .error = false }; -} - -// Look at current token -Token_t* Peek(Parser_t *p) { - if (!p->iter.current) return NULL; - return (Token_t*)p->iter.current->data; -} - -// Move to next -void Advance(Parser_t *p) { - if (p->iter.current) p->iter.current = p->iter.current->next; -} - -// Check if current matches type (and optionally value) -bool Match(Parser_t *p, TKN_CTX ctx, const char *val) { - Token_t *t = Peek(p); - if (!t || (t->ctx != ctx)) return false; - if (val && strcmp(t->data, val) != 0) return false; - - Advance(p); - return true; -} - -// Required token; errors out if not found -Token_t* Expect(Parser_t *p, TKN_CTX ctx, const char *val) { - Token_t *t = Peek(p); - if (!t || (t->ctx != ctx) || (val && strcmp(t->data, val) != 0)) { - printf("Syntax Error: Expected '%s', but found '%s'\n", - val ? val : "specific type", t ? t->data : "EOF"); - p->error = true; - return NULL; - } - Advance(p); - return t; -} - -void ClearTokens(void*arg) { - Token_t *tok = arg; - free(tok->data); - free(tok); -} - -node_t* NewNode(void* data) { - node_t* n = calloc(1, sizeof(node_t)); - if(n) n->data = data; - return n; -} - -Token_t* NewToken(const char* start, size_t len, TKN_CTX ctx) { - Token_t* t = malloc(sizeof(Token_t)); - t->data = strndup(start, len); - t->size = len; - t->ctx = ctx; - return t; -} - -void PushToken(list_t *lst, const char *start, const char *end, TKN_CTX ctx) { - if (end <= start) return; - ListPushBack(lst, NewToken(start, end - start, ctx)); -} - -void IdentifyTokens(list_t *lst) { - for (node_t *curr = lst->first; curr; curr = curr->next) { - Token_t *t = (Token_t *)curr->data; - - // Skip nodes that were already identified (like TOK_STRING or munched TOK_OP) - if (t->ctx != TOK_RAW) continue; - - // 1. Check Keyword Registry (Highest Priority) - bool found = false; - for (int i = 0; KEYWORD_TABLE[i].name != NULL; i++) { - if (strcmp(t->data, KEYWORD_TABLE[i].name) == 0) { - t->ctx = KEYWORD_TABLE[i].ctx; - found = true; - break; - } - } - if (found) continue; - - // 2. Check for Numeric Literals (0x..., 3.14, 100L) - if (isdigit((unsigned char)t->data[0]) || (t->data[0] == '.' && t->size > 1 && isdigit(t->data[1]))) { - t->ctx = TOK_NUM; - continue; - } - - // 3. Check for Identifiers (my_var, @comptime) - if (isalpha((unsigned char)t->data[0]) || t->data[0] == '_' || t->data[0] == '@') { - t->ctx = TOK_ID; - continue; - } - - // 4. Check for Operators/Symbols (;, +, -, #) - // If it's in our SYMBOLS string, it's an operator or preprocessor trigger - if (strchr(SYMBOLS, t->data[0])) { - // Special case for '#' which is often its own thing - if (t->data[0] == '#') t->ctx = TOK_PREPROC; - else t->ctx = TOK_OP; - continue; - } - } -} - -void ApplyTypeAliases(list_t *lst) { - for (node_t *curr = lst->first; curr; curr = curr->next) { - Token_t *t = curr->data; - // If we see 'int', we could programmatically replace it - // with the sequence ': 4' during a transformation pass. - if (t->ctx == TOK_ID && strcmp(t->data, "int") == 0) { - // Logic to transform token... - } - } -} - -void ListSplitToken(list_t *lst, node_t *node, size_t index) { - Token_t *t = (Token_t *)node->data; - - // Create the suffix node first - Token_t *suffix = NewToken(t->data + index, t->size - index, TOK_RAW); - node_t *new_node = NewNode(suffix); - new_node->next = node->next; - node->next = new_node; - if (lst->last == node) lst->last = new_node; - lst->size++; - - // Truncate the original (prefix) - char *new_prefix = strndup(t->data, index); - free(t->data); - t->data = new_prefix; - t->size = index; -} - -void InitialScanner(char *data, list_t *tkn_lst) { - char *curr = data, *start = data; - - while (*curr) { - // 1. Handle Wide or Normal Strings/Chars - // Check for 'L' followed immediately by a quote - bool is_wide = (*curr == 'L' && (curr[1] == '\"' || curr[1] == '\'')); - if (*curr == '\"' || *curr == '\'' || is_wide) { - PushToken(tkn_lst, start, curr, TOK_RAW); - - char *s_start = curr; - if (is_wide) curr++; // Advance past 'L' - - char q = *curr; - curr++; // Skip opening quote - while (*curr && *curr != q) { - if (*curr == '\\' && curr[1]) curr++; // Skip escaped char - curr++; - } - if (*curr) curr++; // Skip closing quote - - PushToken(tkn_lst, s_start, curr, TOK_STRING); - start = curr; - } - // 2. Handle Comments (Same as before) - else if (*curr == '/' && (curr[1] == '/' || curr[1] == '*')) { - PushToken(tkn_lst, start, curr, TOK_RAW); - if (curr[1] == '/') { while (*curr && *curr != '\n') curr++; } - else { - curr += 2; - while (*curr && !(*curr == '*' && curr[1] == '/')) curr++; - if (*curr) curr += 2; - } - start = curr; - } - else curr++; - } - PushToken(tkn_lst, start, curr, TOK_RAW); -} - -void RefineSymbols(list_t *tkn_lst) { - for (node_t *curr = tkn_lst->first; curr; ) { - Token_t *t = curr->data; - //IsComplexNumeric(t->data, t->size) || - if (t->ctx != TOK_RAW || (t->size == 1 && strchr(SYMBOLS, t->data[0]))) { - curr = curr->next; - continue; - } - - size_t pos = strcspn(t->data, SYMBOLS); - if (pos < t->size) { - ListSplitToken(tkn_lst, curr, (pos == 0) ? 1 : pos); - // Don't move curr yet, we might have more symbols in the suffix - } else { - curr = curr->next; - } - } -} - -void MunchFloats(list_t *lst) { - for (node_t *n = lst->first; n && n->next && n->next->next; ) { - Token_t *t1 = n->data, *dot = n->next->data, *t2 = n->next->next->data; - - // Look for [Digit] [.] [Digit] - if (isdigit(t1->data[0]) && dot->data[0] == '.' && dot->size == 1 && isdigit(t2->data[0])) { - size_t new_size = t1->size + 1 + t2->size; - char *buf = malloc(new_size + 1); - sprintf(buf, "%s.%s", t1->data, t2->data); - - free(t1->data); - t1->data = buf; - t1->size = new_size; - t1->ctx = TOK_NUM; // Mark it now! - - // Remove '.' and '14' - for(int i=0; i<2; i++) { - node_t *rem = n->next; - n->next = rem->next; - if (lst->last == rem) lst->last = n; - ClearTokens(rem->data); free(rem); - lst->size--; - } - continue; - } - n = n->next; - } -} - -void MunchScientificNotation(list_t *lst) { - for (node_t *n = lst->first; n && n->next && n->next->next; ) { - Token_t *t1 = n->data; - Token_t *op = n->next->data; - Token_t *t2 = n->next->next->data; - - // Check if t1 ends with 'e' or 'E' (and t1 is currently RAW) - if (t1->ctx == TOK_RAW && t1->size > 0) { - char last = tolower((unsigned char)t1->data[t1->size - 1]); - - if (last == 'e' && - (op->data[0] == '+' || op->data[0] == '-') && op->size == 1 && - isdigit((unsigned char)t2->data[0])) { - - // We found a match! (e.g., "1e" + "-" + "5") - size_t new_size = t1->size + op->size + t2->size; - char *new_data = malloc(new_size + 1); - - sprintf(new_data, "%s%s%s", t1->data, op->data, t2->data); - - free(t1->data); - t1->data = new_data; - t1->size = new_size; - - // Remove the op and t2 nodes - for (size_t i = 0; i < 2; i++) { - node_t *to_remove = n->next; - n->next = to_remove->next; - if (lst->last == to_remove) lst->last = n; - ClearTokens(to_remove->data); - free(to_remove); - lst->size--; - } - // Check this same node again (in case of weird nesting, though rare here) - continue; - } - } - n = n->next; - } -} - -void MunchTokens(list_t *lst) { - node_t *curr = lst->first; - - while (curr) { - Token_t *t1 = curr->data; - if (t1->ctx != TOK_RAW && t1->ctx != TOK_OP) { - curr = curr->next; - continue; - } - - bool matched = false; - for (size_t i = 0; MUNCH_TABLE[i].op; i++) { - size_t len = MUNCH_TABLE[i].len; - - // 1. Peek ahead to see if we have enough nodes - node_t *temp = curr; - char buffer[5] = {0}; // Max munch is 4 - size_t nodes_found = 0; - - for (size_t j = 0; j < len && temp; j++) { - Token_t *tk = temp->data; - if (tk->size != 1) break; // Multi-char tokens can't be part of a new munch - buffer[j] = tk->data[0]; - temp = temp->next; - nodes_found++; - } - - // 2. Compare buffer to table entry - if (nodes_found == len && strcmp(buffer, MUNCH_TABLE[i].op) == 0) { - // SUCCESS: Consolidate 'len' nodes into 'curr' - free(t1->data); - t1->data = strndup(MUNCH_TABLE[i].op, len); - t1->size = len; - t1->ctx = (MUNCH_TABLE[i].op[0] == '%') ? TOK_PREPROC : TOK_OP; - - // Remove the 'tail' nodes - for (size_t j = 1; j < len; j++) { - node_t *to_remove = curr->next; - curr->next = to_remove->next; - if (lst->last == to_remove) lst->last = curr; - ClearTokens(to_remove->data); - free(to_remove); - lst->size--; - } - matched = true; - break; - } - } - // If we munched, stay on 'curr' to see if a new sequence formed - if (!matched) curr = curr->next; - } -} - -void RefineRawNodes(list_t *tkn_lst) { - node_t *curr = tkn_lst->first; - //node_t *prev = NULL; - - while (curr) { - Token_t *t = (Token_t *)curr->data; - if (t->ctx == TOK_RAW) { - char *span = NULL; - char *to_split = strndup(t->data, t->size); - char *tok = strtok_r(to_split, " \t\r\n", &span); - - if (tok) { - free(t->data); - t->size = strlen(tok); - t->data = strndup(tok, t->size); - - node_t *last_inserted = curr; - tok = strtok_r(NULL, " \t\r\n", &span); - - while (tok) { - Token_t *new_t = calloc(1, sizeof(Token_t)); - new_t->size = strlen(tok); - new_t->data = strndup(tok, new_t->size); - new_t->ctx = TOK_RAW; - - node_t *new_node = calloc(1, sizeof(node_t)); - new_node->data = new_t; - - new_node->next = last_inserted->next; - last_inserted->next = new_node; - - if (tkn_lst->last == last_inserted) tkn_lst->last = new_node; - - last_inserted = new_node; - tkn_lst->size++; - tok = strtok_r(NULL, " \t\r\n", &span); - } - curr = last_inserted; - } - free(to_split); - } - //prev = curr; - curr = curr->next; - } -} - -void PruneWhitespaceNodes(list_t *lst) { - node_t *curr = lst->first; - node_t *prev = NULL; - - while (curr) { - Token_t *t = (Token_t *)curr->data; - if (t->ctx == TOK_RAW && IsWhitespace(t->data)) { - // Unlink and free - node_t *temp = curr; - if (prev) prev->next = curr->next; - else lst->first = curr->next; - - if (lst->last == temp) lst->last = prev; - - curr = curr->next; - ClearTokens(temp->data); - free(temp); - lst->size--; - } else { - prev = curr; - curr = curr->next; - } - } -} - -/* -// Modular function to register new identifiers -void RegisterIdentifier(const char *name, TKN_CTX type) { - //insert this into a Hash Map. - //this is where user-defined types go. -} -*/ - -void ParseVarDeclaration(Parser_t *p) { - // 1. We already saw 'var' (the trigger) - - // 2. Expect an Identifier (the name) - Token_t *name = Expect(p, TOK_ID, NULL); - if (p->error) return; - - // 3. Expect the separator ':' - Expect(p, TOK_OP, ":"); - if (p->error) return; - - // 4. Expect the size (numeric) - Token_t *size = Expect(p, TOK_NUM, NULL); - if (p->error) return; - - printf("Defined variable '%s' with size %s bytes.\n", name->data, size->data); - - // 5. Finalize with semicolon - Expect(p, TOK_OP, ";"); -} - -void Parse(Parser_t *p) { - while (Peek(p) != NULL && !p->error) { - Token_t *t = Peek(p); - - if (t->ctx == TOK_KEY && strcmp(t->data, "var") == 0) { - Advance(p); // Consume 'var' - ParseVarDeclaration(p); - } - else { - printf("Unknown token: %s\n", t->data); - Advance(p); - } - } -} - -const char* CtxToString(TKN_CTX ctx) { - if (ctx & TOK_KEY) return "KEYWORD"; - if (ctx & TOK_ID) return "IDENTIFIER"; - if (ctx & TOK_NUM) return "NUMBER"; - if (ctx & TOK_OP) return "OPERATOR"; - if (ctx & TOK_STRING) return "STRING"; - if (ctx & TOK_PREPROC) return "PREPROCESS"; - if (ctx & TOK_COMMENT) return "COMMENT"; - if (ctx & TOK_RAW) return "RAW"; - if (ctx & TOK_LITERAL) return "LITERAL"; - if (ctx & TOK_NONE) return "NONE"; - return "UNKNOWN"; -} - -/* -pass on ";(){}[]$%&*$#@!?:,.<>|_-+=~`" -and give each token a context -let's replace preprocessor (include, define, etc) -let's do recursive parsing everywhere that need it -compile time reflection (@comptime or @reflect) -metaprogramming logic annotation if i do it lastly** may not be -*/ -int main(int ac, char **av) { - if (ac <= 1) return printf("No file specified\n"), -1; - - char* data = LoadFile(av[1]); - assert(data); - ResolveTrigraphs(data); - - list_t *tkn_lst = ListInit(NULL); - assert(tkn_lst); - InitialScanner(data, tkn_lst); - PruneWhitespaceNodes(tkn_lst); - RefineRawNodes(tkn_lst); - RefineSymbols(tkn_lst); - MunchFloats(tkn_lst); - MunchScientificNotation(tkn_lst); - MunchTokens(tkn_lst); - IdentifyTokens(tkn_lst); - - list_iter_t iter = ListGetIter(tkn_lst); - printf("\n--- TOKEN STREAM ---\n"); - printf("%-6s | %-12s | %s\n", "HEX", "CONTEXT", "VALUE"); - printf("-------|--------------|----------\n"); - while (iter.current) { - Token_t *t = (Token_t *)iter.current->data; - - // Use CtxToString for the middle column - printf("[0x%04X] | %-12s | %s\n", - t->ctx, - CtxToString(t->ctx), - t->data); - - iter.current = iter.current->next; - } - printf("--------------------\n"); - - //Parser_t p = ParserInit(tkn_lst); - //Parse(&p); - - ListFree(tkn_lst, ClearTokens); - free(data); - return(0); -} -//test +#define LIST_IMPLEMENTATION +#include "list.h" + +#include "../include/SterlingCompiler.h" + +# ifndef strndup +char *strndup(const char *s, size_t n) { + char *str = calloc(n + 1, sizeof(char)); + memcpy(str, s, n); + return (str); +} +# endif + +char *LoadFile(const char *filename) { + FILE *file = NULL; + char *data = NULL; + file = fopen(filename, "r"); + assert(file); + fseek(file, 0, SEEK_END); + long size = ftell(file); + fseek(file, 0, SEEK_SET); + data = (char *)malloc(size + 1); + assert(data); + fread(data, 1, size, file); + data[size] = 0x00; + fclose(file); + return (data); +} + +bool IsWhitespace(const char *s) { + while (*s) { + if (!isspace((unsigned char)*s)) return false; + s++; + } + return true; +} + +bool IsNumeric(const char *s) { + if (!s || !*s) return false; + for (int i = 0; s[i]; i++) { + if (!isdigit((unsigned char)s[i])) return false; + } + return true; +} + +bool IsComplexNumeric(const char *s, size_t len) { + if (len == 0) return false; + + // Most numbers start with a digit + if (isdigit((unsigned char)s[0])) return true; + + // Floats can start with a dot (e.g., .5) + if (s[0] == '.' && len > 1 && isdigit((unsigned char)s[1])) return true; + + return false; +} + +void ResolveTrigraphs(char *data) { + char *src = data, *dst = data; + while (*src) { + if (src[0] == '?' && src[1] == '?' && src[2]) { + char c = 0; + switch (src[2]) { + case '=': c = '#'; break; case '/': c = '\\'; break; + case '\'': c = '^'; break; case '(': c = '['; break; + case ')': c = ']'; break; case '!': c = '|'; break; + case '<': c = '{'; break; case '>': c = '}'; break; + case '-': c = '~'; break; + } + if (c) { *dst++ = c; src += 3; continue; } + } + *dst++ = *src++; + } + *dst = '\0'; +} + +typedef struct { + list_iter_t iter; + list_t *tokens; + bool error; +} Parser_t; + +// Initialize the parser +Parser_t ParserInit(list_t *lst) { + return (Parser_t){ .iter = ListGetIter(lst), .tokens = lst, .error = false }; +} + +// Look at current token +Token_t* Peek(Parser_t *p) { + if (!p->iter.current) return NULL; + return (Token_t*)p->iter.current->data; +} + +// Move to next +void Advance(Parser_t *p) { + if (p->iter.current) p->iter.current = p->iter.current->next; +} + +// Check if current matches type (and optionally value) +bool Match(Parser_t *p, TKN_CTX ctx, const char *val) { + Token_t *t = Peek(p); + if (!t || (t->ctx != ctx)) return false; + if (val && strcmp(t->data, val) != 0) return false; + + Advance(p); + return true; +} + +// Required token; errors out if not found +Token_t* Expect(Parser_t *p, TKN_CTX ctx, const char *val) { + Token_t *t = Peek(p); + if (!t || (t->ctx != ctx) || (val && strcmp(t->data, val) != 0)) { + printf("Syntax Error: Expected '%s', but found '%s'\n", + val ? val : "specific type", t ? t->data : "EOF"); + p->error = true; + return NULL; + } + Advance(p); + return t; +} + +void ClearTokens(void*arg) { + Token_t *tok = arg; + free(tok->data); + free(tok); +} + +node_t* NewNode(void* data) { + node_t* n = calloc(1, sizeof(node_t)); + if(n) n->data = data; + return n; +} + +Token_t* NewToken(const char* start, size_t len, TKN_CTX ctx) { + Token_t* t = malloc(sizeof(Token_t)); + t->data = strndup(start, len); + t->size = len; + t->ctx = ctx; + return t; +} + +void PushToken(list_t *lst, const char *start, const char *end, TKN_CTX ctx) { + if (end <= start) return; + ListPushBack(lst, NewToken(start, end - start, ctx)); +} + +void IdentifyTokens(list_t *lst) { + for (node_t *curr = lst->first; curr; curr = curr->next) { + Token_t *t = (Token_t *)curr->data; + + // Skip nodes that were already identified (like TOK_STRING or munched TOK_OP) + if (t->ctx != TOK_RAW) continue; + + // 1. Check Keyword Registry (Highest Priority) + bool found = false; + for (int i = 0; KEYWORD_TABLE[i].name != NULL; i++) { + if (strcmp(t->data, KEYWORD_TABLE[i].name) == 0) { + t->ctx = KEYWORD_TABLE[i].ctx; + found = true; + break; + } + } + if (found) continue; + + // 2. Check for Numeric Literals (0x..., 3.14, 100L) + if (isdigit((unsigned char)t->data[0]) || (t->data[0] == '.' && t->size > 1 && isdigit(t->data[1]))) { + t->ctx = TOK_NUM; + continue; + } + + // 3. Check for Identifiers (my_var, @comptime) + if (isalpha((unsigned char)t->data[0]) || t->data[0] == '_' || t->data[0] == '@') { + t->ctx = TOK_ID; + continue; + } + + // 4. Check for Operators/Symbols (;, +, -, #) + // If it's in our SYMBOLS string, it's an operator or preprocessor trigger + if (strchr(SYMBOLS, t->data[0])) { + // Special case for '#' which is often its own thing + if (t->data[0] == '#') t->ctx = TOK_PREPROC; + else t->ctx = TOK_OP; + continue; + } + } +} + +void ApplyTypeAliases(list_t *lst) { + for (node_t *curr = lst->first; curr; curr = curr->next) { + Token_t *t = curr->data; + // If we see 'int', we could programmatically replace it + // with the sequence ': 4' during a transformation pass. + if (t->ctx == TOK_ID && strcmp(t->data, "int") == 0) { + // Logic to transform token... + } + } +} + +void ListSplitToken(list_t *lst, node_t *node, size_t index) { + Token_t *t = (Token_t *)node->data; + + // Create the suffix node first + Token_t *suffix = NewToken(t->data + index, t->size - index, TOK_RAW); + node_t *new_node = NewNode(suffix); + new_node->next = node->next; + node->next = new_node; + if (lst->last == node) lst->last = new_node; + lst->size++; + + // Truncate the original (prefix) + char *new_prefix = strndup(t->data, index); + free(t->data); + t->data = new_prefix; + t->size = index; +} + +void InitialScanner(char *data, list_t *tkn_lst) { + char *curr = data, *start = data; + + while (*curr) { + // 1. Handle Wide or Normal Strings/Chars + // Check for 'L' followed immediately by a quote + bool is_wide = (*curr == 'L' && (curr[1] == '\"' || curr[1] == '\'')); + if (*curr == '\"' || *curr == '\'' || is_wide) { + PushToken(tkn_lst, start, curr, TOK_RAW); + + char *s_start = curr; + if (is_wide) curr++; // Advance past 'L' + + char q = *curr; + curr++; // Skip opening quote + while (*curr && *curr != q) { + if (*curr == '\\' && curr[1]) curr++; // Skip escaped char + curr++; + } + if (*curr) curr++; // Skip closing quote + + PushToken(tkn_lst, s_start, curr, TOK_STRING); + start = curr; + } + // 2. Handle Comments (Same as before) + else if (*curr == '/' && (curr[1] == '/' || curr[1] == '*')) { + PushToken(tkn_lst, start, curr, TOK_RAW); + if (curr[1] == '/') { while (*curr && *curr != '\n') curr++; } + else { + curr += 2; + while (*curr && !(*curr == '*' && curr[1] == '/')) curr++; + if (*curr) curr += 2; + } + start = curr; + } + else curr++; + } + PushToken(tkn_lst, start, curr, TOK_RAW); +} + +void RefineSymbols(list_t *tkn_lst) { + for (node_t *curr = tkn_lst->first; curr; ) { + Token_t *t = curr->data; + //IsComplexNumeric(t->data, t->size) || + if (t->ctx != TOK_RAW || (t->size == 1 && strchr(SYMBOLS, t->data[0]))) { + curr = curr->next; + continue; + } + + size_t pos = strcspn(t->data, SYMBOLS); + if (pos < t->size) { + ListSplitToken(tkn_lst, curr, (pos == 0) ? 1 : pos); + // Don't move curr yet, we might have more symbols in the suffix + } else { + curr = curr->next; + } + } +} + +void MunchFloats(list_t *lst) { + for (node_t *n = lst->first; n && n->next && n->next->next; ) { + Token_t *t1 = n->data, *dot = n->next->data, *t2 = n->next->next->data; + + // Look for [Digit] [.] [Digit] + if (isdigit(t1->data[0]) && dot->data[0] == '.' && dot->size == 1 && isdigit(t2->data[0])) { + size_t new_size = t1->size + 1 + t2->size; + char *buf = malloc(new_size + 1); + sprintf(buf, "%s.%s", t1->data, t2->data); + + free(t1->data); + t1->data = buf; + t1->size = new_size; + t1->ctx = TOK_NUM; // Mark it now! + + // Remove '.' and '14' + for(int i=0; i<2; i++) { + node_t *rem = n->next; + n->next = rem->next; + if (lst->last == rem) lst->last = n; + ClearTokens(rem->data); free(rem); + lst->size--; + } + continue; + } + n = n->next; + } +} + +void MunchScientificNotation(list_t *lst) { + for (node_t *n = lst->first; n && n->next && n->next->next; ) { + Token_t *t1 = n->data; + Token_t *op = n->next->data; + Token_t *t2 = n->next->next->data; + + // Check if t1 ends with 'e' or 'E' (and t1 is currently RAW) + if (t1->ctx == TOK_RAW && t1->size > 0) { + char last = tolower((unsigned char)t1->data[t1->size - 1]); + + if (last == 'e' && + (op->data[0] == '+' || op->data[0] == '-') && op->size == 1 && + isdigit((unsigned char)t2->data[0])) { + + // We found a match! (e.g., "1e" + "-" + "5") + size_t new_size = t1->size + op->size + t2->size; + char *new_data = malloc(new_size + 1); + + sprintf(new_data, "%s%s%s", t1->data, op->data, t2->data); + + free(t1->data); + t1->data = new_data; + t1->size = new_size; + + // Remove the op and t2 nodes + for (size_t i = 0; i < 2; i++) { + node_t *to_remove = n->next; + n->next = to_remove->next; + if (lst->last == to_remove) lst->last = n; + ClearTokens(to_remove->data); + free(to_remove); + lst->size--; + } + // Check this same node again (in case of weird nesting, though rare here) + continue; + } + } + n = n->next; + } +} + +void MunchTokens(list_t *lst) { + node_t *curr = lst->first; + + while (curr) { + Token_t *t1 = curr->data; + if (t1->ctx != TOK_RAW && t1->ctx != TOK_OP) { + curr = curr->next; + continue; + } + + bool matched = false; + for (size_t i = 0; MUNCH_TABLE[i].op; i++) { + size_t len = MUNCH_TABLE[i].len; + + // 1. Peek ahead to see if we have enough nodes + node_t *temp = curr; + char buffer[5] = {0}; // Max munch is 4 + size_t nodes_found = 0; + + for (size_t j = 0; j < len && temp; j++) { + Token_t *tk = temp->data; + if (tk->size != 1) break; // Multi-char tokens can't be part of a new munch + buffer[j] = tk->data[0]; + temp = temp->next; + nodes_found++; + } + + // 2. Compare buffer to table entry + if (nodes_found == len && strcmp(buffer, MUNCH_TABLE[i].op) == 0) { + // SUCCESS: Consolidate 'len' nodes into 'curr' + free(t1->data); + t1->data = strndup(MUNCH_TABLE[i].op, len); + t1->size = len; + t1->ctx = (MUNCH_TABLE[i].op[0] == '%') ? TOK_PREPROC : TOK_OP; + + // Remove the 'tail' nodes + for (size_t j = 1; j < len; j++) { + node_t *to_remove = curr->next; + curr->next = to_remove->next; + if (lst->last == to_remove) lst->last = curr; + ClearTokens(to_remove->data); + free(to_remove); + lst->size--; + } + matched = true; + break; + } + } + // If we munched, stay on 'curr' to see if a new sequence formed + if (!matched) curr = curr->next; + } +} + +void RefineRawNodes(list_t *tkn_lst) { + node_t *curr = tkn_lst->first; + //node_t *prev = NULL; + + while (curr) { + Token_t *t = (Token_t *)curr->data; + if (t->ctx == TOK_RAW) { + char *span = NULL; + char *to_split = strndup(t->data, t->size); + char *tok = strtok_r(to_split, " \t\r\n", &span); + + if (tok) { + free(t->data); + t->size = strlen(tok); + t->data = strndup(tok, t->size); + + node_t *last_inserted = curr; + tok = strtok_r(NULL, " \t\r\n", &span); + + while (tok) { + Token_t *new_t = calloc(1, sizeof(Token_t)); + new_t->size = strlen(tok); + new_t->data = strndup(tok, new_t->size); + new_t->ctx = TOK_RAW; + + node_t *new_node = calloc(1, sizeof(node_t)); + new_node->data = new_t; + + new_node->next = last_inserted->next; + last_inserted->next = new_node; + + if (tkn_lst->last == last_inserted) tkn_lst->last = new_node; + + last_inserted = new_node; + tkn_lst->size++; + tok = strtok_r(NULL, " \t\r\n", &span); + } + curr = last_inserted; + } + free(to_split); + } + //prev = curr; + curr = curr->next; + } +} + +void PruneWhitespaceNodes(list_t *lst) { + node_t *curr = lst->first; + node_t *prev = NULL; + + while (curr) { + Token_t *t = (Token_t *)curr->data; + if (t->ctx == TOK_RAW && IsWhitespace(t->data)) { + // Unlink and free + node_t *temp = curr; + if (prev) prev->next = curr->next; + else lst->first = curr->next; + + if (lst->last == temp) lst->last = prev; + + curr = curr->next; + ClearTokens(temp->data); + free(temp); + lst->size--; + } else { + prev = curr; + curr = curr->next; + } + } +} + +/* +// Modular function to register new identifiers +void RegisterIdentifier(const char *name, TKN_CTX type) { + //insert this into a Hash Map. + //this is where user-defined types go. +} +*/ + +void ParseVarDeclaration(Parser_t *p) { + // 1. We already saw 'var' (the trigger) + + // 2. Expect an Identifier (the name) + Token_t *name = Expect(p, TOK_ID, NULL); + if (p->error) return; + + // 3. Expect the separator ':' + Expect(p, TOK_OP, ":"); + if (p->error) return; + + // 4. Expect the size (numeric) + Token_t *size = Expect(p, TOK_NUM, NULL); + if (p->error) return; + + printf("Defined variable '%s' with size %s bytes.\n", name->data, size->data); + + // 5. Finalize with semicolon + Expect(p, TOK_OP, ";"); +} + +void Parse(Parser_t *p) { + while (Peek(p) != NULL && !p->error) { + Token_t *t = Peek(p); + + if (t->ctx == TOK_KEY && strcmp(t->data, "var") == 0) { + Advance(p); // Consume 'var' + ParseVarDeclaration(p); + } + else { + printf("Unknown token: %s\n", t->data); + Advance(p); + } + } +} + +const char* CtxToString(TKN_CTX ctx) { + if (ctx & TOK_KEY) return "KEYWORD"; + if (ctx & TOK_ID) return "IDENTIFIER"; + if (ctx & TOK_NUM) return "NUMBER"; + if (ctx & TOK_OP) return "OPERATOR"; + if (ctx & TOK_STRING) return "STRING"; + if (ctx & TOK_PREPROC) return "PREPROCESS"; + if (ctx & TOK_COMMENT) return "COMMENT"; + if (ctx & TOK_RAW) return "RAW"; + if (ctx & TOK_LITERAL) return "LITERAL"; + if (ctx & TOK_NONE) return "NONE"; + return "UNKNOWN"; +} + +/* +pass on ";(){}[]$%&*$#@!?:,.<>|_-+=~`" +and give each token a context +let's replace preprocessor (include, define, etc) +let's do recursive parsing everywhere that need it +compile time reflection (@comptime or @reflect) +metaprogramming logic annotation if i do it lastly** may not be +*/ +int main(int ac, char **av) { + if (ac <= 1) return printf("No file specified\n"), -1; + + char* data = LoadFile(av[1]); + assert(data); + ResolveTrigraphs(data); + + list_t *tkn_lst = ListInit(NULL); + assert(tkn_lst); + InitialScanner(data, tkn_lst); + PruneWhitespaceNodes(tkn_lst); + RefineRawNodes(tkn_lst); + RefineSymbols(tkn_lst); + MunchFloats(tkn_lst); + MunchScientificNotation(tkn_lst); + MunchTokens(tkn_lst); + IdentifyTokens(tkn_lst); + + list_iter_t iter = ListGetIter(tkn_lst); + printf("\n--- TOKEN STREAM ---\n"); + printf("%-6s | %-12s | %s\n", "HEX", "CONTEXT", "VALUE"); + printf("-------|--------------|----------\n"); + while (iter.current) { + Token_t *t = (Token_t *)iter.current->data; + + // Use CtxToString for the middle column + printf("[0x%04X] | %-12s | %s\n", + t->ctx, + CtxToString(t->ctx), + t->data); + + iter.current = iter.current->next; + } + printf("--------------------\n"); + + //Parser_t p = ParserInit(tkn_lst); + //Parse(&p); + + //Ast + //print all error and check correction available + //symbletable + //type check + //metaanalyze to know what how to put it into IR (as asm allow for metaprog) + + //create ir by resolving ast on multiple thread + + ListFree(tkn_lst, ClearTokens); + free(data); + return(0); +} +//test