blob: d9fdbf8278c1d309e308b3de2bd370d6cea575ef (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#include "./include/print.h"
#include "./include/ast.h"
#include <stdio.h>
void print_string(ast_t *str) { printf("%s", str->string_value); }
void print_int(ast_t *i) { printf("%d", i->int_value); }
void print_bool(ast_t *b) {
if (b->bool_value)
printf("T");
else
printf("F");
}
void print_float(ast_t *f) { printf("%Lf", f->float_value); }
void print_symbol(ast_t *s) { printf(":%s", s->string_value); }
void print_func(ast_t *f) { print_pair(f->cdr); }
void print_pair(ast_t *p) {
printf("(");
ast_t *cur = p;
while (cur != NULL && (cur->cdr != NULL && cur->car != NULL)) {
print(cur->car);
if (cur->cdr->cdr != NULL) {
printf(" ");
} else
printf(")");
cur = cur->cdr;
}
}
void print(ast_t *res) {
switch (res->type) {
case AST_STRING:
print_string(res);
break;
case AST_INT:
print_int(res);
break;
case AST_BOOL:
print_bool(res);
break;
case AST_FLOAT:
print_float(res);
break;
case AST_FUNCTION:
print_func(res);
break;
case AST_SYMBOL:
print_symbol(res);
break;
case AST_PAIR:
print_pair(res);
break;
case AST_ROOT:
printf("Yeah, let's not do that\n");
break;
}
}
void print_root(ast_t *root) {
for (int i = 0; i < root->root_size; i++)
print(root->subnodes[i]);
}
|