From 05ea9b2afaa2db87954cfd41710afc2e57aac7a7 Mon Sep 17 00:00:00 2001 From: Matthias Kruk Date: Sat, 11 Jul 2020 17:46:17 +0900 Subject: [PATCH] parser: Implement parsing of expressions --- src/parser.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) 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); } -- 2.47.3