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); }
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)); }