private static ExpressionParser <bool> CreateExpressionParser()
        {
            ExpressionParser <bool> parser = new ExpressionParser <bool>();

            // Or Symbol
            ExpressionParser <bool> .Symbol orSymbol = new ExpressionParser <bool> .Symbol();

            orSymbol.Name          = "||";
            orSymbol.Type          = SymbolType.Operator;
            orSymbol.RegexOverride = "\\|\\|";
            orSymbol.binaryFunc    = (left, right) => left || right;
            parser.WithSymbol(orSymbol);

            // And Symbol
            ExpressionParser <bool> .Symbol andSymbol = new ExpressionParser <bool> .Symbol();

            andSymbol.Name       = "&&";
            andSymbol.Type       = SymbolType.Operator;
            andSymbol.binaryFunc = (left, right) => left && right;
            parser.WithSymbol(andSymbol);

            // Not Symbol
            ExpressionParser <bool> .Symbol notSymbol = new ExpressionParser <bool> .Symbol();

            notSymbol.Name      = "!";
            notSymbol.Type      = SymbolType.Operator;
            notSymbol.unaryFunc = (val) => !val;
            parser.WithSymbol(notSymbol);

            // Open Parenthesis
            ExpressionParser <bool> .Symbol openParenthesis = new ExpressionParser <bool> .Symbol();

            openParenthesis.Name          = "(";
            openParenthesis.Type          = SymbolType.OpenParenthesis;
            openParenthesis.RegexOverride = "\\(";
            parser.WithSymbol(openParenthesis);

            // Close Parenthesis
            ExpressionParser <bool> .Symbol closeParenthesis = new ExpressionParser <bool> .Symbol();

            closeParenthesis.Name          = ")";
            closeParenthesis.Type          = SymbolType.CloseParenthesis;
            closeParenthesis.RegexOverride = "\\)";
            parser.WithSymbol(closeParenthesis);

            // Interpret literals via the ConditionsManager.
            parser.LiteralParser = (val) => ConditionsManager.Instance.IsConditionTrue(val);

            return(parser);
        }
        public void Setup()
        {
            parser = new ExpressionParser <bool>();

            // Or Symbol
            ExpressionParser <bool> .Symbol orSymbol = new ExpressionParser <bool> .Symbol();

            orSymbol.Name          = "||";
            orSymbol.Type          = SymbolType.Operator;
            orSymbol.RegexOverride = "\\|\\|";
            orSymbol.binaryFunc    = (left, right) => left || right;
            parser.WithSymbol(orSymbol);

            // And Symbol
            ExpressionParser <bool> .Symbol andSymbol = new ExpressionParser <bool> .Symbol();

            andSymbol.Name       = "&&";
            andSymbol.Type       = SymbolType.Operator;
            andSymbol.binaryFunc = (left, right) => left && right;
            parser.WithSymbol(andSymbol);

            // Not Symbol
            ExpressionParser <bool> .Symbol notSymbol = new ExpressionParser <bool> .Symbol();

            notSymbol.Name      = "!";
            notSymbol.Type      = SymbolType.Operator;
            notSymbol.unaryFunc = (val) => !val;
            parser.WithSymbol(notSymbol);

            // Open Parenthesis
            ExpressionParser <bool> .Symbol openParenthesis = new ExpressionParser <bool> .Symbol();

            openParenthesis.Name          = "(";
            openParenthesis.Type          = SymbolType.OpenParenthesis;
            openParenthesis.RegexOverride = "\\(";
            parser.WithSymbol(openParenthesis);

            // Close Parenthesis
            ExpressionParser <bool> .Symbol closeParenthesis = new ExpressionParser <bool> .Symbol();

            closeParenthesis.Name          = ")";
            closeParenthesis.Type          = SymbolType.CloseParenthesis;
            closeParenthesis.RegexOverride = "\\)";
            parser.WithSymbol(closeParenthesis);

            // Interpret literals.
            parser.LiteralParser = (val) => val.ToLower() == "true";
        }
        public void Setup()
        {
            parser = new ExpressionParser <float>();

            // Plus Symbol
            ExpressionParser <float> .Symbol plusSymbol = new ExpressionParser <float> .Symbol();

            plusSymbol.Name          = "+";
            plusSymbol.Type          = SymbolType.Operator;
            plusSymbol.Precedence    = 1;
            plusSymbol.RegexOverride = "\\+";
            plusSymbol.binaryFunc    = (left, right) => left + right;
            parser.WithSymbol(plusSymbol);

            // Minus Symbol
            ExpressionParser <float> .Symbol minusSymbol = new ExpressionParser <float> .Symbol();

            minusSymbol.Name          = "-";
            minusSymbol.Type          = SymbolType.Operator;
            minusSymbol.Precedence    = 2;
            minusSymbol.RegexOverride = "\\-";
            minusSymbol.unaryFunc     = (val) => - val;
            minusSymbol.binaryFunc    = (left, right) => left - right;
            parser.WithSymbol(minusSymbol);

            // Multiply Symbol
            ExpressionParser <float> .Symbol multSymbol = new ExpressionParser <float> .Symbol();

            multSymbol.Name          = "*";
            multSymbol.Type          = SymbolType.Operator;
            multSymbol.Precedence    = 3;
            multSymbol.RegexOverride = "\\*";
            multSymbol.binaryFunc    = (left, right) => left * right;
            parser.WithSymbol(multSymbol);

            // Divide Symbol
            ExpressionParser <float> .Symbol divideSymbol = new ExpressionParser <float> .Symbol();

            divideSymbol.Name          = "/";
            divideSymbol.Type          = SymbolType.Operator;
            divideSymbol.Precedence    = 4;
            divideSymbol.RegexOverride = "\\/";
            divideSymbol.binaryFunc    = (left, right) => left / right;
            parser.WithSymbol(divideSymbol);

            // Open Parenthesis
            ExpressionParser <float> .Symbol openParenthesis = new ExpressionParser <float> .Symbol();

            openParenthesis.Name          = "(";
            openParenthesis.Type          = SymbolType.OpenParenthesis;
            openParenthesis.RegexOverride = "\\(";
            parser.WithSymbol(openParenthesis);

            // Close Parenthesis
            ExpressionParser <float> .Symbol closeParenthesis = new ExpressionParser <float> .Symbol();

            closeParenthesis.Name          = ")";
            closeParenthesis.Type          = SymbolType.CloseParenthesis;
            closeParenthesis.RegexOverride = "\\)";
            parser.WithSymbol(closeParenthesis);

            // Interpret literals.
            parser.LiteralParser = (val) => float.Parse(val);
        }