Exemplo n.º 1
0
        void EmitLink(LinkRef lref)
        {
            RxLinkRef link = lref as RxLinkRef;

            link.PushOffsetPosition(curpos);
            Emit((ushort)0);
        }
Exemplo n.º 2
0
 public void EmitIn(LinkRef tail)
 {
     // emitted for things like [\dabcfh]
     BeginLink(tail);
     Emit(RxOp.TestCharGroup);
     EmitLink(tail);
 }
Exemplo n.º 3
0
 public void EmitIfDefined(int gid, LinkRef tail)
 {
     BeginLink(tail);
     Emit(OpCode.IfDefined);
     EmitLink(tail);
     Emit((ushort)gid);
 }
Exemplo n.º 4
0
 public void EmitAnchor(bool reverse, int offset, LinkRef tail)
 {
     this.BeginLink(tail);
     this.Emit(OpCode.Anchor, PatternCompiler.MakeFlags(false, false, reverse, false));
     this.EmitLink(tail);
     this.Emit((ushort)offset);
 }
Exemplo n.º 5
0
 public void EmitAnchor(bool reverse, int offset, LinkRef tail)
 {
     BeginLink(tail);
     Emit(OpCode.Anchor, MakeFlags(negate: false, ignore: false, reverse, lazy: false));
     EmitLink(tail);
     Emit((ushort)offset);
 }
Exemplo n.º 6
0
        public void EmitUntil(LinkRef repeat)
        {
            ResolveLink(repeat);
            Emit(OpCode.Until);

            TraceRegexp("end until {0}", repeat);
        }
Exemplo n.º 7
0
 private void EmitLink(LinkRef lref)
 {
     PatternCompiler.PatternLinkStack patternLinkStack = (PatternCompiler.PatternLinkStack)lref;
     patternLinkStack.OffsetAddress = this.CurrentAddress;
     this.Emit(0);
     patternLinkStack.Push();
 }
Exemplo n.º 8
0
 public void EmitTest(LinkRef yes, LinkRef tail)
 {
     this.BeginLink(yes);
     this.BeginLink(tail);
     this.Emit(OpCode.Test);
     this.EmitLink(yes);
     this.EmitLink(tail);
 }
Exemplo n.º 9
0
 public void EmitRepeat(int min, int max, bool lazy, LinkRef until)
 {
     BeginLink(until);
     Emit(OpCode.Repeat, MakeFlags(false, false, false, lazy));
     EmitLink(until);
     EmitCount(min);
     EmitCount(max);
 }
Exemplo n.º 10
0
 public void EmitTest(LinkRef yes, LinkRef tail)
 {
     BeginLink(yes);
     BeginLink(tail);
     Emit(OpCode.Test);
     EmitLink(yes);
     EmitLink(tail);
 }
Exemplo n.º 11
0
 public void EmitFastRepeat(int min, int max, bool lazy, LinkRef tail)
 {
     BeginLink(tail);
     Emit(OpCode.FastRepeat, MakeFlags(negate: false, ignore: false, reverse: false, lazy));
     EmitLink(tail);
     EmitCount(min);
     EmitCount(max);
 }
Exemplo n.º 12
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.º 13
0
        public void EmitBranch(LinkRef next)
        {
            BeginLink(next);
            Emit(OpCode.Branch, 0);
            EmitLink(next);

            TraceRegexp("branch next {0}", next);
        }
Exemplo n.º 14
0
        public void EmitJump(LinkRef target)
        {
            BeginLink(target);
            Emit(OpCode.Jump, 0);
            EmitLink(target);

            TraceRegexp("jmp target {0}", target);
        }
Exemplo n.º 15
0
        public void EmitIn(LinkRef tail)
        {
            BeginLink(tail);
            Emit(OpCode.In);
            EmitLink(tail);

            TraceRegexp("in tail {0}", tail);
        }
Exemplo n.º 16
0
 public void ResolveLink(LinkRef lref)
 {
     PatternCompiler.PatternLinkStack patternLinkStack = (PatternCompiler.PatternLinkStack)lref;
     while (patternLinkStack.Pop())
     {
         this.pgm[patternLinkStack.OffsetAddress] = (ushort)patternLinkStack.GetOffset(this.CurrentAddress);
     }
 }
Exemplo n.º 17
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.º 18
0
 public void EmitFastRepeat(int min, int max, bool lazy, LinkRef tail)
 {
     BeginLink(tail);
     Emit(OpCode.FastRepeat, MakeFlags(false, false, false, lazy));
     EmitLink(tail);
     Emit((ushort)min);
     Emit((ushort)max);
 }
Exemplo n.º 19
0
        public void EmitSub(LinkRef tail)
        {
            BeginLink(tail);
            Emit(OpCode.Sub);
            EmitLink(tail);

            TraceRegexp("sub {0}", tail);
        }
Exemplo n.º 20
0
 public void EmitFastRepeat(int min, int max, bool lazy, LinkRef tail)
 {
     this.BeginLink(tail);
     this.Emit(OpCode.FastRepeat, PatternCompiler.MakeFlags(false, false, false, lazy));
     this.EmitLink(tail);
     this.EmitCount(min);
     this.EmitCount(max);
 }
Exemplo n.º 21
0
        private void EmitLink(LinkRef lref)
        {
            PatternLinkStack patternLinkStack = (PatternLinkStack)lref;

            patternLinkStack.OffsetAddress = CurrentAddress;
            Emit((ushort)0);
            patternLinkStack.Push();
        }
Exemplo n.º 22
0
        private void EmitLink(LinkRef lref)
        {
            PatternLinkStack stack = (PatternLinkStack)lref;

            stack.OffsetAddress = CurrentAddress;
            Emit((ushort)0);                    // placeholder
            stack.Push();
        }
Exemplo n.º 23
0
 public void EmitBalanceStart(int gid, int balance, bool capture, LinkRef tail)
 {
     this.BeginLink(tail);
     this.Emit(OpCode.BalanceStart);
     this.Emit((ushort)gid);
     this.Emit((ushort)balance);
     this.Emit((!capture) ? 0 : 1);
     this.EmitLink(tail);
 }
Exemplo n.º 24
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.º 25
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);
 }
Exemplo n.º 26
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.º 27
0
        public void ResolveLink(LinkRef lref)
        {
            PatternLinkStack stack = (PatternLinkStack)lref;

            while (stack.Pop())
            {
                pgm[stack.OffsetAddress] = (ushort)stack.GetOffset(CurrentAddress);
            }
        }
Exemplo n.º 28
0
        public void EmitJumpTest(LinkRef target, LinkRef ElseTarget)
        {
            BeginLink(target);
            BeginLink(ElseTarget);
            Emit(OpCode.JumpTest, 0);
            EmitLink(target);
            EmitLink(ElseTarget);

            TraceRegexp("jmp test target {0} if not already tried else {1} ", target, ElseTarget);
        }
Exemplo n.º 29
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.º 30
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.º 31
0
		public void EmitJump (LinkRef target) {
			BeginLink (target);
			Emit (OpCode.Jump, 0);
			EmitLink (target);
		}
Exemplo n.º 32
0
		public void EmitJumpTest (LinkRef target, LinkRef ElseTarget) {
			BeginLink (target);
			BeginLink (ElseTarget);
			Emit (OpCode.JumpTest, 0);
			EmitLink (target);
			EmitLink (ElseTarget);

			TraceRegexp ("jmp test target {0} if not already tried else {1} ", target,ElseTarget);
		}	
Exemplo n.º 33
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.º 34
0
		public void EmitIn (LinkRef tail) {
			BeginLink (tail);
			Emit (OpCode.In);
			EmitLink (tail);
	
			TraceRegexp ("in tail {0}", tail);
		}
Exemplo n.º 35
0
		void BeginLink (LinkRef lref) {
			RxLinkRef link = lref as RxLinkRef;
			link.PushInstructionBase (curpos);
		}
Exemplo n.º 36
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.º 37
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.º 38
0
		public void EmitUntil (LinkRef repeat) {
			ResolveLink (repeat);
			Emit (OpCode.Until);

			TraceRegexp ("end until {0}", repeat);
		}
Exemplo n.º 39
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.º 40
0
		public void EmitBranch (LinkRef next) {
			BeginLink (next);
			Emit (OpCode.Branch, 0);
			EmitLink (next);
		}
Exemplo n.º 41
0
		public void EmitTest (LinkRef yes, LinkRef tail) {
			BeginLink (yes);
			BeginLink (tail);
			Emit (OpCode.Test);
			EmitLink (yes);
			EmitLink (tail);
		}
Exemplo n.º 42
0
		public void EmitJump (LinkRef target) {
			BeginLink (target);
			Emit (OpCode.Jump, 0);
			EmitLink (target);

			TraceRegexp ("jmp target {0}", target);
		}
Exemplo n.º 43
0
		public void EmitIfDefined (int gid, LinkRef tail) {
			BeginLink (tail);
			Emit (OpCode.IfDefined);
			EmitLink (tail);
			Emit ((ushort)gid);
		}
Exemplo n.º 44
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);
		}
Exemplo n.º 45
0
		public void EmitBranch (LinkRef next) {
			BeginLink (next);
			Emit (OpCode.Branch, 0);
			EmitLink (next);

			TraceRegexp ("branch next {0}", next);
		}
Exemplo n.º 46
0
		public void EmitUntil (LinkRef repeat) {
			ResolveLink (repeat);
			Emit (OpCode.Until);
		}
Exemplo n.º 47
0
		public void EmitSub (LinkRef tail) {
			BeginLink (tail);
			Emit (OpCode.Sub);
			EmitLink (tail);
	
			TraceRegexp ("sub {0}", tail);
		}
Exemplo n.º 48
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);
		}
Exemplo n.º 49
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.º 50
0
		public void EmitIn (LinkRef tail) {
			BeginLink (tail);
			Emit (OpCode.In);
			EmitLink (tail);
		}
Exemplo n.º 51
0
		static void TraceRegexpLabel (LinkRef lref)
		{
			Console.Write ("{0}:", lref);
		}
Exemplo n.º 52
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);
		}
Exemplo n.º 53
0
		void EmitLink (LinkRef lref)
		{
			RxLinkRef link = lref as RxLinkRef;
			link.PushOffsetPosition (curpos);
			Emit ((ushort)0);
		}
Exemplo n.º 54
0
		public void ResolveLink (LinkRef lref) {
			PatternLinkStack stack = (PatternLinkStack)lref;
		
			while (stack.Pop ())
				pgm[stack.OffsetAddress] = (ushort)stack.GetOffset (CurrentAddress);
		}
Exemplo n.º 55
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.º 56
0
		private void BeginLink (LinkRef lref) {
			PatternLinkStack stack = (PatternLinkStack)lref;
			stack.BaseAddress = CurrentAddress;
		}
Exemplo n.º 57
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.º 58
0
		private void EmitLink (LinkRef lref) {
			PatternLinkStack stack = (PatternLinkStack)lref;
			stack.OffsetAddress = CurrentAddress;
			Emit ((ushort)0);	// placeholder
			stack.Push ();
		}
Exemplo n.º 59
0
		public void EmitSub (LinkRef tail) {
			BeginLink (tail);
			Emit (OpCode.Sub);
			EmitLink (tail);
		}
Exemplo n.º 60
0
		public void EmitRepeat (int min, int max, bool lazy, LinkRef until) {
			BeginLink (until);
			Emit (OpCode.Repeat, MakeFlags (false, false, false, lazy));
			EmitLink (until);
			Emit ((ushort)min);
			Emit ((ushort)max);
		}