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)) {
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);
}
+3 -3
View File
@@ -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);