是否有用于编写词法分析器的haskell EDSL?

时间:2011-10-13 08:55:52

标签: haskell parsec alex

在一个阶段中混合词法分析器和解析阶段有时会使Parsec解析器的可读性降低,但也会降低它们的速度。一种解决方案是使用Alex作为标记化器,然后使用Parsec作为标记流的解析器。

这很好但是如果我能摆脱Alex会更好,因为它在编译管道中添加了一个预处理阶段,与haskell“IDE”等不能很好地集成。我想知道是否有这样的作为一个用于描述标记符的haskell EDSL,非常符合Alex的风格,但作为一个库。

2 个答案:

答案 0 :(得分:4)

是 - http://www.cse.unsw.edu.au/~chak/papers/Cha99.html

在Hackage之前,Manuel曾经在一个名为CTK(编译工具包)的软件包中发布代码。我不确定这些日子的项目状态如何。

我认为Thomas Hallgren的文章“Haskell中的Lexing Haskell”中的词法是动态的而不是代码生成器,而发布是针对lexing Haskell而定制的,库中的机器更为通用。 Iavor Diatchki已将代码放在Hackage上。

http://hackage.haskell.org/package/haskell-lexer

答案 1 :(得分:3)

您也可以使用Parsec作为词法分析器。首先将字符串解析为标记,然后将标记解析为目标数据类型。