anchor.diff:  var EOI = new EndOfInput();
   
   abstract class Language {
  +  bool get isMatch => false;
  +  bool get canAccept => false;
  +  bool get isReject => false;
     Language derive(dynamic ch);
  +  Language derveEnd(dynamic ch) => empty;
   }
   
   
   /// A [Language] that rejects everything.
   class Empty extends Language {
  +  bool get isReject => true;
     Language derive(dynamic ch) => empty;
     toString() => '{}';
   }
  
positive.code: 
  /// A [Language] that matches the defined [Language].
  class Match extends Language {
    Language derive(dynamic ch) => empty;
    toString() => '\'\'';
  }
  
negative.code: class And extends Language {
    final Language left;
    final Language right;
  
    bool get isMatch => left.isMatch && right.isMatch;
    bool get canAccept => left.canAccept && right.canAccept;
    bool get isReject => left.isReject || right.isReject;
  
    And._internal(this.left, this.right);
  
    factory And(left, right){
  