繁体   English   中英

打印抽象语法树

[英]Printing an Abstract Syntax Tree

我正在尝试使用抽象语法树来采用反向波兰表示法方程式并将其更改为等效的中缀形式。 下面是AST和我们最初用来打印树的print_table的结构。

struct tnode {
  char *datum;
  struct tnode *left;
  struct tnode *right;
};

void print_table(struct tnode *AST) {
  if(AST != NULL) {
    print_table(AST->left);
    printf("%s", AST->datum);
    print_table(AST->right);
  }
}

但是,这从上到下打印树。 例如,如果给定5 4 + 3 - ,它将返回-3+45 我想要打印的是5+4-3 ,本质上是打印最左边的子节点,然后是父节点,然后是该父节点的右边的子节点,直到树的所有元素都已被打印。 我该怎么做呢?

struct tnode*
build_tree(struct snode **S)
{
  struct tnode* root;
  if (*S == NULL)
    return NULL;

  char *top = peek(*S);

  if (is_operator(top))
    {
      root = create_node(top);
      pop(S);
      root->right = build_tree(S);
      pop(S);
      root->left = build_tree(S);
      return root;
    }

  root = create_node(top);

  return root;
}

我认为您的问题在于如何构建树。 打印功能应该适合您。 这是构建树的方法。 我在你班上。 如果您想见面并一起从事该项目,那我会失望的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM