public void DoesParserSplitonanOperand()
 {
     var input = "1*2";
     var p = new Parser(input);
     var terms = p.SplitOnOperand();
     CollectionAssert.AreEqual(new string[] { "1", "2" }, terms);
 }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            Parser ob = new Parser();

             for (; ; )
             {
                 string str = "";

                 Console.Write("Введите выражение: ");
                 str = Console.ReadLine();
                 try
                 {
                     Console.WriteLine("Результат: " + ob.eval_exp(str) + "\n");
                 }
                 catch (ArgumentNullException)
                 {
                     Console.WriteLine("Ошибка: отсутствует выражение для вычисления!\n");
                 }
                 catch (ArgumentException)
                 {
                     Console.WriteLine("Ошибка синтаксиса!\n");
                 }
                 catch
                 {
                     Console.WriteLine("Ошибка синтаксиса!\n");
                 }
             }
        }
Exemplo n.º 3
0
        public Calculator()
        {
            _scanner = new Scanner();
            _scanner.AddOperators("+", "-", "*", "/", "%", "(", ")", "=", ",");

            _parser = new Parser(_scanner);
            _parser.AddFunction(GenericFunctions.TrigFunction("sin", Math.Sin));
            _parser.AddFunction(GenericFunctions.TrigFunction("cos", Math.Cos));
            _parser.AddFunction(GenericFunctions.TrigFunction("tan", Math.Tan));

            _parser.AddFunction(GenericFunctions.StandardFunction("sqrt", Math.Sqrt));
            _parser.AddFunction(GenericFunctions.StandardFunction("abs", Math.Abs));
            _parser.AddFunction(GenericFunctions.StandardFunction("log", Math.Log10));
            _parser.AddFunction(GenericFunctions.StandardFunction("ln", (Func<double, double>)Math.Log));
            _parser.AddFunction(GenericFunctions.StandardFunction("exp", Math.Exp));

            _parser.AddFunction(GenericFunctions.InverseTrigFunction("asin", Math.Asin));
            _parser.AddFunction(GenericFunctions.InverseTrigFunction("acos", Math.Acos));
            _parser.AddFunction(GenericFunctions.InverseTrigFunction("atan", Math.Atan));

            _parser.AddFunction(GenericFunctions.StandardFunction("pow", Math.Pow));
            _parser.AddFunction(GenericFunctions.StandardFunction("max", Math.Max));
            _parser.AddFunction(GenericFunctions.StandardFunction("min", Math.Min));

            _parser.AddVariable(new Variable("pi", Math.PI) { IsConstant = true });
            _parser.AddVariable(new Variable("e", Math.E) { IsConstant = true });
            _parser.AddVariable(new Variable("ans"));
        }
 public void AddsKeyValuePairs()
 {
     var input = "x=2";
     var p = new Parser(input);
     var arr = p.SplitOnOperand();
     p.AddKeyValuePair(arr);
     Assert.AreEqual(Stack.Constants[arr[0]], 2);
 }
 public void GetsVariableValueFromDictionary()
 {
     var input1 = "a=10";
     var input2 = "a*8";
     var p = new Parser(input1);
     var arr = p.SplitOnOperand();
     p.AddKeyValuePair(arr);
     var p2 = new Parser(input2);
     var arr2 = p2.SplitOnOperand();
     CollectionAssert.AreEqual(new int[] { 10, 8 }, Stack.ReplaceConstsandStringsWithIntValues(arr2));
 }
 public void CantChangeValueofConstant()
 {
     var input = "b=2";
     var p = new Parser(input);
     var arr = p.SplitOnOperand();
     p.AddKeyValuePair(arr);
     var input2 = "b=3";
     var p2 = new Parser(input2);
     var arr2 = p.SplitOnOperand();
     p.AddKeyValuePair(arr);
 }
Exemplo n.º 7
0
        public void Test_Unar_Op()
        {
            Parser ob = new Parser();

            string str_1 = "-5";
            string str_2 = "78";
            double result_1, result_2;

            result_1 = ob.eval_exp(str_1);
            result_2 = ob.eval_exp(str_2);

            Assert.That(result_1, Is.EqualTo(-5));
            Assert.That(result_2, Is.EqualTo(78));
        }
Exemplo n.º 8
0
        public void Test_Multiplication_Division()
        {
            Parser ob = new Parser();

            string str_1 = "12*5";
            string str_2 = "-3*15";
            double result_1, result_2;

            result_1 = ob.eval_exp(str_1);
            result_2 = ob.eval_exp(str_2);

            Assert.That(result_1, Is.EqualTo(60));
            Assert.That(result_2, Is.EqualTo(-45));
        }
Exemplo n.º 9
0
        public void Test_Brackets()
        {
            Parser ob = new Parser();

            string str_1 = "(3+4)*5";
            string str_2 = "(-2+7)*(18-15)";
            double result_1, result_2;

            result_1 = ob.eval_exp(str_1);
            result_2 = ob.eval_exp(str_2);

            Assert.That(result_1, Is.EqualTo(35));
            Assert.That(result_2, Is.EqualTo(15));
        }
Exemplo n.º 10
0
        public void Test_Addition_Subtraction()
        {
            Parser ob = new Parser();

            string str_1 = "12+8";
            string str_2 = "-8+3";
            double result_1, result_2;

            result_1 = ob.eval_exp(str_1);
            result_2 = ob.eval_exp(str_2);

            Assert.That(result_1, Is.EqualTo(20));
            Assert.That(result_2, Is.EqualTo(-5));
        }
 public void ThrowsExceptionWhenOnly1Value()
 {
     var input = "33533/";
     var p = new Parser(input);
     var terms = p.SplitOnOperand();
 }
 public void ThrowsExceptionWhenGivenTwoOperands()
 {
     var input = "4/*4";
     var p = new Parser(input);
     var terms = p.SplitOnOperand();
 }
Exemplo n.º 13
0
 public void Initialize()
 {
     parser = new Parser();
 }
 public void turnStringArrayToIntArrayWithoutConstants()
 {
     var input = "3*4";
     var p = new Parser(input);
     var arr = p.SplitOnOperand();
     CollectionAssert.AreEqual(Stack.ReplaceConstsandStringsWithIntValues(arr), new int[] { 3, 4 });
 }
 public void variablesCantComeLastInAnExpression()
 {
     var input = "22=c";
     var p = new Parser(input);
     var arr = p.SplitOnOperand();
     p.AddKeyValuePair(arr);
 }
 public void variablesCanOnlyBeOneCharacter()
 {
     var input = "cc=2";
     var p = new Parser(input);
     var arr = p.SplitOnOperand();
     p.AddKeyValuePair(arr);
 }
Exemplo n.º 17
0
        void ParseInput(string input)
        {
            if (inputIsntGoingToBeCalculated(input))
            {
                return;
            }
            var p = new Parser(input);
            try
            {
                p.ParseInput();
                var results = p.results;
                char operand = p.operand;
                response = CalculateResponse(results, operand);

                Stack.lastResponse = response;
                Stack.lastQuestion = staticInput;
            }
            catch (ArgumentException e)
            {
                response = e.Message;
                return;
            }
        }