public bool CheckExpression(LispExpression expression)
        {
            int    rightParenthesesCounter = 0;
            int    leftparenPhesesCounter  = 0;
            string expressionBody;

            expressionBody = expression.Body;

            for (int i = 0; i < expressionBody.Length; i++)
            {
                if (expressionBody[i] == '(')
                {
                    rightParenthesesCounter++;
                }

                if (expressionBody[i] == ')')
                {
                    leftparenPhesesCounter++;
                }

                if (leftparenPhesesCounter > rightParenthesesCounter)
                {
                    return(false);
                }
            }

            if (leftparenPhesesCounter == rightParenthesesCounter)
            {
                return(true);
            }

            return(false);
        }
        public bool CheckExpressionTest(LispExpression expression)
        {
            switch (expression.Body)
            {
            case "((1+3))()(4+(3-5)))":
                return(true);

            case "((1+3))(())(4+(3-5))":
                return(true);

            case "((1+3))))(4+(3-5)))":
                return(false);
            }
            return(false);
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            var expression = new LispExpression();

            expression.Body = "((1+3))()(4+(3-5))";

            var    correctness = new LispCheckerService();
            string solution;

            if (correctness.CheckExpression(expression))
            {
                solution = "Correct Expression";
            }
            else
            {
                solution = "Wrong Expression";
            }

            var testExpressionTrue = new LispExpression();

            testExpressionTrue.Body = "((1+3))(())(4+(3-5))";
            var testExpressionWrong = new LispExpression();

            testExpressionWrong.Body = "((1+3))))(4+(3-5)))";

            if (correctness.AssertResults(correctness.CheckExpression(testExpressionTrue), correctness.CheckExpressionTest(testExpressionTrue)))
            {
                Console.WriteLine("Unit Test with ((1+3))(())(4+(3-5)) is successfull");
            }

            if (correctness.AssertResults(correctness.CheckExpression(testExpressionWrong), correctness.CheckExpressionTest(testExpressionWrong)))
            {
                Console.WriteLine("Unit Test with ((1+3))))(4+(3-5))) is successfull");
            }



            Console.Write("LispExpression: "); Console.Write(expression.Body); Console.Write(" is "); Console.Write(solution);
        }
Ejemplo n.º 4
0
 public LispVariableDefinition1(LispVariable var, LispExpression expr)
 {
     this.variable   = var;
     this.expression = expr;
 }
Ejemplo n.º 5
0
 public LispApplication(LispExpression applier, IEnumerable <LispExpression> applicants)
 {
     this.applier    = applier;
     this.applicants = applicants;
 }
Ejemplo n.º 6
0
 public LispSet(LispVariable var, LispExpression expr)
 {
     this.variable   = var;
     this.expression = expr;
 }
Ejemplo n.º 7
0
 public LispIf3(LispExpression expr1, LispExpression expr2, LispExpression expr3)
 {
     this.expression1 = expr1;
     this.expression2 = expr2;
     this.expression3 = expr3;
 }
Ejemplo n.º 8
0
 public LispIf2(LispExpression expr1, LispExpression expr2)
 {
     this.expression1 = expr1;
     this.expression2 = expr2;
 }