【问题标题】:How do you write an n-ary tree in postfix notation?如何用后缀表示法编写 n 叉树?
【发布时间】:2021-05-18 06:14:48
【问题描述】:

我想了解this paper下推自动机在排序的树中匹配树模板。第一步是使用后缀表示法来创建树。

我该如何取一棵这样的树:

foo
  bar
    abc
    def
  bar
    abc
    a
    b
    a
    b
    c
    d
    e
    def
    abc
  baz
    bar
      abc
      a
      b
      c
    abc
    def

然后用后缀表示法写出来?

【问题讨论】:

    标签: parsing tree notation


    【解决方案1】:

    这没有多大意义。但是,您可以使用括号:

    ...(abc a b c)bar abc def)baz)foo
    

    或者用每个运算符指定操作数的个数:

    ... abc a b c bar4 abc def baz3 foo3
    

    甚至:

    ... abc0 a0 b0 c0 bar4 abc0 def0 baz3 foo3
    

    【讨论】:

      【解决方案2】:

      根据该论文的条款,您所询问的树是不可能的,因为您的节点具有相同的“符号”(名称)和不同数量的子节点。然而,该论文假设字母表中的每个符号都有一个指定的“arity”(标有该符号的节点的子节点数)。顺便说一下,叶子符号的数量为 0。

      这在开头的基本定义部分(非常简短地)提到:

      排序的字母表是一对? = (Σ, φ),其中 Σ 是一个字母表,φ em> 是一个映射。符号 xΣ 的元数(秩)是 φ(x)。

      换句话说,有一个数学函数可以告诉您一个标记节点将有多少个子节点,您可以在后缀符号中使用它来知道该符号之前有多少子树。 (另请注意,包含 arity 函数的 ? 是他们对 PDA 的定义的一部分。)

      【讨论】:

      • 感谢您指出这一点,我已经有一段时间没有注意到了。
      • 是否有任何“树表达式匹配”论文可以像我描述的那样在树上工作? (不确定要搜索什么)?我基本上是trying to build 某种树的自动机,给定一个树模式。
      • @lance:您可以使用您拥有的纸张,但您需要将arity 添加到每个节点。一种常用的写法是foo/2(在 Prolog 和 Erlang 中使用)。不过,我真的不是树表达式匹配方面的专家。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      相关资源
      最近更新 更多