public void Initialization() { parser = new RPNParser(); parser.AddBinaryOperation(new BinaryOperationToken('+', (a, b) => a + b, 0, Associativity.Left)); parser.AddBinaryOperation(new BinaryOperationToken('-', (a, b) => a - b, 0, Associativity.Left)); parser.AddBinaryOperation(new BinaryOperationToken('*', (a, b) => a * b, 1, Associativity.Left)); parser.AddBinaryOperation(new BinaryOperationToken('/', (a, b) => a / b, 1, Associativity.Left)); parser.AddBinaryOperation(new BinaryOperationToken('^', (a, b) => Math.Pow(a, b), 2, Associativity.Right)); parser.AddFunction(new FunctionToken("Foo", x => x + 5, FunctionType.Prefix)); parser.AddFunction(new FunctionToken("!", (x) => { if (x < 0 || x - (int)x > Double.Epsilon) { throw new Exception("Факториал определен для целых положительных чисел"); } double result = 1; for (int i = 2; i != (int)x + 1; i++) { result *= i; } return(result); }, FunctionType.Postfix)); }