public void getTermFromString(string input, ref TermStack TStack, ref int startPositionPointer)
            {
                //Console.Write("start term {0}, ", input[startPositionPointer]);
                TermTypes    tt;
                TermAbsClass term      = null;
                bool         isOK_Flag = false;
                int          tmp       = startPositionPointer;

                //string txt=TakePieceFromText(input,startPosition,input.Length-startPosition-1);

                if (startPositionPointer < input.Length && OperatorSymbols.Contains(input[startPositionPointer]) && !isOK_Flag)                 //if is operator
                {
                    //Console.WriteLine("operator {0}", input[startPositionPointer]);

                    tt = TermTypes.OPR;
                    startPositionPointer++;
                    if (startPositionPointer < input.Length && OperatorSymbols.Contains(input[startPositionPointer]))
                    {
                        startPositionPointer++;
                    }
                    string txt = TakePieceFromText(input, tmp, startPositionPointer - tmp);
                    term = OPRTerm.GetOperatorTerm(txt);

                    //Console.Write("{0} is done from string ({1}),",OPRTerm.GetOperatorTerm(txt).GetOperatorType, txt);

                    isOK_Flag = true;
                }

                if (startPositionPointer < input.Length && char.IsDigit(input[startPositionPointer]) && !isOK_Flag)                     //if a number
                {
                    int  len     = 0;
                    bool isFloat = false;
                    while (startPositionPointer + len < input.Length && char.IsDigit(input[startPositionPointer + len]))
                    {
                        len++;
                    }
                    if (startPositionPointer + len < input.Length && len > 0 && input[startPositionPointer + len] == '.')
                    {
                        isFloat = true; len++;
                        while (startPositionPointer + len < input.Length && char.IsDigit(input[startPositionPointer + len]))
                        {
                            len++;
                        }
                    }


                    if (isFloat)
                    {
                        NumberFormatInfo provider = new NumberFormatInfo();
                        provider.CurrencyDecimalSeparator = ".";
                        double x = Convert.ToDouble(TakePieceFromText(input, startPositionPointer, len), provider);
                        term = new FLTTerm(x);

                        //Console.Write("FLOAT {0}, ", x);
                    }
                    else
                    {
                        long x = Convert.ToInt64(TakePieceFromText(input, startPositionPointer, len));
                        term = new INTTerm(x);

                        //Console.Write("INTEGER {0}, ", x);
                    }
                    isOK_Flag             = true;
                    startPositionPointer += len;
                }

                if (startPositionPointer < input.Length && char.IsLetter(input[startPositionPointer]) && !isOK_Flag)                    //FNC and VAR starts with letter
                {
                    int len = 1;
                    while (startPositionPointer + len < input.Length && char.IsLetter(input[startPositionPointer + len]))
                    {
                        len++;
                    }
                    if (startPositionPointer + len < input.Length && input[startPositionPointer + len] == '(') //if name is interupted with bracket - it's func
                    {
                        term = new FNCTerm(FNCType.ERROR);                                                     //todo catch function
                    }
                    else
                    {
                        uint[] debugPush = new uint[1];
                        //string txt=TakePieceFromText(input,startPosition,input.Length-startPosition-1);
                        term = new VARTerm(VARType.ERR, debugPush);                             //todo catch variable
                    }
                    startPositionPointer += len;
                    isOK_Flag             = true;
                }

                if (startPositionPointer < input.Length && Markup.Contains(input[startPositionPointer]) && !isOK_Flag)
                {
                    //Console.WriteLine("Markup!!");
                    term      = new MRKTerm(Convert.ToString(input[startPositionPointer++]));
                    isOK_Flag = true;
                }

                if (!isOK_Flag)
                {
                    throw new ParsingException(input[startPositionPointer]);
                }
                TStack.Push(term);
            }