2016-09-20 12 views
2

与えられた入力は、有限言語を記述する正規表現です。 Python(または他のプログラミング言語)で言語を列挙する簡単な方法はありますか?pythonでregexで記述された有限言語によるループ

次は私が期待するものである:

は擬似コード:

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

出力:

a 
b 
c 
+0

あなたは、私は信じている 're'のPythonモジュールを使用する必要があります。 –

+0

私は質問を誤解したので、私は私の答えを削除しました。 @FrankHuangが探しているのは、正規表現が一致するすべての可能な文字列を生成する方法です。 –

+0

@JEARLS、再解釈ありがとう。 –

答えて

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

実際には、それは1つに変換することはできますが。私は実際に正規表現用の解析木を構築します。ここで、解析木の各ノード型は子と組み合わせて独自の可能性を生成する方法を知っています。 –

関連する問題