diff --git a/include/parser.h b/include/parser.h index e0d0866..64f5df4 100644 --- a/include/parser.h +++ b/include/parser.h @@ -23,5 +23,3 @@ uint8_t node_rbp(ASTNode node); AST parse(ASTNodeArray *arr); ASTNode *parse_expr(ASTNodeSlice *slice, uint8_t min_bp); -void print_AST(AST tree); -void print_node(ASTNode *node, int depth); diff --git a/src/main.c b/src/main.c index 7fb850d..a18e12c 100644 --- a/src/main.c +++ b/src/main.c @@ -9,7 +9,6 @@ int main(void) { tokenize("3 + 4 * 5", &context); AST tree = parse(&context); - print_AST(tree); printf("Hola\n"); diff --git a/src/parser.c b/src/parser.c index 1a6f4c5..c348aac 100644 --- a/src/parser.c +++ b/src/parser.c @@ -74,7 +74,7 @@ ASTNode *parse_expr(ASTNodeSlice *slice, uint8_t min_bp) { *left_side = ASTNodeSlice_next(slice); while (true) { - if (ASTNodeSlice_is_valid(slice)) { + if (!ASTNodeSlice_is_valid(slice)) { break; } @@ -102,35 +102,5 @@ ASTNode *parse_expr(ASTNodeSlice *slice, uint8_t min_bp) { return left_side; } -void print_AST(AST tree) { - print_node(tree.head, 0); -} -void print_node(ASTNode *node, int depth) { - if (node == NULL) { - return; - } - - if (node->type == NODE_BINARY_OP) { - print_node(node->data.binary.right, depth + 1); - } - - for (int i = 0; i < depth; i++) { - printf(" "); - } - - switch (node->type) { - case NODE_INTEGER: - printf("%ld\n", node->data.integer); - break; - - case NODE_BINARY_OP: - printf("%c\n", operator_to_char(node->data.binary.op)); - break; - } - - if (node->type == NODE_BINARY_OP) { - print_node(node->data.binary.left, depth + 1); - } -} diff --git a/test/test_parser.c b/test/test_parser.c index 1cf642a..70e550d 100644 --- a/test/test_parser.c +++ b/test/test_parser.c @@ -46,7 +46,56 @@ static void test_parsing_basic_expression(void **state) { assert_int_equal(node.data.integer, 789); AST tree = parse(&tokens); + // Assert head is + assert_int_equal(tree.head->type, NODE_BINARY_OP); + assert_int_equal(tree.head->data.binary.op, OP_ADD); + + assert_int_equal(tree.head->data.binary.left->type, NODE_INTEGER); + assert_int_equal(tree.head->data.binary.left->data.integer, 2); + + + assert_int_equal( + tree.head->data.binary.right->type, + NODE_BINARY_OP + ); + assert_int_equal( + tree.head->data.binary.right->data.binary.op, + OP_MUL + ); + + assert_int_equal( + tree.head->data.binary.right->data.binary.right->type, + NODE_INTEGER); + assert_int_equal( + tree.head->data.binary.right->data.binary.right->data.integer, + 789); + + assert_int_equal( + tree.head->data.binary.right->data.binary.left->type, + NODE_BINARY_OP + ); + assert_int_equal( + tree.head->data.binary.right->data.binary.left->data.binary.op, + OP_DIV + ); + + assert_int_equal( + tree.head->data.binary.right->data.binary.left->data.binary.right->type, + NODE_INTEGER + ); + assert_int_equal( + tree.head->data.binary.right->data.binary.left->data.binary.right->data.integer, + 66 + ); + + assert_int_equal( + tree.head->data.binary.right->data.binary.left->data.binary.left->type, + NODE_INTEGER + ); + assert_int_equal( + tree.head->data.binary.right->data.binary.left->data.binary.left->data.integer, + 3 + ); } int main(void) {