我以前用 Marpa 解析复杂而愚蠢的旧文本格式取得了很好的成功,我正在尝试再做一次。
这种特殊格式有成百上千种不同的“开始”和“结束”块,如下所示:
Begin BlahBlah
asdf qwer 123
987 xxxx
End BlahBlah
Begin FooFoo
Begin BarBar
some stuff (1,2,3)
End BarBar
whatever x
End FooFoo
我如何制定一条规则来匹配上述所有内容中的 BlahBlah、BarBar 和 FooFoo?我在任何示例中都看不到如何动态捕获令牌并重新使用它来终止规则,至少在标准无扫描语法示例中没有。我不想列举所有不同种类的块,因为新种类会破坏事物,我认为没有必要。
Begin/End 块的内容对问题无关紧要。实际上,这些东西是一个复杂的混乱,但没有什么我不知道如何度过难关。我对其他使 Marpa 成为一个很好的工具的复杂细节挥手致意,因此我不想求助于正则表达式。
至少,我试图实现的是块类型(即“BlahBlah”)到其内容的键值映射作为字符串。