Пример #1
0
 private void ParseUnary()
 {
     // We only have '+' and '-' as unary operators so we don't need to check precedence and pop from stack
     if (OperatorHelper.HasUnary(tokenizer.Token))
     {
         operators.Push(tokenizer.Token);
     }
 }
Пример #2
0
        private void ParseNumber()
        {
            output.Enqueue(new TokenNumber(tokenizer.Number));

            // Need to enqueue unary operators after a number
            while (operators.Count != 0 && OperatorHelper.HasUnary(operators.Peek()))
            {
                EnqueueOperator();
            }
        }
Пример #3
0
        void OnCalculate(object sender, EventArgs e) //This method is called when we have both first number and second number and we are going to evaluate those number
        {
            if (currentState == 2)
            {
                var result = OperatorHelper.Calculate(firstNumber, secondNumber, myoperator);

                this.resultText.Text = result.ToString();
                firstNumber          = result;
                currentState         = -1;
            }
        }
Пример #4
0
        private void ParseBinary()
        {
            if (OperatorHelper.HasBinary(tokenizer.Token))
            {
                int currentPrecedence = precedence[tokenizer.Token];

                while (operators.Count != 0 && currentPrecedence <= precedence[operators.Peek()])
                {
                    EnqueueOperator();
                }

                operators.Push(tokenizer.Token);
            }
        }
Пример #5
0
        private void ParseCloseParenthesis()
        {
            // If there is no '(' on the stack we get an exception
            try {
                while (operators.Peek() != TokenType.OpenParenthesis)
                {
                    EnqueueOperator();
                }
            }
            catch (InvalidOperationException) {
                throw new SyntaxException("Missing open parenthesis");
            }

            operators.Pop(); // Pop '('

            // Need to enqueue unary operators after a pair of parenthesis
            while (operators.Count != 0 && OperatorHelper.HasUnary(operators.Peek()))
            {
                EnqueueOperator();
            }
        }
Пример #6
0
 private void EnqueueOperator()
 => output.Enqueue(OperatorHelper.GetOperator(operators.Pop()));