equal
  deleted
  inserted
  replaced
  
    
    
    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   |