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