RomanCalculatorLibrary.ArithmeticExpressionParser.ParsingCurrentCharacterElement C# (CSharp) Method

ParsingCurrentCharacterElement() private method

private ParsingCurrentCharacterElement ( CharacterElement item, Stack stack, bool &isPreviousCharIsLetter ) : string
item CharacterElement
stack Stack
isPreviousCharIsLetter bool
return string
        private string ParsingCurrentCharacterElement(CharacterElement item,
            Stack<CharacterElement> stack, ref bool isPreviousCharIsLetter)
        {
            var resultingReversePolishSignature = String.Empty;
            var termnalSign = String.Empty;

            if (item.TypeOfSign == TypeOfSign.Letter)
            {
                if (!isPreviousCharIsLetter)
                {
                    termnalSign = "$";
                    isPreviousCharIsLetter = true;
                }

                resultingReversePolishSignature += termnalSign + item.CharValue;
            }
            else
            {
                if (isPreviousCharIsLetter)
                {
                    resultingReversePolishSignature += "$";
                }

                isPreviousCharIsLetter = false;

                if (stack.Count == 0)
                {
                    stack.Push(item);
                }
                else if (item.CharValue == ")")
                {
                    while (true)
                    {
                        if (stack.Peek().CharValue == "(")
                        {
                            stack.Pop();
                            break;
                        }
                        if (PeekOfStackIsBracket(stack))
                        {
                            resultingReversePolishSignature += stack.Peek().CharValue;
                        }

                        stack.Pop();
                    }
                }
                else if (item.TypeOfSign == TypeOfSign.OpeningBracket || (item.TypeOfSign > stack.Peek().TypeOfSign))
                {
                    stack.Push(item);
                }
                else if (item.TypeOfSign <= stack.Peek().TypeOfSign)
                {
                    while (item.TypeOfSign <= stack.Peek().TypeOfSign)
                    {
                        resultingReversePolishSignature += stack.Pop().CharValue;
                    }
                    stack.Push(item);
                }
            }
            return resultingReversePolishSignature;
        }