anchor.diff:    public
       class function ExprToReverseNotation(Expr: TList<TSyntaxNode>): TList<TSyntaxNode>; static;
       class procedure NodeListToTree(Expr: TList<TSyntaxNode>; Root: TSyntaxNode); static;
  -    class function PrepareExpr(ExprNodes: TList<TSyntaxNode>): TObjectList<TSyntaxNode>; static;
  +    class function PrepareExpr(ExprNodes: TList<TSyntaxNode>): TList<TSyntaxNode>; static;
       class procedure RawNodeListToTree(RawParentNode: TSyntaxNode; RawNodeList: TList<TSyntaxNode>; NewRoot: TSyntaxNode); static;
     end;
   
  
positive.code:         begin
            while not IsRoundOpen(Stack.Peek.Typ) do
              Result.Add(Stack.Pop);
            Stack.Pop;
            if (Stack.Count > 0) and TOperators.IsOpName(Stack.Peek.Typ) then
              Result.Add(Stack.Pop);
          end else
  
negative.code: end;
  
  class procedure TExpressionTools.NodeListToTree(Expr: TList<TSyntaxNode>; Root: TSyntaxNode);
  var
    Stack: TStack<TSyntaxNode>;
    Node, SecondNode: TSyntaxNode;
  begin
    Stack := TStack<TSyntaxNode>.Create;
    try
      for Node in Expr do
      begin
        if TOperators.IsOpName(Node.Typ) then
          case TOperators.Items[Node.Typ].Kind of
            okUnary: Node.AddChild(Stack.Pop);
            okBinary:
              begin
                SecondNode := Stack.Pop;
                Node.AddChild(Stack.Pop);
                Node.AddChild(SecondNode);
              end;
          end;
        Stack.Push(Node);
      end;
  
      Root.AddChild(Stack.Pop);
  
      Assert(Stack.Count = 0);
    finally
      Stack.Free;
    end;
  end;
  
  class function TExpressionTools.PrepareExpr(ExprNodes: TList<TSyntaxNode>): TList<TSyntaxNode>;
  var
    Node, PrevNode: TSyntaxNode;
  begin
    Result := TList<TSyntaxNode>.Create;
    try
      PrevNode := nil;
      for Node in ExprNodes do
  