anchor.diff:  var NodeTemp:PFLRENode;
   begin                                                    
    if assigned(NodeLeft) and assigned(NodeRight) then begin
  -  if ((NodeLeft^.NodeType in [ntSTAR,ntPLUS,ntQUEST]) and (NodeRight^.NodeType=ntPLUS)) and AreNodesEqualSafe(NodeLeft^.Left,NodeRight^.Left) and (NodeLeft^.Value=0) and (NodeRight^.Value=0) then begin
  +  if (NodeLeft^.NodeType=ntZEROWIDTH) and (NodeRight^.NodeType=ntZEROWIDTH) then begin
  +   NodeLeft^.Value:=NodeLeft^.Value or NodeRight^.Value;
  +   result:=NodeLeft;
  +  end else if ((NodeLeft^.NodeType in [ntSTAR,ntPLUS,ntQUEST]) and (NodeRight^.NodeType=ntPLUS)) and AreNodesEqualSafe(NodeLeft^.Left,NodeRight^.Left) and (NodeLeft^.Value=0) and (NodeRight^.Value=0) then begin
      result:=NodeRight;
     end else if ((NodeLeft^.NodeType in [ntSTAR,ntPLUS]) and (NodeRight^.NodeType in [ntSTAR,ntQUEST])) and AreNodesEqualSafe(NodeLeft^.Left,NodeRight^.Left) and (NodeLeft^.Value=0) and (NodeRight^.Value=0) then begin
      result:=NodeLeft;
     end else if (NodeLeft^.NodeType=ntCAT) and assigned(NodeLeft^.Left) and assigned(NodeLeft^.Right) then begin
  -   if ((NodeLeft^.Right^.NodeType in [ntSTAR,ntPLUS,ntQUEST]) and (NodeRight^.NodeType=ntPLUS)) and AreNodesEqualSafe(NodeLeft^.Right^.Left,NodeRight^.Left) and (NodeLeft^.Right^.Value=0) and (NodeRight^.Value=0) then begin
  +   if (NodeLeft^.Right^.NodeType=ntZEROWIDTH) and (NodeRight^.NodeType=ntZEROWIDTH) then begin
  +    NodeLeft^.Right^.NodeType:=NodeLeft^.Right^.NodeType or NodeRight^.Value;
  +    result:=NodeLeft;
  +   end else if ((NodeLeft^.Right^.NodeType in [ntSTAR,ntPLUS,ntQUEST]) and (NodeRight^.NodeType=ntPLUS)) and AreNodesEqualSafe(NodeLeft^.Right^.Left,NodeRight^.Left) and (NodeLeft^.Right^.Value=0) and (NodeRight^.Value=0) then begin
       NodeLeft^.Right:=NodeRight;
       result:=NodeLeft;
      end else if ((NodeLeft^.Right^.NodeType in [ntSTAR,ntPLUS]) and (NodeRight^.NodeType in [ntSTAR,ntQUEST])) and AreNodesEqualSafe(NodeLeft^.Right^.Left,NodeRight^.Left) and (NodeLeft^.Right^.Value=0) and (NodeRight^.Value=0) then begin
  
positive.code:          while NodeIndex>0 do begin
            l:=PFLRENode(NodeList[NodeIndex]);
            r:=PFLRENode(NodeList[NodeIndex-1]);
            if ((l^.NodeType in [ntSTAR,ntPLUS,ntQUEST]) and (r^.NodeType=ntPLUS)) and AreNodesEqualSafe(l^.Left,r^.Left) then begin
             NodeList.Delete(NodeIndex);
             if NodeIndex>=NodeList.Count then begin
              NodeIndex:=NodeList.Count-1;
  
negative.code:            inc(StackPointer);
            end;
            opZEROWIDTH:begin
             Condition:=Condition or longword(Instruction^.Value);
             if WorkQueue.IndexOf(Instruction^.Next)>=0 then begin
              OnePassNFAReady:=false;
              break;
  