4

假设我有一个很好的模棱两可的 Marpa 语法和一个很好的模棱两可的输入字符串。

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

但是我怎样才能“沿着”解析森林进行迭代呢?

描述我的意思:

解析森林是一种图,它可以具有备选方案分离的节点,以及备选方案重新组合成“主流”的节点。

假设这些是一个解析森林的替代解析树:

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

有一个主流A......C但是一个模棱两可的B部分。

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

可以使用哪些方法沿着明确和不明确的节点链进行迭代?

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

4

2 回答 2

3

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

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

希望能帮助到你。

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

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

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

于 2014-09-18T03:45:37.997 回答
1

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

你能输出整个图表吗?是的,但这很容易提供。困难的部分是想出一个很好的方法来钻取感兴趣的部分,而不是指数级。

顺便说一句,另一位 Marpa 专家可能会在这里插话,在这一点上使用我的界面的人比我有更多的经验。也许你想等一下他的回答,你可能比我更喜欢他的回答。:-)

于 2014-09-18T02:27:25.110 回答