2013-10-03 12 views
7

Mam dość notacji Regex. Jest brzydki, nieczytelny i niemożliwy do debugowania. Jednak matematycy używają Finite State Machines do projektowania wyrażeń regularnych od dziesięcioleci.Czy istnieje program, który pozwala mi zaprojektować Regex przy użyciu Finite State Machine Graph?

Finite State Machines

Jeśli mam coraz denerwują regexes, pójdę i wyciągnąć go jako maszynę skończonego ręcznie, a następnie musiał tłumaczyć automatem skończonym do jakiegoś ohydnego składni regex I” m za pomocą dzisiaj.

Czy istnieje program, który pozwala mi projektować maszyny skończone i wypluwać wyrażenie regularne?

+1

Są rzeczy, które są obsługiwane przez wyrażenia regularne, które nie są w maszynach skończonych stanów. –

+0

Nie słyszałem o takim programie; być może będziesz musiał sam go stworzyć. Może skrypt do inkscape? – Marcin

+1

W czasach, gdy Sussman był nowicjuszem, Minsky pewnego razu przyszedł do niego, gdy on siedział hakując na PDP-6. "Co robisz?" zapytał Minsky. "Trenuję losowo podłączoną sieć neuronową, aby grać w kółko i krzyżyk". "Dlaczego sieć jest losowo podłączona?" zapytał Minsky. "Nie chcę, aby miały jakieś uprzedzenia, jak grać." Minsky zamknął oczy. "Dlaczego zamykasz oczy?" Sussman zapytał swojego nauczyciela. "Aby pokój był pusty." – FrankieTheKneeMan

Odpowiedz

1

JFLAP to program do eksperymentów formalnych języków tematów, w tym niedeterministyczny automat skończony, niedeterministycznych automatów ze stosem, multi-taśmy maszyny Turinga, kilka rodzajów gramatyk, analizowania i L-systemów. Oprócz tworzenia i testowania ich przykładów, JFLAP pozwala eksperymentować z proofami konstrukcyjnymi z jednej postaci na drugą, na przykład konwertując NFA na DFA do minimalnego stanu DFA na wyrażenie regularne lub regularną gramatykę.

JFLAP

+0

ah, rejestracja. Słodkie :-) –

2

Jeśli znasz Python, można spróbować greenery. Pakiet fsm jest przeznaczony dla maszyn o stanie skończonym, a lego dla obiektów wyrażenia regularnego. Te dwie mogą być swobodnie nawracane.

>>> from greenery import fsm 
>>> x = fsm.fsm(
...  alphabet={"1", "2"}, 
...  states={"A", "B", "C", "D", "E"}, 
...  initial="A", 
...  finals={"E"}, 
...  map={ 
...   "A": {"1": "C", "2": "A"}, 
...   "B": {"1": "B", "2": "D"}, 
...   "C": {"1": "E", "2": "C"}, 
...   "D": {"1": "A", "2": "B"}, 
...   "E": {"1": "C", "2": "D"} 
...  } 
...) 
>>> print(x.lego()) 
(1(11|2)*12(21*2)*1|2)*1(11|2)*1 

czuję muszę podkreślić, że przykład automat skończony brakuje zarówno stan początkowy oraz wszelkich stanów końcowych, więc domyśliłem się je. Również dowolny FSM zwykle przekształca się w dość okropny wyrażenie regularne, a upraszczanie wyrażenia regularnego jest trudne obliczeniowo ...

Powiązane problemy