2016-09-20 61 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

不是,雖然它可以被轉換成一個。實際上,我爲正則表達式構建了一個解析樹,其中解析樹中的每個節點類型都知道如何與其子節點組合生成自己的可能性。 –