加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Pretty在Ruby中打印树数据结构

发布时间:2020-12-16 19:05:44 所属栏目:百科 来源:网络整理
导读:我正在构建一个编译器,在其中我生成一个树,代表传入的源程序.我想显示这是一个像时尚的树,所以我可以向任何感兴趣的人显示程序的结构. 现在我只需要在一行上打印树,如下所示: ProgramNode - 'Math' BlockNode - DeclarationNode - ConstantDeclarationNode
我正在构建一个编译器,在其中我生成一个树,代表传入的源程序.我想显示这是一个像时尚的树,所以我可以向任何感兴趣的人显示程序的结构.

现在我只需要在一行上打印树,如下所示:

ProgramNode -> 'Math' BlockNode -> DeclarationNode -> ConstantDeclarationNode -> const ConstantListNode -> [m := 7,ConstantANode -> [n := StringLiteralNode -> ""TEST"" ]] ;

我想要的是这样的:

ProgramNode 
    /     
'Math' BlockNode
           |
    DeclarationNode
           |
    ConstantDeclarationNode ------------------------------
        /                                               |
     const ConstantListNode                              |
             /  |                                      |
             m  :=  7    ConstantANode                   |
                            /  |                        |
                           n   :=  StringLiteralNode     |
                                      /    |            |
                                      "   TEST  "        ;

我没有真正使用Ruby中的树,它们通常如何表示?

任何帮助,将不胜感激.

解决方法

这种漂亮的印刷需要相当多的数学.此外,如果树对于控制台窗口变得太宽,还不清楚会发生什么.我不知道任何现有的库会这样做.我个人使用 awesome_print.
tree = {'ConstantDeclarationNode' => ['const','ConstantListNode' => ['m',':=','7']]}

require 'awesome_print'

ap tree
# >> {
# >>     "ConstantDeclarationNode" => [
# >>         [0] "const",# >>         [1] {
# >>             "ConstantListNode" => [
# >>                 [0] "m",# >>                 [1] ":=",# >>                 [2] "7"
# >>             ]
# >>         }
# >>     ]
# >> }

它有很多选项,请查看!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读