private void RepeatZeroOrOne(int start, int end, FSA <TValue> fsa, AstNodeBase node, bool isLasy, ORegexOptions options) { if (isLasy) { fsa.AddEpsilonTransition(start, end); Evaluate(start, end, fsa, node, options); } else { Evaluate(start, end, fsa, node, options); fsa.AddEpsilonTransition(start, end); } }
private void RepeatZeroOrInfinite(int start, int end, FSA <TValue> fsa, AstNodeBase predicate, bool isLasy, ORegexOptions options) { var tmp = CreateNewState(fsa); if (isLasy) { fsa.AddEpsilonTransition(start, end); fsa.AddEpsilonTransition(tmp, end); Evaluate(tmp, tmp, fsa, predicate, options); fsa.AddEpsilonTransition(start, tmp); } else { Evaluate(tmp, tmp, fsa, predicate, options); fsa.AddEpsilonTransition(tmp, end); fsa.AddEpsilonTransition(start, tmp); fsa.AddEpsilonTransition(start, end); } }