2011-03-04 60 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