2011-03-04 11 views
6

Vi el paquete scala.util.automata hace bastante tiempo y me he caído recientemente al leer un poco de ScalaDoc.¿Cuál es el propósito del paquete Scala scala.util.automata?

¿Alguien ha visto este paquete en uso en cualquier lugar todavía y para qué propósito?

Me pregunto si esas clases tienen alguna conexión con los combinadores de analizador o si se utilizan de forma independiente?

Las clases tienen nombres como

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

y una descripción no es muy útil.

Parece que se enviarán con Scala 2.9.

+0

scala.util.automata ahora está en desuso (desde la versión 2.10.0) – leo

Respuesta

5

Es la implementación de una expresión regular a una conversión autómata finito. http://www2.in.tum.de/hp/file?fid=571 [PDF] Puede encontrar un ejemplo de una forma de crear un NDFA en http://www.scala-lang.org/api/current/scala/util/regexp/WordExp.html, aunque eso no muestra cómo usar el autómata resultante. Parece que el autómata se usaría llamando al "próximo" repetidamente, enhebrando el estado configurado en forma de un BitSet y comprobando cada vez con containsFinal para ver si el autómata había alcanzado un estado final. Lo que no veo es cómo deberían representarse los estados iniciales, pero parece probable que el estado inicial sea un BitSet vacío.

+0

¿Conoces algún ejemplo de su uso? –

+0

Actualicé mi respuesta con un enlace de un ejemplo y algo de discusión. –

+0

Convierte todo el camino a DFA, en realidad. –

1

Fue una de las primeras cosas que encontré cuando comencé a aprender Scala. Encontré algunos errores en él, también. No es particularmente útil, e incluso hubo alguna discusión sobre la desaprobación.

Implementa un algoritmo bastante flexible para convertir expresiones regulares hasta DFA, pero el propio DFA no es particularmente flexible, iirc.

+0

¿Qué es inflexible al respecto? Parece que puede pasar conjuntos de estados arbitrarios, incluso aquellos que posiblemente no puedan ocurrir dada la descripción de su máquina. –

+0

@James Bueno, han pasado dos años, pero recuerdo débilmente que no puedo extender el DFA como para agregar cosas a estados y/o transiciones, que eran requeridas por la aplicación que tenía en mente. –

Cuestiones relacionadas