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); }