diff --git a/parser.c b/parser.c index 9b6ea7e..99f58c7 100644 --- a/parser.c +++ b/parser.c @@ -137,12 +137,20 @@ Expr* Primary() { if (Match(1, LParen)) { free(expr); expr = Expression(); - if (!Check(RParen)) printf("Unbalcnace\n"); + + Expr* temp = calloc(1, sizeof(Expr)); + if (!Check(RParen)) printf("Unbalanced\n"); //Todo: something or another... //Consume(RParen, "Expect ')' after expression."); - expr->type = GROUPING; + temp->type = GROUPING; + temp->expression.Grouping.expression = expr; + + return temp; } - return expr; + free(expr); + printf("Failed to match Primary\n"); + + return NULL; } int Match(int count, ...) { @@ -190,13 +198,13 @@ void PrintExpressionTree(const Expr* tree) { PrintExpressionTree(tree->expression.Binary.left); PrintExpressionTree(tree->expression.Binary.right); printf("%s", tree->expression.Binary.op->lexeme); - printf(")\n"); + printf(")"); } else if (tree->type == UNARY) { printf("("); printf("%s", tree->expression.Unary.op->lexeme); PrintExpressionTree(tree->expression.Unary.right); - printf(")\n"); + printf(")"); } else if (tree->type == GROUPING) { PrintExpressionTree(tree->expression.Grouping.expression); @@ -210,13 +218,10 @@ void FreeExpressionTree(Expr* tree) { if (tree->type == BINARY) { FreeExpressionTree(tree->expression.Binary.left); FreeExpressionTree(tree->expression.Binary.right); - //FreeToken(tree->expression.Binary.op); } else if (tree->type == UNARY) { FreeExpressionTree(tree->expression.Unary.right); - //FreeToken(tree->expression.Unary.op); } - //else if (tree->type == LITERAL) FreeToken(tree->expression.Literal.type); free(tree); } \ No newline at end of file diff --git a/scanner.c b/scanner.c index 0793e8d..3b86882 100644 --- a/scanner.c +++ b/scanner.c @@ -105,13 +105,13 @@ void ScanToken(TokenList* tokens) { AddToTokenList(CreateToken(NULL, line, LParen), tokens); break; case ')': - AddToTokenList(CreateToken(NULL, line, LParen), tokens); + AddToTokenList(CreateToken(NULL, line, RParen), tokens); break; case '{': - AddToTokenList(CreateToken(NULL, line, LParen), tokens); + AddToTokenList(CreateToken(NULL, line, LBrace), tokens); break; case '}': - AddToTokenList(CreateToken(NULL, line, RParen), tokens); + AddToTokenList(CreateToken(NULL, line, RBrace), tokens); break; case ',': AddToTokenList(CreateToken(NULL, line, Comma), tokens);