12

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

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

4

2 回答 2

4

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

在 Hackage 之前,Manuel 曾经在一个名为 CTK(编译器工具包)的包中发布代码。我不确定这些天项目的状态是什么。

我认为 Thomas Hallgren 在“Lexing Haskell in Haskell”一文中的词法分析器是动态的,而不是代码生成器,而该版本是为对 Haskell 进行词法分析而量身定制的,库中的机器更通用。Iavor Diatchki 已将代码放在 Hackage 上。

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

于 2011-10-13T17:13:47.487 回答
3

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

于 2011-10-13T10:28:34.070 回答