Implement list declarations

This commit is contained in:
bʰedoh₂ swé 2024-06-11 16:51:16 +05:00
parent 898fa9b195
commit 3aa280ba38

View File

@ -13,6 +13,11 @@ void string_append(char** string, char* append) {
} }
void string_append_free(char** string, char* append) {
string_append(string, append);
free(append);
}
void compile_enter_tag(char** string) { void compile_enter_tag(char** string) {
int len = strlen(*string); int len = strlen(*string);
@ -106,6 +111,30 @@ void compile_genexec(char** result, tSyntaxElement* se){
string_append(result,")"); string_append(result,")");
} }
char* compile_gensplit(tSyntaxElement* se, char* operator) {
tSyntaxElement* token = se;
char* result = malloc(sizeof(char));
result[0] = '\0';
while (1) {
if (token->next != NULL) {
if (token->next->type == TOKEN)
string_append(&result,token->next->content.string);
else
string_append(&result,compile_expression_wrapped(token->next));
if (token->next->next != NULL)
string_append(&result,operator);
token = token->next;
} else break;
}
return result;
}
char* compile_expression(tSyntaxElement* syntaxelement) { char* compile_expression(tSyntaxElement* syntaxelement) {
char* result = calloc(1,sizeof(char)); char* result = calloc(1,sizeof(char));
@ -139,23 +168,7 @@ char* compile_expression(tSyntaxElement* syntaxelement) {
char* operator = token->content.string; char* operator = token->content.string;
while (1) { string_append_free(&result, compile_gensplit(token, operator));
if (token->next != NULL) {
if (token->next->type == TOKEN)
string_append(&result,token->next->content.string);
else
string_append(&result,compile_expression_wrapped(token->next));
if (token->next->next != NULL)
string_append(&result,operator);
token = token->next;
} else break;
}
} else { } else {
@ -186,6 +199,12 @@ char* compile_expression(tSyntaxElement* syntaxelement) {
string_append(&result,"not"); string_append(&result,"not");
string_append(&result,compile_expression_wrapped(token->next)); string_append(&result,compile_expression_wrapped(token->next));
} else if (strcmp(token->content.string, "list") == 0) {
string_append(&result,"[");
string_append_free(&result,compile_gensplit(token->next, ","));
string_append(&result,"]");
} else { } else {
string_append(&result,token->content.string); string_append(&result,token->content.string);