public override void Visit(DynamicBackReference expression)
		{
			terminal.Peek().Append(@"\k<");
			terminal.Peek().Append(expression.BackReferenceName);
			terminal.Peek().Append(">");
			if (!expression.IsCaseSensitive)
			{
				terminal.Peek().Append("[");
				terminal.Peek().Append(@"\i");
				terminal.Peek().Append("]");
			}
		}
		public override void Visit(DynamicBackReference expression)
		{
			String backreferencename = expression.BackReferenceName;
			Boolean isCaseSensitive = expression.IsCaseSensitive;

			_matchStack.Push(
				delegate(IInputIterator iterator)
				{
					var matchBytes = new Byte[1];
					if (_xmlDisableBackReferencePop.Count <= 0)
						matchBytes = _xmlBackReferenceLookup[backreferencename].Pop();
					else
						matchBytes = _xmlBackReferenceLookup[backreferencename].Peek();


					foreach (Byte c in matchBytes)
					{
						if (isCaseSensitive)
						{
							if (iterator.Current() != c)
							{
								iterator.Next();
								return false;
							}
						}
						else
						{
							var builder = new StringBuilder();
							builder.Append((Char)iterator.Current());
							if (builder.ToString().ToUpper() != c.ToString().ToUpper())
							{
								iterator.Next();
								return false;
							}
						}
						iterator.Next();
					}

					return true;
				}
				);
		}
 public abstract void Visit(DynamicBackReference expression);