2011-03-04 73 views
6

我在一段時間前看到了scala.util.automata的軟件包,最近在閱讀ScalaDoc時剛剛倒過來。Scala包的用途是什麼scala.util.automata?

有沒有人在任何地方看過這個軟件包,併爲此目的?

我不知道這些類是否與解析器組合器有一些聯繫,或者它們是否是獨立使用的?

的類有像

class BaseBerrySethi 
class DetWordAutom[T <: AnyRef] 
trait Inclusion[A <: AnyRef] 
class NondetWordAutom[T <: AnyRef] 
class SubsetConstruction[T <: AnyRef] 
class WordBerrySethi extends BaseBerrySethi 

和不是非常有幫助的說明名稱。

看來他們將與Scala 2.9一起發貨。

+0

scala.util.automata現已棄用(自版本2.10.0開始) – leo 2013-04-17 08:02:08

回答

5

這是執行有限自動機轉換的正則表達式。 http://www2.in.tum.de/hp/file?fid=571 [PDF]創建NDFA的一種方法的示例可以在http://www.scala-lang.org/api/current/scala/util/regexp/WordExp.html找到,雖然沒有說明如何使用結果自動機。通過重複調用「next」來使用自動機,將以BitSet形式設置的狀態穿過,並每次用containsFinal檢查自動機是否已達到最終狀態。我沒有看到的是初始狀態應該表示爲什麼,但似乎初始狀態可能是空的BitSet。

+0

您是否知道它們的使用示例? – 2011-03-04 21:01:21

+0

通過示例和一些討論的鏈接更新了我的答案。 – 2011-03-04 21:42:23

+0

它實際上一直轉換爲DFA。 – 2011-03-04 22:13:04

1

這是我開始學習Scala時遇到的第一件事情之一。也發現了一些錯誤。這不是特別有用,甚至有一些關於廢棄它的討論。

它確實實現了一個相當靈活的算法來將正則表達式一直轉換到DFA,但DFA本身並不是特別靈活,iirc。

+0

什麼是不靈活的呢?看起來你可以傳入任意狀態集,甚至在你的機器描述中不可能發生。 – 2011-03-04 22:34:56

+0

@詹姆斯嗯,已經過了兩年了,但我隱隱地記得,無法擴展DFA,以便爲我所想要的應用程序所需的狀態和/或轉換添加內容。 – 2011-03-05 01:03:25