expressiosn can compile
This commit is contained in:
10
src/parser.c
10
src/parser.c
@@ -23,7 +23,7 @@ char** tokenize(char* str) {
|
||||
str++;
|
||||
}else {
|
||||
t = str;
|
||||
while (*t && *t != ' ' && *t != '(' && *t != ')') ++t;
|
||||
while (*t && *t != ' ' && *t != '\n' && *t != '\t' && *t != '(' && *t != ')') ++t;
|
||||
tokens[len-1] = malloc(t-str+1);
|
||||
strncpy(tokens[len-1], str, t-str);
|
||||
tokens[len-1][t-str] = '\0';
|
||||
@@ -91,7 +91,7 @@ parse_state* read_tokens(parse_state* state) {
|
||||
state->tokens++;
|
||||
int n = state->node->n_children++;
|
||||
|
||||
state->node->children = realloc(state->node->children, n+1);
|
||||
state->node->children = realloc(state->node->children, (n+1)*sizeof(sc_ast));
|
||||
|
||||
if (!strncmp(token, "(", 2)) {
|
||||
sc_ast* list = make_list();
|
||||
@@ -104,7 +104,7 @@ parse_state* read_tokens(parse_state* state) {
|
||||
}
|
||||
|
||||
state->node->children[n] = nstate->node;
|
||||
state->tokens = nstate->tokens;
|
||||
state->tokens = ++nstate->tokens;
|
||||
free(nstate);
|
||||
} else {
|
||||
state->node->children[n] = read_token(token);
|
||||
@@ -119,9 +119,9 @@ sc_ast* sc_parse(char* input) {
|
||||
state->tokens = tokens;
|
||||
state->node = make_pseudo();
|
||||
|
||||
state = read_tokens(state);
|
||||
while (state->tokens[0]) state = read_tokens(state);
|
||||
|
||||
return state->node->children[0];
|
||||
return state->node;
|
||||
}
|
||||
|
||||
const char* tag_to_string(int x) {
|
||||
|
Reference in New Issue
Block a user