Ral*_*lph 6 parsing haskell abstract-syntax-tree
作为学习Haskell(并折磨自己)的练习,我正在考虑编写一个可配置的Haskell代码美化器.
它将支持用JSON或YAML(或更好的东西?)编写的配置文件,它指定排序导入,排序/分组data和class语句,部分之间的行数等选项.
我正在寻找Haskell 98的解析器,它生成一个抽象语法树(AST)并保留注释.解析GHC及其语言扩展将是一个奖励.
在没有这样的事情的情况下,我想我可以编写一个递归下降的解析器或使用Parsec或解析器生成器的解析器.也许滚动我自己会增加学习(和折磨:-)).
在其中一个开源许可证下是否有完整的Haskell-> AST解析器?如果我在这个项目上取得任何进展,我会把它放在github上.
dfl*_*str 16
包中有一个解析器haskell-src-exts.解析器不仅解析了大多数GHC扩展; 它还可以识别常见的扩展,例如语法XML文字等.parseModuleWithComments如果您还想访问评论信息,则应使用该功能.
但请注意,注释不存储在实际语法树中; 它们存储为具有位置信息的单独注释列表.如果你真的需要在树中包含注释,通过使用线性合并算法将树与列表合并(两个序列都可以被认为是"已排序"),那么将注释包含在树中应该是相当简单的.注释甚至可以与相关的AST节点一起存储,因为"带注释的"AST可以在每个节点中包含任意元数据(默认情况下,仅SrcSpanInfo).之所以在实际haskell-src-exts包中没有这样做的原因可能是因为AST解析器是在注释解析器之前编写的.