summaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorkdx <kdx.42@42l.fr>2023-03-17 06:11:06 +0100
committerkdx <kdx.42@42l.fr>2023-03-17 06:11:06 +0100
commit19a77b5c755f6cca04cbea8ca91a6e809b53beae (patch)
tree3561b2729dc8658ed5e70d9c1225a1025bc0d02e /main.c
parentc39d9d78a785826a1ba32375c9819a7f0317515b (diff)
downloadgolem-19a77b5c755f6cca04cbea8ca91a6e809b53beae.tar.gz
error checking
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,