annotate actions.c @ 2:557fa4df2bcd

added difference between char and number
author meillo@marmaro.de
date Thu, 07 Feb 2008 14:46:27 +0100
parents
children 15d7d6b9766f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
1 #include <stdio.h>
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
2 #include <stdlib.h>
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
3 #include <string.h>
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
4 #include "baum.h"
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
5 #include "actions.h"
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
6
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
7
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
8 char action(struct Node* node) {
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
9 if (strcmp(node->name, "print") == 0) {
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
10 logit("print-node");
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
11 return action_print(node);
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
12 } else if (strcmp(node->name, "sum") == 0) {
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
13 logit("sum-node");
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
14 return action_sum(node);
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
15 } else if (strcmp(node->name, "printchar") == 0) {
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
16 logit("printchar-node");
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
17 return action_printchar(node);
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
18 } else if (strcmp(node->name, "number") == 0) {
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
19 logit("number-node");
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
20 return action_number(node);
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
21 } else {
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
22 fprintf(stderr, "unknown kind of node");
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
23 exit(1);
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
24 }
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
25 }
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
26
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
27
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
28
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
29 char action_print(struct Node* node) {
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
30 printf("%d\n", action(node->down));
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
31 return 0;
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
32 }
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
33
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
34
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
35 char action_printchar(struct Node* node) {
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
36 printf("%c\n", action(node->down));
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
37 return 0;
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
38 }
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
39
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
40
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
41 char action_sum(struct Node* node) {
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
42 struct Node* tp;
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
43 tp = node->down;
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
44 while (tp != NULL) {
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
45 node->value += action(tp);
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
46 tp = tp->right;
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
47 }
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
48 return node->value;
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
49 }
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
50
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
51
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
52 char action_number(struct Node* node) {
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
53 return node->value;
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
54 }
557fa4df2bcd added difference between char and number
meillo@marmaro.de
parents:
diff changeset
55