【问题标题】:Parsing and pretty printing the same file format in Haskell在 Haskell 中解析和漂亮打印相同的文件格式
【发布时间】:2017-12-27 14:38:21
【问题描述】:

我想知道,Haskell 中是否有一种标准、规范的方式,不仅可以为特定文件格式编写解析器,还可以编写器。

就我而言,我需要解析一个数据文件进行分析。但是,我也模拟要分析的数据并将其保存为相同的文件格式。我现在可以使用 Parsec 或等效的东西编写解析器,还可以编写以所需方式执行文本输出的函数,但是每当我更改文件格式时,我都必须更改代码中的两个函数。有没有更好的方法来实现这个目标?

谢谢, 多米尼克

【问题讨论】:

  • 我认为最简单的做法是定义一个表示文件语法的数据类型,然后按照您的想法编写一个单独的解析器和漂亮的打印机。例如,大多数语言库就是这样做的。
  • 以下是 reddit 上最近的一些相关主题:1, 2 IMO 这项技术似乎还处于试验阶段。
  • 你要做的是定义一个语法,并使用一些库来自动生成一个解析器和漂亮的打印机。有许多图书馆声称能够做到这一点,但推荐一个可能是 OT(如果我有使用其中任何一个的经验,我会这样做)
  • 我强烈反对票数接近。这个问题不是要查找异地资源;它询问如何解决堆栈溢出问题。问题的答案可以是“你可以用这个库解决这个问题”;这些答案是真实的,而不是基于意见的;它不会导致规则旨在避免的非建设性交互。

标签: parsing haskell parsec file-writing


【解决方案1】:

BNFC-meta 包https://hackage.haskell.org/package/BNFC-meta-0.4.0.3

可能就是你要找的东西

“具体来说,给定一个准引用的 LBNF 语法(由 BNF 转换器使用),它会生成(使用 Template Haskell)一个 LALR 解析器和漂亮的语言打印机。”

更新:发现这个包似乎也实现了目标(尚未测试)http://hackage.haskell.org/package/syntax

【讨论】:

  • 非常感谢 cmets 和您的回答。这确实是我正在寻找的 /grammar/ 的概念。除了 BNFC-meta 包外,夏立耀的second link 还提到了有趣的syntax 库。
猜你喜欢
  • 2016-07-07
  • 2012-05-04
  • 2020-01-24
  • 2011-05-06
  • 2014-05-10
  • 2011-01-07
  • 2020-03-31
  • 1970-01-01
  • 2013-06-21
相关资源
最近更新 更多