Haskell 来自正则表达式的示例

Haskell 来自正则表达式的示例,haskell,quickcheck,Haskell,Quickcheck,如何使用quickcheck生成与正则表达式匹配的随机字符串 以正则表达式(即相应的有限自动机)生成字符串的方式。(而不是:生成一些随机字符串,然后由正则表达式过滤) 理想情况下,结果字符串的分布应与正则表达式生成的字符串集(即正则语言)一致(其中每个字符串的长度以常量为界).目前还不存在类似的规则。当您有无限长的语言和字符串时,统一性是不可行的。您以何种方式定义正则表达式?为它们创建一个数据类型,然后创建一个任意的实例应该不难。你必须实现各种各样的操作符,但是对于基本的东西来说应该没有那么难。

如何使用quickcheck生成与正则表达式匹配的随机字符串

以正则表达式(即相应的有限自动机)生成字符串的方式。(而不是:生成一些随机字符串,然后由正则表达式过滤)


理想情况下,结果字符串的分布应与正则表达式生成的字符串集(即正则语言)一致(其中每个字符串的长度以常量为界).

目前还不存在类似的规则。当您有无限长的语言和字符串时,统一性是不可行的。您以何种方式定义正则表达式?为它们创建一个数据类型,然后创建一个
任意的
实例应该不难。你必须实现各种各样的操作符,但是对于基本的东西来说应该没有那么难。问题将出现在像lookahead/lookback这样的东西上,但可能是可行的。使用基本的QC组合符(
oneof
供选择,
listof
供星型,
liftM2(++)
供串联),只需生成基本的正则语言就可以了。您可能对以下内容感兴趣。如果你可以列举整个语言,比如说一个列表,那么简单地从该列表中均匀采样就可以得到你想要的均匀分布属性(至少对于有限语言-不确定你想要的是什么。严格地说,如果语言是无限的,则L中所有x的概率(x)=0)