2016-09-20 70 views
2

给定的输入是描述有限语言的正则表达式。有没有一种简单的方法来枚举Python中的语言(或其他编程语言)?循环遍历Python中的正则表达式描述的有限语言

以下是我所期望的:

伪代码:

for x in r'[a-c]': 
    print(x) 

输出:

a 
b 
c 
+0

您需要使用're' Python模块我相信。 –

+0

我删除了我的答案,因为我误解了这个问题。对于像我这样读取它的其他人--FrankHuang所寻找的是一种生成他的正则表达式可以匹配的所有可能字符串的方法。 –

+0

@Jarls,谢谢你的重新解释。 –

回答

0

有没有办法一起做这个内置re模块。

相反,您需要做的是构建您自己的正则表达式解析器并使用它来生成您的语言。

只是看我能否做到这一点,我做了一个基本的正则表达式解析器和生成器。该代码长度为410行,包含一些最小文档,因此可能太大而不适合在此处,因此它的格式为gist

输出示例:

$ python regen.py '[a-c][1-5]' 
'a1' 
'a2' 
'a3' 
'a4' 
'a5' 
'b1' 
'b2' 
'b3' 
'b4' 
'b5' 
'c1' 
'c2' 
'c3' 
'c4' 
'c5' 

备用物品:

$ python regen.py '[a-c]' 
'a' 
'b' 
'c' 

项目的顺序

$ python regen.py '[a-c]|[1-5]' 
'a' 
'b' 
'c' 
'1' 
'2' 
'3' 
'4' 
'5' 

无限运营商都在重复5次封盖......

$ python regen.py 'a*' 
'' 
'a' 
'aa' 
'aaa' 
'aaaa' 
'aaaaa' 

但有限的运营商都没有:

​​
+0

太好了,那正是我需要的。您是否使用DFA执行此操作?我想这会花一些时间来理解代码。 –

+0

不是,虽然它可以被转换成一个。实际上,我为正则表达式构建了一个解析树,其中解析树中的每个节点类型都知道如何与其子节点组合生成自己的可能性。 –