Start implementing compiler
This commit is contained in:
parent
24042b3f88
commit
3321ca8e1b
46
src/compile.c
Normal file
46
src/compile.c
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "syntax.h"
|
||||||
|
|
||||||
|
void compile_enter_tag(char** string) {
|
||||||
|
int len = strlen(*string);
|
||||||
|
*string = realloc(*string, len + 3 * sizeof(char));
|
||||||
|
string[0][len + 0] = '{';
|
||||||
|
string[0][len + 1] = '%';
|
||||||
|
string[0][len + 2] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
void compile_exit_tag(char** string) {
|
||||||
|
int len = strlen(*string);
|
||||||
|
*string = realloc(*string, len + 3 * sizeof(char));
|
||||||
|
string[0][len + 0] = '%';
|
||||||
|
string[0][len + 1] = '}';
|
||||||
|
string[0][len + 2] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
void string_append(char** string, char* append) {
|
||||||
|
int len = strlen(*string);
|
||||||
|
*string = realloc(*string, len + strlen(append) + sizeof(char));
|
||||||
|
strcpy(*string + len, append);
|
||||||
|
}
|
||||||
|
|
||||||
|
char* compile(tSyntaxElement* syntaxtree) {
|
||||||
|
char* result = calloc(1,sizeof(char));
|
||||||
|
if (se_istraversable(syntaxtree)) {
|
||||||
|
if (syntaxtree->content.syntax->type == TOKEN) {
|
||||||
|
tSyntaxElement* token = syntaxtree->content.syntax;
|
||||||
|
if (strcmp(token->content.string, "def") == 0) {
|
||||||
|
} else
|
||||||
|
if (strcmp(token->content.string, "set") == 0) {
|
||||||
|
compile_enter_tag(&result);
|
||||||
|
string_append(&result, "set ");
|
||||||
|
string_append(&result,token->next->content.string);
|
||||||
|
string_append(&result,"=");
|
||||||
|
string_append(&result,token->next->next->content.string);
|
||||||
|
compile_exit_tag(&result);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
3
src/compile.h
Normal file
3
src/compile.h
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#include "syntax.h"
|
||||||
|
|
||||||
|
char* compile(tSyntaxElement*);
|
@ -5,6 +5,7 @@
|
|||||||
#include "syntax.h"
|
#include "syntax.h"
|
||||||
#include "printtree.h"
|
#include "printtree.h"
|
||||||
#include "process.h"
|
#include "process.h"
|
||||||
|
#include "compile.h"
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
@ -37,6 +38,8 @@ int main(int argc, char *argv[]) {
|
|||||||
process(code, NULL);
|
process(code, NULL);
|
||||||
printtree(code,1);
|
printtree(code,1);
|
||||||
|
|
||||||
|
printf("\nCompiled: \n%s\n", compile(code));
|
||||||
|
|
||||||
se_free(code);
|
se_free(code);
|
||||||
code = NULL;
|
code = NULL;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user