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);
}