protected override Expected <TResult, ParsingException> ParseImplementation(string str, ref int index, List <ParsingException> exceptions, MemoDictionary memo) { var start = index; foreach (var i in Range(this.str.Length)) { if (index == str.Length) { return(Failure <TResult>(new ParsingException(index, new ReachEndOfStringException()))); } else if (this.str[i] != str[index]) { return(Failure <TResult>(new ParsingException(index, this.error(i)))); } ++index; } return(Success(this.func(start))); }
protected override Expected <T, ParsingException> ParseImplementation(string str, ref int index, List <ParsingException> exceptions, MemoDictionary memo) { var val = this.Parser[this.exprIndex].Parse(str, ref index, exceptions, memo); if (val.TryGet(out var obj) && obj is T value) { return(Success(value)); }
protected override Expected <TResult, ParsingException> ParseImplementation(string str, ref int index, List <ParsingException> exceptions, MemoDictionary memo) { var start = index; var ret = this.Parser[this.exprIndex].Parse(str, ref index, exceptions, memo); index = start; if (ret.TryGet(out var obj) && obj is TResult val) { return(Success(val)); }
protected override Expected <T, ParsingException> ParseImplementation(string str, ref int index, List <ParsingException> exceptions, MemoDictionary memo) { var view = new StringView(str).Substring(index); if (this.match(view) is int length) { var ret = this.func(view.Substring(0, length), index); index += length; return(Success(ret)); } else { return(Failure <T>(new ParsingException(index, this.error()))); } }
protected override Expected <TResult, ParsingException> ParseImplementation(string str, ref int index, List <ParsingException> exceptions, MemoDictionary memo) { var list = new List <T>(); var start = index; var now = start; var @continue = false; while (list.Count < this.maxCount) { now = index; var val = this.Parser[this.exprIndex].Parse(str, ref index, exceptions, memo); if (val.TryGet(out var obj) && obj is T value) { list.Add(value); }
protected override Expected <TResult, ParsingException> ParseImplementation(string str, ref int index, List <ParsingException> exceptions, MemoDictionary memo) { var start = index; var val = this.Parser[this.exprIndex].Parse(str, ref index, new List <ParsingException>(), memo); index = start; if (!val) { return(Success(this.failure(start))); } else { return(Failure <TResult>(new ParsingException(start, this.error(start)))); } }
public Expected <object, ParsingException> Parse(string str, ref int index, List <ParsingException> exceptions, MemoDictionary memo) { this.Parser.SpaceSkip(str, ref index); if (memo.TryGet(this.Index, index, out var next, out var value)) { index = next; return(value); }
protected abstract Expected <TResult, ParsingException> ParseImplementation(string str, ref int index, List <ParsingException> exceptions, MemoDictionary memo);