在Haskell中将字符串解析为另一种数据类型

时间:2012-04-18 12:49:31

标签: regex parsing haskell

最近我一直试图在Haskell中创建一个正则表达式解释器。我所做的是创建一个包含所有可能构造函数的新数据类型(对于序列,*^,区间等),然后定义匹配器函数。它可以创造奇迹但我的问题是我必须将输入(字符串,例如"a(b*)(c|d)ef")转换为我的数据类型("Seq (Sym a) (Seq (Rep Sym b) (Seq (Or Sym c Sym d) Sym ef))")。我遇到了这部分问题(我尝试创建一个新的数据类型,一个解析树,但我完全失败了)。关于如何解决它的任何想法?

2 个答案:

答案 0 :(得分:8)

规范方法是使用解析器组合器库,例如Parsec。 解析器组合库(如解析器生成器)允许您编写语法描述,从而使用该语言生成从字符串到标记的解析器。

您只需将语法编码为Parsec函数。

例如,请参阅此前的SO问题:Using Parsec to parse regular expressions

答案 1 :(得分:4)

关于正则表达式的实现,这是一篇有趣的文章(戏剧):

A Play on Regular Expressions