progs/matcher/re2.sc
changeset 999 e719e420cbc7
parent 929 9541e073f2ed
equal deleted inserted replaced
998:69eddde11a65 999:e719e420cbc7
    10 //
    10 //
    11 // or 
    11 // or 
    12 //
    12 //
    13 //   amm re2.sc all
    13 //   amm re2.sc all
    14 
    14 
    15 
    15 // regular expressions (as enum in Scala 3)
    16 abstract class Rexp 
    16 enum Rexp {
    17 case object ZERO extends Rexp
    17   case ZERO                     // matches nothing
    18 case object ONE extends Rexp
    18   case ONE                      // matches an empty string
    19 case class CHAR(c: Char) extends Rexp
    19   case CHAR(c: Char)            // matches a character c
    20 case class ALT(r1: Rexp, r2: Rexp) extends Rexp 
    20   case ALT(r1: Rexp, r2: Rexp)  // alternative
    21 case class SEQ(r1: Rexp, r2: Rexp) extends Rexp 
    21   case SEQ(r1: Rexp, r2: Rexp)  // sequence
    22 case class STAR(r: Rexp) extends Rexp 
    22   case STAR(r: Rexp)            // star
    23 case class NTIMES(r: Rexp, n: Int) extends Rexp   //explicit constructor for n-times
    23   case NTIMES(r: Rexp, n: Int)  // explicit n-times
       
    24 }
       
    25 import Rexp._
    24 
    26 
    25 
    27 
    26 def nullable (r: Rexp) : Boolean = r match {
    28 def nullable (r: Rexp) : Boolean = r match {
    27   case ZERO => false
    29   case ZERO => false
    28   case ONE => true
    30   case ONE => true
   143 size(ders("aaaaaa".toList, EVIL2)) // 456
   145 size(ders("aaaaaa".toList, EVIL2)) // 456
   144 
   146 
   145 size(ders(("a" * 20).toList, EVIL2)) // 7340068
   147 size(ders(("a" * 20).toList, EVIL2)) // 7340068
   146 
   148 
   147 
   149 
   148 
       
   149 @arg(doc = "All tests.")
       
   150 @main
   150 @main
   151 def all() = { test1(); test2() } 
   151 def all() = { test1(); test2() } 
   152 
   152