漂亮地将解析树打印到标准输出?
Pretty printing a parse tree to std out?
我用 C++ 编写了一个简单的递归下降解析器。
我需要一种方法将其打印到标准输出,但我不知道该怎么做。
我有一个 class 节点,它有一个函数 printSymbol()
来打印它的符号。
它的子项有 std::list <Node*> m_children
。
鉴于此,我怎样才能漂亮地将解析树打印到标准输出?
谢谢
向 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 艺术、依赖于控制台的行字符,如果您真的喜欢它,您可以获得非常有创意的东西,但它很快就会变得乏味,我警告你。
无论如何,这至少应该给你一张可以打印的图片。或者我完全误解了你的问题。
祝你好运
我用 C++ 编写了一个简单的递归下降解析器。
我需要一种方法将其打印到标准输出,但我不知道该怎么做。
我有一个 class 节点,它有一个函数 printSymbol()
来打印它的符号。
它的子项有 std::list <Node*> m_children
。
鉴于此,我怎样才能漂亮地将解析树打印到标准输出?
谢谢
向 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 艺术、依赖于控制台的行字符,如果您真的喜欢它,您可以获得非常有创意的东西,但它很快就会变得乏味,我警告你。
无论如何,这至少应该给你一张可以打印的图片。或者我完全误解了你的问题。
祝你好运