diff options
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 29 |
1 files changed, 16 insertions, 13 deletions
@@ -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, |