anchor.diff:         function NewPlus(Node:PFLRENode;Kind:longint):PFLRENode;
          function NewStar(Node:PFLRENode;Kind:longint):PFLRENode;
          function NewQuest(Node:PFLRENode;Kind:longint):PFLRENode;
  +       function NewExact(Node:PFLRENode;MinCount,MaxCount,Kind:longint):PFLRENode;
   
          function OptimizeNode(NodeEx:PPFLRENode):boolean;
   
  
positive.code:       continue;
       end;
       ntCHAR:begin
        SingleChar:=#0;
        Count:=0;
        for CurrentChar:=#0 to #255 do begin
         if CurrentChar in Node^.CharClass then begin
          if Count=0 then begin
           SingleChar:=CurrentChar;
           inc(Count);
          end else begin
           inc(Count);
           break;
          end;
         end;
        end;
        if Count=1 then begin
         i0:=NewInstruction(opSINGLECHAR);
         Instructions[i0].Value:=byte(ansichar(SingleChar));
        end else begin
         i0:=NewInstruction(opCHAR);
         Index:=-1;
         for Counter:=0 to CountCharClasses-1 do begin
          if CharClasses[Counter]^=Node^.CharClass then begin
           Index:=Counter;
           break;
          end;
         end;
         if Index<0 then begin
          Index:=CountCharClasses;
          inc(CountCharClasses);
          if CountCharClasses>length(CharClasses) then begin
           SetLength(CharClasses,CountCharClasses*2);
          end;
          GetMem(CharClasses[Index],SizeOf(TFLRECharClass));
          CharClasses[Index]^:=Node^.CharClass;
         end;
         Instructions[i0].Value:=ptruint(pointer(CharClasses[Index]));
        end;
        Instructions[i0].Next:=pointer(ptrint(CountInstructions));
       end;
       ntANY:begin
        i0:=NewInstruction(opANY);
  
negative.code:        end;
         if (SourcePosition<=SourceLength) and (Source[SourcePosition]='}') then begin
          inc(SourcePosition);
          if (SourcePosition<=SourceLength) and (Source[SourcePosition]='?') then begin
           inc(SourcePosition);
           if rfLONGEST in Flags then begin
            raise EFLRE.Create('Syntax error');
           end;
           Kind:=qkLAZY;
          end else begin
           if rfLONGEST in Flags then begin
            Kind:=qkLAZY;
           end else begin
            Kind:=qkGREEDY;
           end;
          end;
          result:=NewExact(result,MinCount,MaxCount,Kind);
         end else begin
          raise EFLRE.Create('Syntax error');
         end;
  