static ExpressionOptions()
        {
            var opDefs = new Dictionary <OperatorType, OperatorDefinition>();

            void AddOpDef(int precedence, OperatorType type, OperatorSidedness sidedness, params char[] names)
            {
                var opDef = new OperatorDefinition(precedence, type, sidedness, names);

                opDefs.Add(type, opDef);
            }

            AddOpDef(0, OperatorType.Add, OperatorSidedness.OptionalLeft, '+');
            AddOpDef(0, OperatorType.Subtract, OperatorSidedness.OptionalLeft, '-', '–');
            AddOpDef(1, OperatorType.Multiply, OperatorSidedness.Both, '*', '×');
            AddOpDef(1, OperatorType.Divide, OperatorSidedness.Both, '/', ':', '÷');
            AddOpDef(1, OperatorType.Modulo, OperatorSidedness.Both, '%');
            AddOpDef(2, OperatorType.Exponent, OperatorSidedness.Both, '^');
            AddOpDef(2, OperatorType.Factorial, OperatorSidedness.Left, '!');

            var opInverses = new List <OperatorInverse>();

            void AddOpInverse(OperatorType source, OperatorType inverse)
            {
                var sourceOp  = opDefs[source];
                var inverseOp = opDefs[inverse];

                opInverses.Add(new OperatorInverse(sourceOp, inverseOp));
            }

            AddOpInverse(OperatorType.Add, OperatorType.Subtract);
            AddOpInverse(OperatorType.Subtract, OperatorType.Add);
            AddOpInverse(OperatorType.Multiply, OperatorType.Divide);
            AddOpInverse(OperatorType.Divide, OperatorType.Multiply);

            Default = new ExpressionOptions(
                opDefs.Values,
                opInverses,
                doImplicitMultiplications: true);
        }
Beispiel #2
0
 public OperatorInverse(
     OperatorDefinition sourceDefinition, OperatorDefinition definition)
 {
     SourceDefinition = sourceDefinition ?? throw new ArgumentNullException(nameof(sourceDefinition));
     Definition       = definition ?? throw new ArgumentNullException(nameof(definition));
 }