如何迭代“沿着”Marpa解析森林,而不是“通过”其解析树?

时间:2014-09-18 02:09:51

标签: ambiguity parse-tree ambiguous-grammar marpa parse-forest

说我有一个很好的模糊Marpa语法和一个很好的模糊输入字符串。

我可以用Marpa解析字符串,最后得到一个解析林。我甚至可以遍历森林中的每个解析树。

但我怎样才能迭代"沿着"解析森林?

描述我的意思:

解析林是一种图形,它可以包含备选方案分离的节点,以及备选方案连接在一起的节点,并且#34;主流"。

说这些是一个解析林的替代解析树:

  • A B1 C
  • A B2 C
  • A B3 B4 C

有一个主要流A ... C,但有一个含糊不清的B部分。

当然,在现实世界的解析中,在分支时可能存在许多级别的分支,并且可能存在不重新加入单个主流的流。但总的来说,有两个或多个解释共有很多部分。

可以使用哪些方法来迭代明确且模糊的节点链?

实际上我可以输出整个图吗?

2 个答案:

答案 0 :(得分:3)

这个gist显示了迭代ASF节点以生成序列化AST列表的2个示例(基本和高级)。

两者都基于Marpa :: R2测试套件的代码(cpan / t / sl_panda(1).t)。

希望它有所帮助。

P.S。这个gist可能会更好地为您服务 - 它按访问顺序打印所有ASF节点 - 您可以使用

$spans->{ $literal }->{ $start }

散列以查看节点是否不明确,并根据跨度间隔($ start,$ start + $ length)从那里构建图形以构建子/父链接。

答案 1 :(得分:1)

执行此操作的界面在Marpa :: R2中从alpha变为稳定,因此问题很合适。查看https://metacpan.org/pod/distribution/Marpa-R2/pod/ASF.podhttps://metacpan.org/pod/distribution/Marpa-R2/pod/Glade.pod

你能输出整个图吗?是的,但这很容易提供。艰难的部分提出了一种很好的方式来深入到感兴趣的部分,而不是指数级。

另一位Marpa专家Btw可能会在这里说话,现在这个人在我的界面上工作的经验比我更多。也许你想等一下他的答案,你可能比我更好。 : - )