Compare commits
No commits in common. "f44429ce5decc663660ca05be22137e0beb2a666" and "5392258a0dac890e98400e90c71893c3311551de" have entirely different histories.
f44429ce5d
...
5392258a0d
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
28
src/parser.c
28
src/parser.c
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user