Example #1
0
        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)));
        }
Example #2
0
            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));
                }
Example #3
0
            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));
                }
Example #4
0
            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())));
                }
            }
Example #5
0
            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);
                    }
Example #6
0
            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))));
                }
            }
Example #7
0
 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);
     }
Example #8
0
 protected abstract Expected <TResult, ParsingException> ParseImplementation(string str, ref int index, List <ParsingException> exceptions, MemoDictionary memo);