upatet code to use latest kerep version

This commit is contained in:
timerix 2022-09-09 23:20:46 +06:00
parent fb88ef9de3
commit a5a20f07ec
9 changed files with 35 additions and 21 deletions

2
kerep

@ -1 +1 @@
Subproject commit d9b0daf543a6df2860074087b7a970feb8540e15 Subproject commit 3c132e12ea67c9b9c599153a2117e8fd7573d15e

View File

@ -1,6 +1,12 @@
#include "cb2c.h" #include "cb2c.h"
int main(){ int main(){
// kerep type system
ktDescriptors_beginInit();
ktDescriptors_initKerepTypes();
ktDescriptors_initCbLexerTypes();
ktDescriptors_endInit();
// keywords search tree
init_keywordsSearchTree(); init_keywordsSearchTree();
printf("keywordsSearchTree: %p\n", keywordsSearchTree); printf("keywordsSearchTree: %p\n", keywordsSearchTree);
STNode_free(keywordsSearchTree); STNode_free(keywordsSearchTree);

8
src/lexer/init.c Normal file
View File

@ -0,0 +1,8 @@
#include "lexer.h"
void ktDescriptors_initCbLexerTypes(){
kt_register(Token, ktId_Token, NULL, NULL);
kt_register(Token*, ktId_TokenPtr, NULL, NULL);
kt_register(Autoarr_Token, ktId_AutoarrToken, ____Autoarr_free_Token, NULL);
kt_register(Autoarr_Token*, ktId_AutoarrTokenPtr, ____Autoarr_free_Token, NULL);
}

View File

@ -46,9 +46,9 @@ void _addTok_ifnext(char next, TokenId yes, TokenId no, SharedLexerData* sld){
// adds <label> to <tokens> as tok_label or tok_number // adds <label> to <tokens> as tok_label or tok_number
void _tryAddLabel(SharedLexerData* sld){ void _tryAddLabel(SharedLexerData* sld){
if(label.length==0) return; if(label.length==0) return;
Unitype fake_uni=ST_pullString(keywordsSearchTree,label); Unitype uni=ST_pullString(keywordsSearchTree,label);
if(fake_uni.VoidPtr!=NULL) // built-in keyword if(uni.VoidPtr!=NULL) // built-in keyword
Autoarr_add(tokens, *(Token*)(void*)&fake_uni); Autoarr_add(tokens, *(Token*)uni.VoidPtr);
else { // user-defined label else { // user-defined label
Token ut; Token ut;
ut.value=string_extract(label); ut.value=string_extract(label);
@ -80,7 +80,7 @@ Maybe _readString(char quotChar, SharedLexerData* sld){
else { // " else { // "
string str={srcFirst, source-srcFirst+1}; string str={srcFirst, source-srcFirst+1};
char* extracted=string_extract(str); char* extracted=string_extract(str);
return SUCCESS(UniPtr(CharPtr, extracted)); return SUCCESS(UniHeap(ktId_CharPtr, extracted));
} }
} }
else prevIsBackslash= c=='\\' && !prevIsBackslash; else prevIsBackslash= c=='\\' && !prevIsBackslash;
@ -255,7 +255,7 @@ Maybe _lexan(SharedLexerData* sld){
break; break;
} }
return SUCCESS(UniPtr(AutoarrTokenPtr,tokens)); return SUCCESS(UniHeap(ktId_AutoarrTokenPtr,tokens));
} }

View File

@ -2,7 +2,8 @@
#include "tokens.h" #include "tokens.h"
#include "context.h" #include "context.h"
#include "my_type_ext.h"
//Autoarr(Token)* //Autoarr(Token)*
Maybe lexan(char* source, char* filename); Maybe lexan(char* source, char* filename);
void ktDescriptors_initCbLexerTypes();

View File

@ -1,9 +0,0 @@
#pragma once
#include "../../../kerep/src/base/base.h"
typedef enum lexer_type{
TokenPtr=my_type_last+1,
AutoarrTokenPtr
} lexer_type;

View File

@ -1,6 +1,11 @@
#include "tokens.h" #include "tokens.h"
ktId_define(ktId_Token);
ktId_define(ktId_TokenPtr);
Autoarr_define(Token) Autoarr_define(Token)
ktId_define(ktId_AutoarrToken);
ktId_define(ktId_AutoarrTokenPtr);
STNode* keywordsSearchTree=NULL; STNode* keywordsSearchTree=NULL;
@ -8,7 +13,7 @@ void init_keywordsSearchTree(){
keywordsSearchTree=STNode_create(); keywordsSearchTree=STNode_create();
for(TokenId keywordId=0; keywordId<=tok_typeof; keywordId++){ for(TokenId keywordId=0; keywordId<=tok_typeof; keywordId++){
const Token* keywordptr=&default_tokens[keywordId]; const Token* keywordptr=&default_tokens[keywordId];
Unitype uni=UniPtr(Int64, keywordptr); Unitype uni=UniStack(ktId_TokenPtr, keywordptr);
ST_push(keywordsSearchTree, keywordptr->value, uni); ST_push(keywordsSearchTree, keywordptr->value, uni);
} }
} }

View File

@ -2,7 +2,6 @@
#include "../../../kerep/src/Autoarr/Autoarr.h" #include "../../../kerep/src/Autoarr/Autoarr.h"
#include "../../../kerep/src/SearchTree/SearchTree.h" #include "../../../kerep/src/SearchTree/SearchTree.h"
#include "my_type_ext.h"
typedef enum TokenId{ typedef enum TokenId{
// base types // base types
@ -104,6 +103,12 @@ typedef struct Token{
char* value; char* value;
TokenId id; TokenId id;
} Token; } Token;
ktId_declare(ktId_Token);
ktId_declare(ktId_TokenPtr);
Autoarr_declare(Token)
ktId_declare(ktId_AutoarrToken);
ktId_declare(ktId_AutoarrTokenPtr);
extern STNode* keywordsSearchTree; extern STNode* keywordsSearchTree;
// dont forget to free it // dont forget to free it
@ -199,5 +204,3 @@ static const Token default_tokens[]={
{"$", tok_dollar}, {"$", tok_dollar},
{"@", tok_at} {"@", tok_at}
}; };
Autoarr_declare(Token)

View File

@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
cd kerep cd kerep
make $KEREP_BUILD_TARGET make $KEREP_BUILD_TASK
cp bin/kerep.a ../obj/ cp bin/kerep.a ../obj/
printf "${GREEN}copied ${CYAN}kerep.a\n" printf "${GREEN}copied ${CYAN}kerep.a\n"
cd .. cd ..