private bool TryGetBinaryOperatorType(ref string input, [NotNullWhen(true)] out BinaryOperatorType output) { if (input.Length > 0) { output = OperatorsFormatter.CharToBinaryOperator(input[0]); if (output != BinaryOperatorType.Unknown) { input = input.Substring(1); return(true); } } output = BinaryOperatorType.Unknown; return(false); }
private bool TryGetUnaryPrefixNode(ref string input, [NotNullWhen(true)] out UnaryPrefixNode?output) { if (input.Length > 0) { var op = OperatorsFormatter.CharToUnaryOperator(input[0]); if (op != UnaryOperatorType.Unknown) { var innerInput = input.Substring(1); if (TryGetUnaryNode(ref innerInput, out var innerUnaryNode)) { input = innerInput; output = new UnaryPrefixNode(op, innerUnaryNode); return(true); } } } output = null; return(false); }
private bool TryGetUnaryPrefixWithPowerNode(ref string input, [NotNullWhen(true)] out UnaryPrefixNode?output) { if (input.Length > 0) { var op = OperatorsFormatter.CharToUnaryOperator(input[0]); if (op != UnaryOperatorType.Unknown) { var innerInput = input.Substring(1); if (TryGetBinaryNode(ref innerInput, out var innerBinaryNode, BinaryOperatorType.Power)) { if (innerBinaryNode.Rights.Any()) { input = innerInput; output = new UnaryPrefixNode(op, new UnaryExpressionNode(innerBinaryNode)); return(true); } } } } output = null; return(false); }