Parsing Haskell解析器到AST

Parsing Haskell解析器到AST,parsing,haskell,abstract-syntax-tree,Parsing,Haskell,Abstract Syntax Tree,作为学习Haskell(折磨我自己)的练习,我正在考虑编写一个可配置的Haskell代码美化器 它将支持一个用JSON或YAML(或更好的东西?)编写的配置文件,该文件指定了诸如排序导入、排序/分组data和class语句、节之间的行数等选项 我正在为Haskell 98寻找一个解析器,它生成一个抽象语法树(AST),并保留注释。解析GHC及其语言扩展将是一个额外的好处 如果没有这样的东西,我想我可以编写一个递归下降解析器,或者使用Parsec或解析器生成器。也许我自己滚动会增加学习(和折磨:-

作为学习Haskell(折磨我自己)的练习,我正在考虑编写一个可配置的Haskell代码美化器

它将支持一个用JSON或YAML(或更好的东西?)编写的配置文件,该文件指定了诸如排序导入、排序/分组
data
class
语句、节之间的行数等选项

我正在为Haskell 98寻找一个解析器,它生成一个抽象语法树(AST),并保留注释。解析GHC及其语言扩展将是一个额外的好处

如果没有这样的东西,我想我可以编写一个递归下降解析器,或者使用Parsec或解析器生成器。也许我自己滚动会增加学习(和折磨:-)


是否有一个完整的Haskell->AST解析器可用于其中一个开源许可证?如果我在这个项目上取得任何进展,我会把它放到github上。

包中有一个可用的解析器。解析器不仅解析大多数GHC扩展;它还可以识别常见的扩展,如语法XML文本等。如果您还希望访问注释信息,则应使用该函数


但是请注意,注释并没有存储在实际的语法树中;它们存储为带有位置信息的注释的单独列表。如果您真的需要在树中包含注释,那么通过使用线性合并算法(两个序列都可以被视为“排序”)将树与列表合并,在树中包含注释应该是非常简单的。注释甚至可以与相关的AST节点一起存储,因为“注释”AST可以在每个节点中包含任意元数据(默认情况下,只有
SrcSpanInfo
)。在实际的
haskell src exts
包中没有这样做的原因大概是因为AST解析器是在注释解析器之前编写的。

我编写了一个超级简单的工具,可以自动格式化haskell代码。它通过使用haskell src exts中的解析和漂亮打印功能来实现。你可以在。这可能是一个更加灵活和强大的开始。

我最讨厌的一个问题是丑陋的代码。我的大部分工作都是用Java编写的,人们在签入代码时没有大括号对齐、操作符之间的间距不一致等等,这让我感到惊讶。难道他们没有阅读自己的代码吗?这不困扰他们吗?也许是我的强迫症。无论如何,我同意开箱即用的Haskell是一个数量级的好看的人。但我还是想写一个美化者:-)。是的。我真的是在开玩笑,因为我喜欢你建议的那种东西。为什么不使用haskell本身作为配置文件的语言?我相信我读到过有人逐渐发展他们的领域特定配置语言,直到他们意识到他们只是想要haskell,但这是我能找到的最接近的。或者你可以用这个包裹。