annotate baum.c @ 0:2f71d692d4f9

initial commit
author meillo@marmaro.de
date Thu, 07 Feb 2008 12:51:54 +0100
parents
children 3da0ff17c8e7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
1 /*
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
2 * baum - an esoteric programming language
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
3 *
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
4 * (c) markus schnalke <meillo@marmaro.de>
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
5 * and julian forster
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
6 *
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
7 */
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
8
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
9
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
10 #include <stdio.h>
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
11 #include <stdlib.h>
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
12
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
13
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
14 struct Node {
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
15 char* name;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
16 char value;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
17 struct Node* down;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
18 struct Node* right;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
19 };
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
20
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
21 struct Node* root;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
22
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
23
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
24 struct Node* newNode(char* name) {
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
25 struct Node* node;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
26 node = (struct Node*) malloc(sizeof(struct Node));
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
27 node->name = name;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
28 node->value = 0;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
29 node->right = 0;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
30 node->down = 0;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
31 return node;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
32 }
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
33
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
34 void init() {
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
35 root = newNode("print");
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
36 root->down = newNode("sum");
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
37 }
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
38
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
39 void cleanup(struct Node* node) {
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
40 if (node->down != NULL) {
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
41 cleanup(node->down);
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
42 }
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
43 if (node->right != NULL) {
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
44 cleanup(node->right);
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
45 }
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
46 free(node); node=0;
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
47 }
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
48
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
49 void printNode(struct Node* node) {
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
50 printf("Node: %20s (%c)\n", node->name, node->value);
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
51 }
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
52
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
53 void printTree(struct Node* root) {
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
54 printNode(root);
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
55 if (root->down != NULL) {
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
56 printTree(root->down);
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
57 }
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
58 if (root->right != NULL) {
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
59 printTree(root->right);
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
60 }
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
61 }
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
62
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
63
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
64 int main(int argc, char* argv[]) {
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
65 init();
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
66 printTree(root);
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
67 cleanup(root);
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
68
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
69 return(0);
2f71d692d4f9 initial commit
meillo@marmaro.de
parents:
diff changeset
70 }