Esempio n. 1
0
 public bool TryParse(string formula, out FormulaNode node)
 {
     if (new UnaryMinusParser(child).TryParse(formula, out node))
     {
         return(true);
     }
     node = null;
     return(false);
 }
Esempio n. 2
0
 public bool TryParse(string formula, out FormulaNode node)
 {
     if (formula == "+")
     {
         node = new BinaryAdd(leftNode, rightNode);
         return(true);
     }
     else
     {
         node = null;
         return(false);
     }
 }
Esempio n. 3
0
 public bool TryParse(string formula, out FormulaNode node)
 {
     if (formula == "~")
     {
         node = new UnaryMinus(number);
         return(true);
     }
     else
     {
         node = null;
         return(false);
     }
 }
Esempio n. 4
0
        public bool TryParse(string formula, out FormulaNode node)
        {
            node = null;
            string[]      splitedFormula = formula.Split(' ');
            List <String> formulaParts   = splitedFormula.ToList <string>();

            while (formulaParts.Count != 0)
            {
                bool validFormat = false;
                if (new ConstantParser().TryParse(formulaParts[formulaParts.Count - 1], out node))
                {
                    validFormat = true;
                    stack.Push(node);
                    formulaParts.RemoveAt(formulaParts.Count - 1);
                    continue;
                }
                if (new UnaryMasterParser(stack.Peek()).TryParse(formulaParts[formulaParts.Count - 1], out node))
                {
                    validFormat = true;
                    stack.Pop();
                    stack.Push(node);
                    formulaParts.RemoveAt(formulaParts.Count - 1);
                    continue;
                }
                if (new BinaryMasterParser(stack.Peek(), stack.ElementAt(1)).TryParse(formulaParts[formulaParts.Count - 1], out node))
                {
                    validFormat = true;
                    stack.Pop();
                    stack.Pop();
                    stack.Push(node);
                    formulaParts.RemoveAt(formulaParts.Count - 1);
                    continue;
                }

                if (!validFormat)
                {
                    return(false);
                }
            }

            if (stack.Count == 1)
            {
                node = stack.Pop();
                return(true);
            }
            else
            {
                return(false);
            }
        }
Esempio n. 5
0
        public bool TryParse(string formula, out FormulaNode node)
        {
            int value;

            if (int.TryParse(formula, out value))
            {
                node = new ConstantNode(value);
                return(true);
            }
            else
            {
                node = null;
                return(false);
            }
        }
Esempio n. 6
0
        public bool TryParse(string formula, out FormulaNode node)
        {
            if (new BinaryAddParser(leftNode, rightNode).TryParse(formula, out node))
            {
                return(true);
            }
            if (new BinarySubParser(leftNode, rightNode).TryParse(formula, out node))
            {
                return(true);
            }
            if (new BinaryMulParser(leftNode, rightNode).TryParse(formula, out node))
            {
                return(true);
            }
            if (new BinaryDivParser(leftNode, rightNode).TryParse(formula, out node))
            {
                return(true);
            }

            node = null;
            return(false);
        }
Esempio n. 7
0
        public void ProcessCommand(string formula)
        {
            try
            {
                switch (formula)
                {
                case null:
                {
                    end = true;
                    break;
                }

                case "end":
                {
                    end = true;
                    break;
                }

                case "p":
                {
                    if (formulaNode != null)
                    {
                        IAlgorithm algorithm = new InfixBracketsMaker();
                        formulaNode.Accept(algorithm);
                        algorithm.CallResultWriter(writer);
                    }
                    else
                    {
                        writer.WriteError(ExpressionMissingError.Instance);
                    }
                    break;
                }

                case "P":
                {
                    if (formulaNode != null)
                    {
                        IAlgorithm algorithm = new InfixMinBracketsMaker();
                        formulaNode.Accept(algorithm);
                        algorithm.CallResultWriter(writer);
                    }
                    else
                    {
                        writer.WriteError(ExpressionMissingError.Instance);
                    }
                    break;
                }

                case "i":
                {
                    if (formulaNode != null)
                    {
                        if (intAlgo == null)
                        {
                            intAlgo = new IntegerCalculator();
                            formulaNode.Accept(intAlgo);
                        }
                        intAlgo.CallResultWriter(writer);
                    }
                    else
                    {
                        writer.WriteError(ExpressionMissingError.Instance);
                    }
                    break;
                }

                case "":
                {
                    break;
                }

                case "d":
                {
                    if (formulaNode != null)
                    {
                        if (doubleAlgo == null)
                        {
                            doubleAlgo = new DoubleCalculator();
                        }
                        formulaNode.Accept(doubleAlgo);
                        doubleAlgo.CallResultWriter(writer);
                    }
                    else
                    {
                        writer.WriteError(ExpressionMissingError.Instance);
                    }
                    break;
                }

                default:
                {
                    if (formula.StartsWith("="))
                    {
                        formulaNode = null;
                        doubleAlgo  = null;
                        intAlgo     = null;
                        if (!new PreorderParser().TryParse(formula.Remove(0, 2), out formulaNode))
                        {
                            writer.WriteError(FormatError.Instance);
                        }
                    }
                    else
                    {
                        writer.WriteError(FormatError.Instance);
                    }
                    break;
                }
                }
            }
            catch (DivideByZeroException)
            {
                writer.WriteError(DivisionError.Instance);
            }
            catch (OverflowException)
            {
                writer.WriteError(OverflowError.Instance);
            }
            catch (FormatException)
            {
                writer.WriteError(FormatError.Instance);
            }
            catch (InvalidOperationException)
            {
                writer.WriteError(FormatError.Instance);
            }
            catch (ArgumentOutOfRangeException)
            {
                writer.WriteError(FormatError.Instance);
            }
        }
Esempio n. 8
0
 public UnaryMinus(FormulaNode child) : base(child)
 {
 }
Esempio n. 9
0
 public BinaryAddParser(FormulaNode leftNode, FormulaNode rightNode)
 {
     this.leftNode  = leftNode;
     this.rightNode = rightNode;
 }
Esempio n. 10
0
 public UnaryMinusParser(FormulaNode node)
 {
     number = node;
 }
Esempio n. 11
0
 public UnaryOperationNode(FormulaNode child)
 {
     this.child = child;
 }
Esempio n. 12
0
 public BinaryMul(FormulaNode leftChild, FormulaNode rightChild) : base(leftChild, rightChild)
 {
 }
Esempio n. 13
0
 public UnaryMasterParser(FormulaNode child)
 {
     this.child = child;
 }