假设我有一个很好的模糊Marpa语法和一个很不错的模糊输入字符串。
我可以用Marpa解析字符串,最后得到一个解析林。我甚至可以遍历林中的每个解析树。
但是我怎样才能"沿着"解析林进行迭代呢?
描述我的意思:
解析林是一种图,它可以具有备选方案分离的节点,以及备选方案重新连接成"主流"的节点。
假设这些是一个解析林的替代解析树:
A B1 C
A B2 C
A B3 B4 C
有一个主流A
。。。CCD_ 5,但CCD_。
当然,在现实世界中的解析中,分支时可能有许多级别的分支,并且可能有一些流不会重新加入单个主流。但总的来说,两种或多种解释会有很多共同的部分。
哪些方法可以用于沿着明确和不明确的节点链进行迭代?
事实上,我可以输出整个图形吗?
此要点显示了在ASF节点上迭代以生成序列化AST列表的两个示例(基本和高级)。
两者都基于Marpa::R2测试套件的代码(cpan/t/sl_panda(1)-t)
希望能有所帮助。
附言:这个要点可能会更好地为您服务——它按访问顺序打印所有ASF节点——您可以使用
$spans->{ $literal }->{ $start }
hash查看节点是否不明确,并根据跨度间隔($start,$start+$length)从那里构建图,以构建子/父链接。
实现这一点的接口刚刚在Marpa::R2中从alpha变为稳定,所以这个问题来得正是时候。看看https://metacpan.org/pod/distribution/Marpa-R2/pod/ASF.pod和https://metacpan.org/pod/distribution/Marpa-R2/pod/Glade.pod.
你能输出整个图形吗?是的,但这很容易提供。困难的部分是想出了一个很好的方法来深入到感兴趣的部分,而不是指数级的。
Btw,另一位Marpa专家,可能会在这里插话,他在这一点上比我更有经验地使用我的界面。也许你想等一等他的答案,你可能比我更喜欢他的答案