anchor.diff:         NamedGroupStringList:TStringList;
          NamedGroupStringIntegerPairHashMap:TFLREStringIntegerPairHashMap;
   
  +       function NewNode(const NodeType:longint;const Left,Right,Extra:PFLRENode;const Value:longint):PFLRENode;
          procedure FreeNode(var Node:PFLRENode);
  +       function AreNodesEqual(NodeA,NodeB:PFLRENode):boolean;
  +       function AreNodesEqualSafe(NodeA,NodeB:PFLRENode):boolean;
  +       function Concat(NodeLeft,NodeRight:PFLRENode):PFLRENode;
  +       function NewAlt(NodeLeft,NodeRight:PFLRENode):PFLRENode;
  +       function NewPlus(Node:PFLRENode;Kind:longint):PFLRENode;
  +       function NewStar(Node:PFLRENode;Kind:longint):PFLRENode;
  +       function NewQuest(Node:PFLRENode;Kind:longint):PFLRENode;
  +
  +       function IsStarNullable(Node:PFLRENode):boolean;
  +       function StarDenull(Node:PFLRENode):PFLRENode;
  +       function OptimizeNode(NodeEx:PPFLRENode):boolean;
          procedure Parse;
          procedure Compile;
          procedure CompilePrefix;
  
positive.code:        end;
         if (SourcePosition<=SourceLength) and (Source[SourcePosition]='}') then begin
          inc(SourcePosition);
          result:=NewNode(ntEXACT,result,nil);
          if (SourcePosition<=SourceLength) and (Source[SourcePosition]='?') then begin
           inc(SourcePosition);
           result^.Value:=1;
  
negative.code: 
       TFLREFlags=set of TFLREFlag;
  
       PPFLRENode=^PFLRENode;
       PFLRENode=^TFLRENode;
       TFLRENode=record
        NodeType:longint;
  