Exemplo n.º 1
0
        public static void Run()
        {
            IBlockParser parser = new BlockCharParser('(', ')', ' ');
            string       input;

            Console.WriteLine("Test 1: Invalid Input");
            input = "(var( op var) operator (var op (op var))";
            Run(input, parser);

            Console.WriteLine();
            Console.WriteLine("Test 2: Valid Input");
            input = "(var op var) operator (var op (op var)) where var = val, var = val";
            Run(input, parser);
        }
Exemplo n.º 2
0
        public bool ParseBlocks(string input)
        {
            //  [expression] opt ended by ";"
            //  (block)
            //      [(block) operator (block)]
            //      [(var op var) operator (var op (block))]
            //      [(var op var) operator (var op (op var))]
            // var & op delimited by ' ' :
            //      [(str str str) str (str str (str str))]
            // op is determined by:
            //      1. Outside of any block
            //      2. Item 1 if two items
            //      3. Even # items if odd # items total
            //      4. Error if even # items > 2
            // var is determined by:
            //      Remainders in the lists

            // Parse text into useable form
            IBlockParser parser = new BlockCharParser(OPEN_TAG, CLOSE_TAG, DELIMITER);
            Block        expression;

            if (parser.ValidateBalancedTags(input))
            {
                expression = new Block(input, parser);
                Console.WriteLine(expression);
            }
            else
            {
                Console.WriteLine(parser.Log);
                return(false);
            }

            // Create operations
            BooleanExp operation = ParseOperators(expression);


            // Create assignment context.
            Dictionary <string, string>    allAssignments   = GetVariablesText(input, ASSIGNMENT_TRIGGER, ASSIGNMENT_OPERATOR);
            Dictionary <VariableExp, bool> validAssignments = ConvertVariableAssignment(allAssignments);

            Context context = new Context();

            context = AssignVariables(validAssignments, context);

            // Perform calculation
            return(operation.Evaluate(context));
        }