首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FParsec解析无序子句

FParsec解析无序子句
EN

Stack Overflow用户
提问于 2016-08-28 18:25:05
回答 1查看 142关注 0票数 4

我想解析一些语法,如下所示

代码语言:javascript
复制
OUTPUT data
GROUPBY key
TO location
USING object

GROUPBY TO USING子句的顺序可以改变,但每个子句最多只能出现一次。

在FParsec中有没有一种方便的或内置的方法来解析它?我读了一些问题和答案,其中提到Haskell Parsec permute。在FParsec中似乎没有置换。如果这是可行的方法,那么我该如何在FParsec中构建置换呢?

EN

回答 1

Stack Overflow用户

发布于 2016-08-30 07:17:17

我不认为FParsec中有置换解析器。不过,我看到了一些你可以走的方向。

  • 总的来说,@FuleSnabel的建议是相当合理的,而且可能是最容易实现的。不要让解析器负责断言每个子句最多出现一次的属性。相反,单独解析每个子句,允许重复,然后检查生成的AST,如果您的属性不成立,就会出错。

  • ,你可以生成解析器的所有排列,并将它们与choice结合。显然,这种方法不能扩展,但对于三个解析器,我认为它是公平的。
  • 您可以编写自己的原语,以便使用以任何顺序应用的解析器集合进行解析。这可能是many的一个变体,在每个步骤中,您创建一个解析器的choice,然后丢弃该解析器。因此,在每一步中,您都要从不断缩小的解析器列表中进行选择,直到无法再进行解析,最后返回整个过程中收集的结果。
  • 您可以使用user state来跟踪已经使用的解析器,如果一个解析器在同一上下文中被使用了两次,则会失败。我不确定这是否会产生一个特别好的解决方案--以前还没有真正尝试过。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39190310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档