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

Iul*_*anu 4 regex parsing haskell

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

Don*_*art 8

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

您只需将语法编码为Parsec函数即可.

作为示例,请参阅此前的SO问题:使用Parsec解析正则表达式