Exemplo n.º 1
0
        protected Tuple <Token <T>, Token <T>, Token <T> > BasicTypedShakerFunction(
            Token <T> target,
            TypedShakeCondition <T> cond,
            TypedShakeSelector <T> selector)
        {
            Func <TypedSegment, Token <T>, int> getRest          = (seg, hunk) => (hunk.Length - (seg.Start + seg.Length));
            Func <TypedSegment, int>            getComputedStart = (seg) => seg.Start + seg.Length;

            TypedSegment result = cond(target);

            if (result == null)
            {
                return(new Tuple <Token <T>, Token <T>, Token <T> >(null, null, target));
            }
            else
            {
                TypedSegment restSection = new TypedSegment(getRest(result, target), string.Empty, getComputedStart(result));
                var          matchTokens = selector(result, target);
                var          before      = matchTokens.Item1;
                var          match       = matchTokens.Item2;
                match.IsBig = false;
                var restTokens = selector(restSection, target);
                var rest       = restTokens.Item2;
                rest.IsBig = true;
                return(new Tuple <Token <T>, Token <T>, Token <T> >(before, match, rest));
            }
        }
Exemplo n.º 2
0
 public static TypedShakeCondition <string> GenerateMultiCharacterTypedCond(string lookingFor, string type)
 {
     return(GenerateTypedCond <string>((val, ind, len) =>
     {
         int v = val.IndexOf(lookingFor);
         bool result = v != -1;
         TypedSegment target = new TypedSegment(lookingFor.Length, type, v);
         return new Tuple <bool, TypedSegment>(result, target);
     }));
 }
Exemplo n.º 3
0
        public static Tuple <Token <T>, Token <T> > DefaultTypedSelector <T>(TypedSegment seg, Token <T> hunk, Func <T, TypedSegment, Token <T>, T> transform)
        {
            int offset = hunk.Start;

            if (seg.Start == 0)
            {
                var value = new Tuple <Token <T>, Token <T> >(
                    null,
                    new Token <T>(transform(hunk.Value, seg, hunk), seg.Type, seg.Length, seg.Start + offset, true));
                return(value);
            }
            else
            {
                var value = new Tuple <Token <T>, Token <T> >(
                    new Token <T>(transform(hunk.Value, new TypedSegment(seg.Start, string.Empty), hunk), string.Empty, seg.Start, offset), //forward
                    new Token <T>(transform(hunk.Value, seg, hunk), seg.Type, seg.Length, seg.Start + offset, true));                       //match
                return(value);
            }
        }
Exemplo n.º 4
0
        public override bool Equals(object other)
        {
            TypedSegment seg = (TypedSegment)other;

            return(seg.Type.Equals(Type) && base.Equals(other));
        }
Exemplo n.º 5
0
 public TypedSegment(TypedSegment seg)
     : base(seg)
 {
     Type = seg.Type;
 }
Exemplo n.º 6
0
 public static Tuple <Token <string>, Token <string> > DefaultTypedStringSelector(TypedSegment seg, Token <string> tok)
 {
     return(DefaultTypedSelector <string>(seg, tok, (x, y, z) => x.Substring(y.Start, y.Length)));
 }
Exemplo n.º 7
0
 public TypedSegment(TypedSegment seg)
     : base(seg)
 {
     Type = seg.Type;
 }