漂亮地将解析树打印到标准输出?

Posted

技术标签:

【中文标题】漂亮地将解析树打印到标准输出?【英文标题】:Pretty printing a parse tree to std out? 【发布时间】:2015-03-16 23:18:26 【问题描述】:

我用 C++ 编写了一个简单的递归下降解析器。

我需要一种将其打印到标准输出的方法,但我不知道该怎么做。

我有一个类 Node,它有一个函数 printSymbol() 来打印它的符号。

它的子代有一个std::list <Node*> m_children

鉴于此,我怎样才能将解析树漂亮地打印到标准输出?

谢谢

【问题讨论】:

【参考方案1】:

printSymbol 添加一个采用缩进级别或默认值的重载,都可以:

void printSymbol(unsigned indent = 0) const

    std::cout << std::string(indent,' ') << m_symbol << '\n';
    for (auto child : m_children)
        child->printSymbol(indent+2);

给定任何单个节点,直接调用printSymbol() 应该简单地输出符号、换行符及其所有子节点(如果有的话),全部正确缩进。给定一个根指针,这应该将您的整个解析层次结构转储到标准输出。如果你真的开始使用它,你可以在 ascii 艺术、依赖于控制台的行字符方面获得非凡的创意,但我警告你,它很快就会变得乏味。

无论如何,这至少应该为您提供可以打印的图片。要么,要么我完全误解了你的问题。

祝你好运

【讨论】:

以上是关于漂亮地将解析树打印到标准输出?的主要内容,如果未能解决你的问题,请参考以下文章

剑指Offer-60 把二叉树打印成多行

为啥打印到标准输出这么慢?可以提速吗?

如何将整个 istream 打印到标准输出和字符串

漂亮打印到文件?

C 低级标准输入以接受文件名,然后将文件内容打印到标准输出

Perltidy总是打印到标准输出