//ranges == expression.Ranges public void Loop(CharSetExpression expression, FlatSet <CharRange> ranges, NormalizedCharSet target) { if (expression.IsReverse) { char begin = (char)(char.MinValue + 1); foreach (var r in ranges) { if (r.Begin > begin) { Process(expression, target, new CharRange(begin, (char)(r.Begin - 1))); } begin = (char)(r.End + 1); } if (begin <= char.MaxValue) { Process(expression, target, new CharRange(begin, char.MaxValue)); } } else { foreach (var r in ranges) { Process(expression, target, r); } } }
public bool IsCharSetEqual(string input, RegexNode node) { var parser = new Parser(input); var exp = parser.ParseExpression(); var sets = new FlatSet<CharRange>(); exp.NormalizeCharSet(out sets); return exp.Equals(node.Exp); }
public bool IsCharSetEqual(string input, RegexNode node) { var parser = new Parser(input); var exp = parser.ParseExpression(); var sets = new FlatSet <CharRange>(); exp.NormalizeCharSet(out sets); return(exp.Equals(node.Exp)); }
public override bool Apply(CharSetExpression expression, NormalizedCharSet param) { var source = new FlatSet <CharRange>(expression.Ranges); expression.Ranges.Clear(); Loop(expression, source, param); expression.IsReverse = false; return(false); }
public NormalizedCharSet() { Ranges = new FlatSet <CharRange>(); }
public void NormalizeCharSet(out FlatSet<CharRange> subsets) { var normalized = new NormalizedCharSet(); new BuildNormalizedCharSetAlgorithm().Invoke(this, normalized); new SetNormalizedCharSetAlgorithm().Invoke(this, normalized); subsets = new FlatSet<CharRange>(normalized.Ranges); }
public CharSetExpression(CharSetExpression expression) { Ranges = new FlatSet<CharRange>(expression.Ranges); IsReverse = expression.IsReverse; }
public CharSetExpression() { Ranges = new FlatSet<CharRange>(); IsReverse = false; }