コード例 #1
0
ファイル: Calculator.cs プロジェクト: schurik09/icalculator
            public void AppendOperator( TokenOperator op )
            {
                switch(op.OpCode)
                {
                case '(':
                    m_stack_of_ops.Push( op );
                    break;

                case ')':
                    {
                        var sop = m_stack_of_ops.Pop();
                        while( sop.OpCode != '(' )
                        {
                            m_postfix_expression.Add( sop );
                            sop = m_stack_of_ops.Pop();
                        }
                    }
                    break;

                default:
                    if( m_stack_of_ops.Count > 0 )
                    {
                        var sop = m_stack_of_ops.Peek();
                        while( op.Priority <  sop.Priority && op.Associac == TokenOperator.Associativity.RightAssociative ||
                               op.Priority <= sop.Priority )
                        {
                            m_postfix_expression.Add( m_stack_of_ops.Pop() );
                            if( m_stack_of_ops.Count > 0 )
                                sop = m_stack_of_ops.Peek();
                            else
                                break;
                        }
                    }
                    m_stack_of_ops.Push( op );
                    break;
                }
            }
コード例 #2
0
        private void AppendOperator()
        {
            string text = _textProvider.GetText(_tokens.CurrentToken);

            if (_tokens.Position == 0 || TokenOperator.IsUnaryOperator(_tokens, _textProvider, TokenOperator.GetOperatorType(text), -1))
            {
                AppendToken(leadingSpace: false, trailingSpace: false);
            }
            else if (IsOperatorWithoutSpaces(text))
            {
                AppendToken(leadingSpace: false, trailingSpace: false);
            }
            else
            {
                if (_tb.IsAtNewLine && _tb.Length > 0)
                {
                    AppendTextBeforeToken(preserveUserIndent: true);
                    AppendToken(leadingSpace: false, trailingSpace: true);
                }
                else
                {
                    AppendToken(leadingSpace: true, trailingSpace: true);
                }
            }
        }