From: Matthias Kruk Date: Sat, 11 Jul 2020 08:46:17 +0000 (+0900) Subject: parser: Implement parsing of expressions X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=05ea9b2afaa2db87954cfd41710afc2e57aac7a7;p=ccc parser: Implement parsing of expressions --- diff --git a/src/parser.c b/src/parser.c index 9727d86..cfc67c9 100644 --- a/src/parser.c +++ b/src/parser.c @@ -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); }