Advertisement
Guest User

Untitled

a guest
Nov 9th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Генерация дерева по опз
  2. // Используемые процедуры и структуры данных
  3. // get_token() - получаем очередной символ из опз, например '*', '+'
  4. // token_node* - узел дерева
  5. // token_node_stack - стек из элементов token_node*
  6. // push_node(), pop_node() - помещение, выталкивания узла дерева из стека
  7.  
  8. token_node *tree_from_polish(const char *polish_expr)
  9. {
  10.     token_node *head;
  11.     token tkn;
  12.     int pos = 0;
  13.     token_node_stack *s = NULL;
  14.     while ((tkn = get_token(polish_expr, &pos)).type != tkn_end) {
  15.         token_node *tmp = malloc(sizeof (*tmp));
  16.         tmp->name = tkn.name;
  17.         if (tkn.type == tkn_op) {
  18.             tmp->left = pop_node(&s);
  19.             tmp->right = pop_node(&s);
  20.         } else {
  21.             tmp->left = tmp->right = NULL;
  22.         }
  23.         push_node(&s, tmp);
  24.     }
  25.     token_node *ret = pop_node(&s);
  26.     return ret;
  27. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement