meillo@2: #include meillo@2: #include meillo@2: #include meillo@2: #include "baum.h" meillo@2: #include "actions.h" meillo@2: meillo@2: meillo@3: unsigned char action(struct Node* node) { meillo@2: if (strcmp(node->name, "print") == 0) { meillo@2: logit("print-node"); meillo@2: return action_print(node); meillo@3: meillo@2: } else if (strcmp(node->name, "sum") == 0) { meillo@2: logit("sum-node"); meillo@2: return action_sum(node); meillo@3: meillo@2: } else if (strcmp(node->name, "printchar") == 0) { meillo@2: logit("printchar-node"); meillo@2: return action_printchar(node); meillo@3: meillo@2: } else if (strcmp(node->name, "number") == 0) { meillo@2: logit("number-node"); meillo@2: return action_number(node); meillo@3: meillo@3: } else if (strcmp(node->name, "input") == 0) { meillo@3: logit("input-node"); meillo@3: return action_input(node); meillo@3: meillo@2: } else { meillo@2: fprintf(stderr, "unknown kind of node"); meillo@2: exit(1); meillo@2: } meillo@2: } meillo@2: meillo@2: meillo@2: meillo@3: unsigned char action_print(struct Node* node) { meillo@2: printf("%d\n", action(node->down)); meillo@2: return 0; meillo@2: } meillo@2: meillo@2: meillo@3: unsigned char action_printchar(struct Node* node) { meillo@2: printf("%c\n", action(node->down)); meillo@2: return 0; meillo@2: } meillo@2: meillo@2: meillo@3: unsigned char action_sum(struct Node* node) { meillo@2: struct Node* tp; meillo@2: tp = node->down; meillo@2: while (tp != NULL) { meillo@2: node->value += action(tp); meillo@2: tp = tp->right; meillo@2: } meillo@2: return node->value; meillo@2: } meillo@2: meillo@2: meillo@3: unsigned char action_number(struct Node* node) { meillo@2: return node->value; meillo@2: } meillo@2: meillo@3: meillo@3: unsigned char action_input(struct Node* node) { meillo@3: unsigned char input = (unsigned char) getchar(); meillo@3: getchar(); /* catches the newline */ meillo@3: insertLast(node, newNode("number", input)); meillo@3: return 0; meillo@3: } meillo@3: meillo@3: