public static IMemberExpression Parse(string text, int start, int count, Action <string> onError) { if (string.IsNullOrEmpty(text)) { return(null); } if (start < 0 || start >= text.Length) { throw new ArgumentOutOfRangeException(nameof(start)); } if (count < 1) { count = text.Length - start; } else if (count > text.Length - start) { throw new ArgumentOutOfRangeException(nameof(count)); } //创建解析上下文对象 var context = new StateContext(text.Length, onError); //状态迁移驱动 for (int i = start; i < start + count; i++) { context.Character = text[i]; switch (context.State) { case State.None: if (!DoNone(ref context, i)) { return(null); } break; case State.Gutter: if (!DoGutter(ref context, i)) { return(null); } break; case State.Separator: if (!DoSeparator(ref context, i)) { return(null); } break; case State.Identifier: if (!DoIdentifier(ref context, i)) { return(null); } break; case State.Method: if (!DoMethod(ref context, i)) { return(null); } break; case State.Indexer: if (!DoIndexer(ref context, i)) { return(null); } break; case State.Parameter: if (!DoParameter(ref context, i)) { return(null); } break; case State.Number: if (!DoNumber(ref context, i)) { return(null); } break; case State.String: if (!DoString(ref context, i)) { return(null); } break; } } //获取最终的解析结果 return(context.GetResult()); }