From 3018020201aac55da132a48d4fcc53700abf8b93 Mon Sep 17 00:00:00 2001 From: timerix Date: Mon, 1 Aug 2022 01:27:09 +0600 Subject: [PATCH] cbc2c --- src/cb2c/cb2c.c | 25 ++++++++++++++++++++++++ src/cb2c/cb2c.h | 5 +++++ src/cb2c/main.c | 8 ++++++++ src/lexer/context.h | 46 +++++++++++++++++++++++++++++++++++++++++++++ src/lexer/lexer.h | 2 ++ 5 files changed, 86 insertions(+) create mode 100644 src/cb2c/cb2c.c create mode 100644 src/cb2c/cb2c.h create mode 100644 src/cb2c/main.c create mode 100644 src/lexer/context.h diff --git a/src/cb2c/cb2c.c b/src/cb2c/cb2c.c new file mode 100644 index 0000000..80b860a --- /dev/null +++ b/src/cb2c/cb2c.c @@ -0,0 +1,25 @@ +#include "cb2c.h" +#include "../../../kerep/src/String/StringBuilder.h" + +void namespaceToC(NamespaceContext* context, StringBuilder* b){ + +} + +void functionToC(FunctionContext* context, StringBuilder* b){ + +} + +void classToC(ClassContext* context, StringBuilder* b){ + +} + +char* contextToC(void* context){ + StringBuilder* b=StringBuilder_create(); + switch(((Context*)context)->type){ + case CT_Namespace: namespaceToC(context, b); break; + case CT_Function: functionToC(context, b); break; + case CT_Class: classToC(context, b); break; + default: throw(ERR_WRONGTYPE); + } + return StringBuilder_build(b).ptr; +} diff --git a/src/cb2c/cb2c.h b/src/cb2c/cb2c.h new file mode 100644 index 0000000..00d84fe --- /dev/null +++ b/src/cb2c/cb2c.h @@ -0,0 +1,5 @@ +#pragma once + +#include "../lexer/lexer.h" + +char* contextToC(void* context); diff --git a/src/cb2c/main.c b/src/cb2c/main.c new file mode 100644 index 0000000..54326f3 --- /dev/null +++ b/src/cb2c/main.c @@ -0,0 +1,8 @@ +#include "cb2c.h" + +int main(){ + init_keywordsSearchTree(); + + STNode_free(keywordsSearchTree); + return 0; +} \ No newline at end of file diff --git a/src/lexer/context.h b/src/lexer/context.h new file mode 100644 index 0000000..1e3c054 --- /dev/null +++ b/src/lexer/context.h @@ -0,0 +1,46 @@ +#pragma once + +#include "../../../kerep/src/base/base.h" +#include "tokens.h" + +typedef struct ContextStruct Context; + +typedef enum ContextType{ + CT_Namespace, + CT_Function, + CT_Class +} __attribute__((__packed__)) ContextType; + +struct ContextStruct { + char* name; + Context* parent; + Autoarr(Token)* tokens; + ContextType type; +}; + +typedef struct NamespaceContext{ + union { + Context base; + Context; + }; +} NamespaceContext; + +typedef struct FunctionContext { + union { + Context base; + Context; + }; + Autoarr(Token)* arguments; + Autoarr(Token)* attributes; + Token accessModifier; + Token returnType; +} FunctionContext; + +typedef struct ClassContext { + union { + Context base; + Context; + }; + Autoarr(Token)* attributes; + Token accessModifier; +} ClassContext; diff --git a/src/lexer/lexer.h b/src/lexer/lexer.h index 3db5159..9ab462f 100644 --- a/src/lexer/lexer.h +++ b/src/lexer/lexer.h @@ -1,6 +1,8 @@ #pragma once #include "tokens.h" +#include "context.h" +#include "my_type_ext.h" //Autoarr(Token)* Maybe lexan(char* source, char* filename);