From: Jean Privat Date: Tue, 21 Jun 2016 17:45:12 +0000 (-0400) Subject: nitcc: add `Automaton::assert_valid` X-Git-Url: http://nitlanguage.org nitcc: add `Automaton::assert_valid` Signed-off-by: Jean Privat --- diff --git a/contrib/nitcc/src/autom.nit b/contrib/nitcc/src/autom.nit index 3ca56bc..dd57b52 100644 --- a/contrib/nitcc/src/autom.nit +++ b/contrib/nitcc/src/autom.nit @@ -373,6 +373,8 @@ class Automaton # REQUIRE: self is a DFA fun to_minimal_dfa: Automaton do + assert_valid + trim # Graph of known distinct states. @@ -449,6 +451,21 @@ class Automaton return to_dfa end + # Assert that `self` is a valid automaton or abort + fun assert_valid + do + assert states.has(start) + assert states.has_all(accept) + for s in states do + for t in s.outs do assert states.has(t.to) + for t in s.ins do assert states.has(t.from) + end + assert states.has_all(tags.keys) + for t, ss in retrotags do + assert states.has_all(ss) + end + end + # Produce a graphvis file for the automaton fun to_dot(filepath: String) do @@ -514,6 +531,8 @@ class Automaton # note: the DFA is not minimized. fun to_dfa: Automaton do + assert_valid + trim var dfa = new Automaton.empty