private IAutomaton Factor() { if (MayConsume('(')) { var result = Exec(); Consumes(')'); return(result); } else if (MayConsume('[')) { var negate = MayConsume('^'); var chars = CharSet.Empty; while (!MayConsume(']')) { var set = CharRange(); chars = chars.Union(set); } if (negate) { chars = chars.Negate(); } return(ConstructionKit.Consume(chars)); } else { var ch = CharRange(); return(ConstructionKit.Consume(ch)); } }
public void StepConcatenation() { var A = ConstructionKit.Consume(new CharSet('a')); var B = ConstructionKit.Consume(new CharSet('b')); var automaton = ConstructionKit.Concat(new[] { A, B }); automaton.Accepts("ab"); automaton.Rejects("ba"); }
public void StepCharacter() { var automaton = ConstructionKit.Consume(new CharSet('a', 'b', 'c')); automaton.Accepts("a"); automaton.Accepts("b"); automaton.Accepts("c"); automaton.Rejects("d"); }
public void StepRepetition() { var A = ConstructionKit.Consume(new CharSet('a')); var automaton = ConstructionKit.Repeat(A); automaton.Accepts(""); automaton.Accepts("a"); automaton.Accepts("aa"); automaton.Accepts("aaa"); automaton.Rejects("b"); }
public void StepAlternation() { var A = ConstructionKit.Consume(new CharSet('a')); var B = ConstructionKit.Consume(new CharSet('b')); var AA = ConstructionKit.Concat(new[] { A, A }); var automaton = ConstructionKit.Alternate(new[] { AA, B }); automaton.Accepts("b"); automaton.Accepts("aa"); automaton.Rejects("bb"); automaton.Rejects("a"); }
public void StepDeterminize() { var A = ConstructionKit.Consume(new CharSet('a')); var B = ConstructionKit.Consume(new CharSet('b')); var AA = ConstructionKit.Concat(new[] { A, A }); var AAorB = ConstructionKit.Alternate(new[] { AA, B }); var automaton = ConstructionKit.Repeat(AAorB) .Determinize(); automaton.Accepts(""); automaton.Accepts("aa"); automaton.Accepts("aa"); automaton.Accepts("aaaa"); automaton.Accepts("baab"); automaton.Accepts("baabaabb"); automaton.Rejects("a"); automaton.Rejects("aaa"); }