summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'main.c')
-rw-r--r--main.c29
1 files changed, 16 insertions, 13 deletions
diff --git a/main.c b/main.c
index 2a7b162..ff6f17d 100644
--- a/main.c
+++ b/main.c
@@ -37,21 +37,24 @@ main(int argc, char **argv)
Token *tokens = lexer(slice);
if (tokens != NULL) {
destroy_duplicates(&tokens, TOK_END);
- group_scope(&tokens);
- group_atom(&tokens);
- group_funcall(&tokens);
- group_deref(&tokens);
- identify(tokens, identify_function, GROUP_FUNCTION, 0);
- identify(tokens, identify_let, GROUP_LET, 1);
- identify(tokens, identify_return, GROUP_RETURN, 1);
- identify(tokens, identify_assign, GROUP_ASSIGN, 1);
- identify(tokens, identify_if, GROUP_IF, 1);
- identify(tokens, identify_else, GROUP_ELSE, 1);
- identify(tokens, identify_while, GROUP_WHILE, 1);
- identify(tokens, identify_expression, GROUP_EXPRESSION, 1);
do {
+ if (group_scope(&tokens) ||
+ group_atom(&tokens) ||
+ group_funcall(&tokens) ||
+ group_deref(&tokens)) {
+ fprintf(stderr, "a group operation failed\n");
+ break;
+ }
+ identify(tokens, identify_function, GROUP_FUNCTION);
+ identify(tokens, identify_let, GROUP_LET);
+ identify(tokens, identify_return, GROUP_RETURN);
+ identify(tokens, identify_assign, GROUP_ASSIGN);
+ identify(tokens, identify_if, GROUP_IF);
+ identify(tokens, identify_else, GROUP_ELSE);
+ identify(tokens, identify_while, GROUP_WHILE);
+ identify(tokens, identify_expression, GROUP_EXPRESSION);
if (check_atom(tokens)) {
- fprintf(stderr, "unidentified atoms are left\n");
+ fprintf(stderr, "unidentified atoms remain\n");
break;
}
Token *group = group_create(&tokens, tokens,