]> git.corax.cc Git - ccc/commitdiff
parser: Implement parsing of expressions
authorMatthias Kruk <m@m10k.eu>
Sat, 11 Jul 2020 08:46:17 +0000 (17:46 +0900)
committerMatthias Kruk <m@m10k.eu>
Sat, 11 Jul 2020 08:46:17 +0000 (17:46 +0900)
src/parser.c

index 9727d86b7a16f95615051f4afd1ca127af5a6b89..cfc67c9739eb4e8f039346f8b15bc22661761224 100644 (file)
@@ -550,8 +550,32 @@ struct string *parse_string(void)
 
 struct expression *parse_expression(void)
 {
-       /* TODO: Implement parsing of expressions */
-       fprintf(stderr, "FIXME: %s() is not implemented\n", __func__);
+       struct expression *expr;
+       int pos;
+
+       expr = expression_new();
+
+       if(!expr) {
+               return(NULL);
+       }
+
+       if((expr->aexpr = parse_assignment_expression())) {
+               return(expr);
+       }
+
+       pos = lex_getpos();
+
+       expr->expr = parse_expression();
+       expr->comma = lex_gettoken();
+       expr->aexpr = parse_assignment_expression();
+
+       if(expr->expr && expr->comma && expr->aexpr && expr->comma->type == TOKEN_COMMA) {
+               return(expr);
+       }
+
+       expression_free(expr);
+       lex_setpos(pos);
+
        return(NULL);
 }