internal ParserExpression(string scheme, string content, ParserExpression next = null) { if (string.IsNullOrWhiteSpace(scheme)) { throw new ArgumentNullException(nameof(scheme)); } _scheme = scheme.ToLowerInvariant().Trim(); _content = content?.Trim(); _next = next; }
public static bool TryParse(string text, out ParserExpression result) { result = null; if (string.IsNullOrWhiteSpace(text)) { return(false); } using (var reader = new StringReader(text)) { while (reader.Peek() > 0) { var isFailed = false; var current = ParseCore(reader, _ => isFailed = true); //如果解析失败则重置输出参数为空并返回假 if (isFailed) { result = null; return(false); } if (current == null) { continue; } if (result == null) { result = current; } else { var item = result; while (item.Next != null) { item = item.Next; } item.Next = current; } } } return(true); }
public static ParserExpression Parse(string text) { if (string.IsNullOrWhiteSpace(text)) { return(null); } ParserExpression result = null; ParserExpression current = null; using (var reader = new StringReader(text)) { while (reader.Peek() > 0) { current = ParseCore(reader, message => { throw new ParserException(message); }); if (result == null) { result = current; } else //线性查找命令表达式的管道链,并更新其指向 { var item = result; while (item.Next != null) { item = item.Next; } item.Next = current; } } } return(result); }