Exemplo n.º 1
0
        public Token EvaluateExpression()
        {
            int index = 0;

            while (expressionParts.Count > 1)
            {
                PartExpression leftPart  = expressionParts[index];
                PartExpression rightPart = expressionParts[index + 1];

                //wrong order of operations
                if ((leftPart.Op == '+' || leftPart.Op == '-') && (rightPart.Op == '*' || rightPart.Op == '/'))
                {
                    index++;
                    continue;
                }
                //correct order
                else
                {
                    PartExpression combinedPart = CombineParts(leftPart, rightPart);
                    expressionParts.RemoveAt(index); //removes leftPart
                    expressionParts.RemoveAt(index); //removes rightPart
                    expressionParts.Insert(index, combinedPart);
                    index = 0;                       //reset to start of expression after each combination
                }
            }
            //after while loop there will only be one part left

            PartExpression lastPart = expressionParts[0];

            double resultNum = lastPart.Value;

            Token resultToken = new Token("num", resultNum);

            return(resultToken);
        }
Exemplo n.º 2
0
        //combine two part expressions by preforming the mathematical operation between them
        PartExpression CombineParts(PartExpression leftPart, PartExpression rightPart)
        {
            double combinedValue;

            switch (leftPart.Op)
            {
            case '+':
                combinedValue = leftPart.Value + rightPart.Value;
                break;

            case '-':
                combinedValue = leftPart.Value - rightPart.Value;
                break;

            case '*':
                combinedValue = leftPart.Value * rightPart.Value;
                break;

            case '/':
                combinedValue = leftPart.Value / rightPart.Value;
                break;

            default:
                throw new Exception("Unexpected Operator - Syntax error.");
            }
            Token combinedValueToken = new Token("num", combinedValue);
            //move the operator from the right part to the newly combined part
            Token rightOp = new Token("op", rightPart.Op);

            return(new PartExpression(combinedValueToken, rightOp));
        }
Exemplo n.º 3
0
        void BuildExpressionParts(List <Token> tokens)
        {
            for (int i = 0; i < tokens.Count; i++)
            {
                Token next;
                if (i + 1 >= tokens.Count) //last token in list
                {
                    next = null;
                }
                else
                {
                    next = tokens[i + 1];
                }

                if (next != null)
                {
                    PartExpression part = new PartExpression(tokens[i], next);
                    expressionParts.Add(part);
                    tokens.RemoveAt(i + 1); //removes operator token
                }
                else
                {
                    PartExpression part = new PartExpression(tokens[i]);
                    expressionParts.Add(part);
                }
            }
        }