Exemplo n.º 1
0
 public void EmitIn(LinkRef tail)
 {
     // emitted for things like [\dabcfh]
     BeginLink(tail);
     Emit(RxOp.TestCharGroup);
     EmitLink(tail);
 }
Exemplo n.º 2
0
        public void EmitUntil(LinkRef repeat)
        {
            ResolveLink(repeat);
            Emit(OpCode.Until);

            TraceRegexp("end until {0}", repeat);
        }
Exemplo n.º 3
0
        void EmitLink(LinkRef lref)
        {
            RxLinkRef link = lref as RxLinkRef;

            link.PushOffsetPosition(curpos);
            Emit((ushort)0);
        }
Exemplo n.º 4
0
 public void EmitTest(LinkRef yes, LinkRef tail)
 {
     BeginLink(yes);
     BeginLink(tail);
     Emit(RxOp.Test);
     EmitLink(yes);
     EmitLink(tail);
 }
Exemplo n.º 5
0
        private void EmitLink(LinkRef lref)
        {
            PatternLinkStack stack = (PatternLinkStack)lref;

            stack.OffsetAddress = CurrentAddress;
            Emit((ushort)0);                    // placeholder
            stack.Push();
        }
Exemplo n.º 6
0
        public void EmitJump(LinkRef target)
        {
            BeginLink(target);
            Emit(OpCode.Jump, 0);
            EmitLink(target);

            TraceRegexp("jmp target {0}", target);
        }
Exemplo n.º 7
0
        public void EmitBranch(LinkRef next)
        {
            BeginLink(next);
            Emit(OpCode.Branch, 0);
            EmitLink(next);

            TraceRegexp("branch next {0}", next);
        }
Exemplo n.º 8
0
 public void EmitFastRepeat(int min, int max, bool lazy, LinkRef tail)
 {
     BeginLink(tail);
     Emit(lazy ? RxOp.FastRepeatLazy : RxOp.FastRepeat);
     EmitLink(tail);
     Emit(min);
     Emit(max);
 }
Exemplo n.º 9
0
        public void EmitIn(LinkRef tail)
        {
            BeginLink(tail);
            Emit(OpCode.In);
            EmitLink(tail);

            TraceRegexp("in tail {0}", tail);
        }
Exemplo n.º 10
0
 public void EmitRepeat(int min, int max, bool lazy, LinkRef until)
 {
     BeginLink(until);
     Emit(lazy ? RxOp.RepeatLazy : RxOp.Repeat);
     EmitLink(until);
     Emit(min);
     Emit(max);
 }
Exemplo n.º 11
0
        public void EmitSub(LinkRef tail)
        {
            BeginLink(tail);
            Emit(OpCode.Sub);
            EmitLink(tail);

            TraceRegexp("sub {0}", tail);
        }
Exemplo n.º 12
0
 public void EmitBalanceStart(int gid, int balance, bool capture, LinkRef tail)
 {
     BeginLink(tail);
     Emit(RxOp.BalanceStart);
     Emit((ushort)gid);
     Emit((ushort)balance);
     Emit((byte)(capture ? 1 : 0));
     EmitLink(tail);
 }
Exemplo n.º 13
0
        public void EmitAnchor(bool reverse, int offset, LinkRef tail)
        {
            BeginLink(tail);
            Emit(OpCode.Anchor, MakeFlags(false, false, reverse, false));
            EmitLink(tail);
            Emit((ushort)offset);

            TraceRegexp("anchor reverse {0} offset {1} tail {2}", reverse, offset, tail);
        }
Exemplo n.º 14
0
        public void EmitIfDefined(int gid, LinkRef tail)
        {
            BeginLink(tail);
            Emit(OpCode.IfDefined);
            EmitLink(tail);
            Emit((ushort)gid);

            TraceRegexp("if defined gid {1} tail {2}", gid, tail);
        }
Exemplo n.º 15
0
        public void EmitTest(LinkRef yes, LinkRef tail)
        {
            BeginLink(yes);
            BeginLink(tail);
            Emit(OpCode.Test);
            EmitLink(yes);
            EmitLink(tail);

            TraceRegexp("test yes {0} tail {1}", yes, tail);
        }
Exemplo n.º 16
0
        public void EmitFastRepeat(int min, int max, bool lazy, LinkRef tail)
        {
            BeginLink(tail);
            Emit(OpCode.FastRepeat, MakeFlags(false, false, false, lazy));
            EmitLink(tail);
            EmitCount(min);
            EmitCount(max);

            TraceRegexp("repeat-fast min {0} max {1} lazy {2} tail {3}", min, max, lazy, tail);
        }
Exemplo n.º 17
0
        public void ResolveLink(LinkRef lref)
        {
            PatternLinkStack stack = (PatternLinkStack)lref;

            while (stack.Pop())
            {
                pgm[stack.OffsetAddress] = (ushort)stack.GetOffset(CurrentAddress);
            }

            TraceRegexpLabel(lref);
        }
Exemplo n.º 18
0
 public void EmitIfDefined(int gid, LinkRef tail)
 {
     if (gid > ushort.MaxValue)
     {
         throw new NotSupportedException();
     }
     BeginLink(tail);
     Emit(RxOp.IfDefined);
     EmitLink(tail);
     Emit((ushort)gid);
 }
Exemplo n.º 19
0
        public void EmitBalanceStart(int gid, int balance, bool capture, LinkRef tail)
        {
            BeginLink(tail);
            Emit(OpCode.BalanceStart);
            Emit((ushort)gid);
            Emit((ushort)balance);
            Emit((ushort)(capture ? 1 : 0));
            EmitLink(tail);

            TraceRegexp("balance start gid {0} balance {1} capture {2} tail {3}", gid, balance, capture, tail);
        }
Exemplo n.º 20
0
        public void ResolveLink(LinkRef link)
        {
            RxLinkRef l = link as RxLinkRef;

            for (int i = 0; i < l.current; i += 2)
            {
                int offset = curpos - l.offsets [i];
                if (offset > ushort.MaxValue)
                {
                    throw new NotSupportedException();
                }
                int offsetpos = l.offsets [i + 1];
                program [offsetpos]     = (byte)offset;
                program [offsetpos + 1] = (byte)(offset >> 8);
            }
        }
Exemplo n.º 21
0
 public void EmitAnchor(bool reverse, int offset, LinkRef tail)
 {
     BeginLink(tail);
     if (reverse)
     {
         Emit(RxOp.AnchorReverse);
     }
     else
     {
         Emit(RxOp.Anchor);
     }
     EmitLink(tail);
     if (offset > ushort.MaxValue)
     {
         throw new NotSupportedException();
     }
     Emit((ushort)offset);
 }
Exemplo n.º 22
0
 public void EmitSub(LinkRef tail)
 {
     BeginLink(tail);
     Emit(RxOp.SubExpression);
     EmitLink(tail);
 }
Exemplo n.º 23
0
 public void EmitUntil(LinkRef repeat)
 {
     ResolveLink(repeat);
     Emit(RxOp.Until);
 }
Exemplo n.º 24
0
        void BeginLink(LinkRef lref)
        {
            RxLinkRef link = lref as RxLinkRef;

            link.PushInstructionBase(curpos);
        }
Exemplo n.º 25
0
        private void BeginLink(LinkRef lref)
        {
            PatternLinkStack stack = (PatternLinkStack)lref;

            stack.BaseAddress = CurrentAddress;
        }
Exemplo n.º 26
0
 public void EmitJump(LinkRef target)
 {
     BeginLink(target);
     Emit(RxOp.Jump);
     EmitLink(target);
 }
Exemplo n.º 27
0
 static void TraceRegexpLabel(LinkRef lref)
 {
     Console.Write("{0}:", lref);
 }
Exemplo n.º 28
0
 public void EmitBranch(LinkRef next)
 {
     BeginLink(next);
     Emit(RxOp.Branch);
     EmitLink(next);
 }