4

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

4

2 回答 2

8

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

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

作为示例,请参阅之前的 SO 问题:Using Parsec to parse regular expressions

于 2012-04-18T12:54:08.850 回答
4

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

玩正则表达式

于 2012-04-18T12:57:39.160 回答