Fixed some bugs with the Scanner and Parser.

This commit is contained in:
2022-03-02 22:30:53 -06:00
parent 7bf7304bd4
commit d039a26c16
2 changed files with 16 additions and 11 deletions
+13 -8
View File
@@ -137,12 +137,20 @@ Expr* Primary() {
if (Match(1, LParen)) { if (Match(1, LParen)) {
free(expr); free(expr);
expr = Expression(); 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."); //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, ...) { int Match(int count, ...) {
@@ -190,13 +198,13 @@ void PrintExpressionTree(const Expr* tree) {
PrintExpressionTree(tree->expression.Binary.left); PrintExpressionTree(tree->expression.Binary.left);
PrintExpressionTree(tree->expression.Binary.right); PrintExpressionTree(tree->expression.Binary.right);
printf("%s", tree->expression.Binary.op->lexeme); printf("%s", tree->expression.Binary.op->lexeme);
printf(")\n"); printf(")");
} }
else if (tree->type == UNARY) { else if (tree->type == UNARY) {
printf("("); printf("(");
printf("%s", tree->expression.Unary.op->lexeme); printf("%s", tree->expression.Unary.op->lexeme);
PrintExpressionTree(tree->expression.Unary.right); PrintExpressionTree(tree->expression.Unary.right);
printf(")\n"); printf(")");
} }
else if (tree->type == GROUPING) { else if (tree->type == GROUPING) {
PrintExpressionTree(tree->expression.Grouping.expression); PrintExpressionTree(tree->expression.Grouping.expression);
@@ -210,13 +218,10 @@ void FreeExpressionTree(Expr* tree) {
if (tree->type == BINARY) { if (tree->type == BINARY) {
FreeExpressionTree(tree->expression.Binary.left); FreeExpressionTree(tree->expression.Binary.left);
FreeExpressionTree(tree->expression.Binary.right); FreeExpressionTree(tree->expression.Binary.right);
//FreeToken(tree->expression.Binary.op);
} }
else if (tree->type == UNARY) { else if (tree->type == UNARY) {
FreeExpressionTree(tree->expression.Unary.right); FreeExpressionTree(tree->expression.Unary.right);
//FreeToken(tree->expression.Unary.op);
} }
//else if (tree->type == LITERAL) FreeToken(tree->expression.Literal.type);
free(tree); free(tree);
} }
+3 -3
View File
@@ -105,13 +105,13 @@ void ScanToken(TokenList* tokens) {
AddToTokenList(CreateToken(NULL, line, LParen), tokens); AddToTokenList(CreateToken(NULL, line, LParen), tokens);
break; break;
case ')': case ')':
AddToTokenList(CreateToken(NULL, line, LParen), tokens); AddToTokenList(CreateToken(NULL, line, RParen), tokens);
break; break;
case '{': case '{':
AddToTokenList(CreateToken(NULL, line, LParen), tokens); AddToTokenList(CreateToken(NULL, line, LBrace), tokens);
break; break;
case '}': case '}':
AddToTokenList(CreateToken(NULL, line, RParen), tokens); AddToTokenList(CreateToken(NULL, line, RBrace), tokens);
break; break;
case ',': case ',':
AddToTokenList(CreateToken(NULL, line, Comma), tokens); AddToTokenList(CreateToken(NULL, line, Comma), tokens);