private void ConvertNodeLoop(RegexNode node)
{
var child = node._children[0];
int m = node._m;
int n = node._n;
if (m == 1 && n == 1) //trivial case: r{1,1} = r
{
ConvertNode(child);
}
else if (m == 0 && n == 1) //case: ?
{
Write("(re-option ");
ConvertNode(child);
Write(")");
}
else if (m == 0 && n == int.MaxValue) //case: *
{
Write("(re-star ");
ConvertNode(child);
Write(")");
}
else if (m == 1 && n == int.MaxValue) //case: +
{
Write("(re-plus ");
ConvertNode(child);
Write(")");
}
else if (n == int.MaxValue) //case {m,}
{
Write(string.Format("(re-concat ((_ re-loop {0} {0}) ",m));
ConvertNode(child);
Write(") (re-star ");
ConvertNode(child);
Write("))");
}
else //general case {m,n}
{
Write(string.Format("((_ re-loop {0} {1}) ", m, n));
ConvertNode(child);
Write(")");
}
}