Compare commits

..

No commits in common. "f44429ce5decc663660ca05be22137e0beb2a666" and "5392258a0dac890e98400e90c71893c3311551de" have entirely different histories.

5 changed files with 17 additions and 42 deletions

View File

@ -14,9 +14,9 @@ void es_addsymbol(struct Extstring* string, char symbol) {
} }
int es_size(struct Extstring* string) { int es_size(struct Extstring* string) {
int size = 0; int size;
struct Extstring* ptr = string; struct Extstring* ptr = string;
for (; ptr != NULL; size++) { for (size = 0; ptr != NULL; size++) {
ptr = ptr->next; ptr = ptr->next;
} }
return size; return size;
@ -37,17 +37,19 @@ void es_free(struct Extstring* string) {
free(ptr); free(ptr);
} }
char* es_tostring(struct Extstring* string) { struct SString* es_tostring(struct Extstring* string) {
struct Extstring* ptr = string; struct Extstring* ptr = string;
int size = es_size(string) + 1; int size = es_size(string) + 1;
char* cstring = malloc(size); struct SString* sstring = malloc(sizeof(struct SString));
sstring->string = malloc(size);
sstring->size = size;
for (int i = 0; i != size; i++) { for (int i = 0; i != size; i++) {
if (ptr != NULL) { if (ptr != NULL) {
cstring[i] = ptr->symbol; sstring->string[i] = ptr->symbol;
ptr = ptr->next; ptr = ptr->next;
} }
else else
cstring[i] = 0; sstring->string[i] = 0;
} }
return cstring; return sstring;
} }

View File

@ -3,7 +3,12 @@ struct Extstring {
struct Extstring* next; struct Extstring* next;
}; };
struct SString {
int size;
char* string;
};
void es_addsymbol(struct Extstring* string, char symbol); void es_addsymbol(struct Extstring* string, char symbol);
int es_size(struct Extstring* string); int es_size(struct Extstring* string);
void es_free(struct Extstring* string); void es_free(struct Extstring* string);
char* es_tostring(struct Extstring* string); struct SString* es_tostring(struct Extstring* string);

View File

@ -15,13 +15,10 @@ int main(int argc, char *argv[]) {
} }
file = fopen(argv[1],"r"); file = fopen(argv[1],"r");
struct SyntaxElement* code = parse(file); struct SyntaxElement* code = parse(file);
fclose(file);
if (code == NULL) { if (code == NULL) {
fprintf(stderr, "Error during parsing.\n"); fprintf(stderr, "Error during parsing.\n");
return 1; return 1;
} }
printtree(code,0); printtree(code,0);
se_free(code);
code = NULL;
return 0; return 0;
} }

View File

@ -28,27 +28,6 @@ struct SyntaxElement* se_next(struct SyntaxElement* syntaxelement) {
return syntaxelement->next; return syntaxelement->next;
} }
void se_free(struct SyntaxElement* syntaxtree) {
switch (syntaxtree->type) {
case NONE:
free(syntaxtree);
return;
case TREE:
case TOPTREE:
if (syntaxtree->content != NULL) {
se_free((struct SyntaxElement*)syntaxtree->content);
}
break;
default:
free(syntaxtree->content);
break;
}
if (syntaxtree->next != NULL) {
se_free(syntaxtree->next);
}
free(syntaxtree);
}
void se_clean(struct SyntaxElement* syntaxtree) { void se_clean(struct SyntaxElement* syntaxtree) {
if (syntaxtree->next != NULL) { if (syntaxtree->next != NULL) {
switch (syntaxtree->next->type) { switch (syntaxtree->next->type) {
@ -98,11 +77,10 @@ struct SyntaxElement* parse(FILE* file) {
if (symbol == '"') { if (symbol == '"') {
if (string == NULL) { if (string == NULL) {
string = malloc(sizeof(struct Extstring)); string = malloc(sizeof(struct Extstring));
string->next = NULL;
} }
instring = false; instring = false;
syntaxtree->type = STRING; syntaxtree->type = STRING;
char* sstring = es_tostring(string); char* sstring = es_tostring(string)->string;
syntaxtree->content = sstring; syntaxtree->content = sstring;
es_free(string); es_free(string);
string = NULL; string = NULL;
@ -111,7 +89,6 @@ struct SyntaxElement* parse(FILE* file) {
if (string == NULL) { if (string == NULL) {
string = malloc(sizeof(struct Extstring)); string = malloc(sizeof(struct Extstring));
string->symbol = symbol; string->symbol = symbol;
string->next = NULL;
continue; continue;
} }
es_addsymbol(string, symbol); es_addsymbol(string, symbol);
@ -122,7 +99,7 @@ struct SyntaxElement* parse(FILE* file) {
if (isspace(symbol) || symbol == '(' || symbol == ')') { if (isspace(symbol) || symbol == '(' || symbol == ')') {
intoken = false; intoken = false;
syntaxtree->type = TOKEN; syntaxtree->type = TOKEN;
char* sstring = es_tostring(token); char* sstring = es_tostring(token)->string;
syntaxtree->content = sstring; syntaxtree->content = sstring;
es_free(token); es_free(token);
token = NULL; token = NULL;
@ -160,7 +137,6 @@ struct SyntaxElement* parse(FILE* file) {
default: default:
token = malloc(sizeof(struct Extstring)); token = malloc(sizeof(struct Extstring));
token->symbol = symbol; token->symbol = symbol;
token->next = NULL;
intoken = true; intoken = true;
break; break;
} }

View File

@ -2,11 +2,6 @@
#ifndef PARSER_H #ifndef PARSER_H
#define PARSER_H #define PARSER_H
struct SyntaxElement* se_init(void);
struct SyntaxElement* se_bottom(struct SyntaxElement* syntaxelement);
struct SyntaxElement* se_next(struct SyntaxElement* syntaxelement);
void se_free(struct SyntaxElement* syntaxtree);
enum SyntaxElementType { enum SyntaxElementType {
TOPTREE, TOPTREE,
TREE, TREE,