#include #include #include "tree.h" int strichar(const char *str, char c){ for(int i=0; str[i]!='\0';i++){ if(str[i] == c) return i; } return -1; //char not found } const char ops[] = {'+','*','!'}; //ordem inversa const int opsize = sizeof(ops)/sizeof(char); node * parse(char *str) { //expects a string with no whitespace int j,i; for(i=0; i=0) break; } node *this = (node *)malloc(sizeof(node)); if(j<0) { this->type = LTTR; this->el = str[0]; } else{ this->el = ops[i]; if(i==2) { this->type = UNOP; this->child[0] = parse(str+j+1); } else { str[j] = '\0'; this->type = BIOP; this->child[0] = parse(str); this->child[1] = parse(str+j+1); } } return this; } void fprintTree(FILE *stream, node *root, int level) { if (root == NULL) return; if (level) { for (int i = 1; i < level; i++) { fprintf(stream, "│ "); } fprintf(stream, "├─ "); } fprintf(stream, "%c\n", root->el); for (int i = 0; i < 2; i++) { if (root->child[i] != NULL) { fprintTree(stream, root->child[i], level + 1); } } } void printTree(node *root, int level) { fprintTree(stdout, root, level); }