Loading lib/checker.py +9 −13 Original line number Original line Diff line number Diff line Loading @@ -16,16 +16,12 @@ def get_task(string: str) -> Tuple[str, str]: # from IS task prefix def dfa_transform(string: str, automaton_type: str) -> reg.DFA: def dfa_transform(string: str, automaton_type: str) -> reg.DFA: try: if automaton_type in {"DFA", "TOT", "MIN", "TOC", "CAN", "MIC"}: if automaton_type in {"DFA", "TOT", "MIN", "TOC", "MIC"}: parser = Parser() parser = Parser() return parser.str_to_dfa(string) return parser.str_to_dfa(string) else: else: return nfa_transform(string, automaton_type).determinize() return nfa_transform(string, automaton_type).determinize() except ParsingError as ex: raise ParsingError(ex.args) def nfa_transform(string: str, automaton_type: str) -> reg.NFA: def nfa_transform(string: str, automaton_type: str) -> reg.NFA: try: try: Loading @@ -37,7 +33,7 @@ def nfa_transform(string: str, automaton_type: str) -> reg.NFA: automaton = parser.str_to_reggrammar(string).eliminate_useless().reggrammar_to_nfa() automaton = parser.str_to_reggrammar(string).eliminate_useless().reggrammar_to_nfa() elif automaton_type == "REG": elif automaton_type == "REG": automaton = parser.str_to_regex(string).regex_to_efa().eliminate_epsilon() automaton = parser.str_to_regex(string).regex_to_efa().eliminate_epsilon() elif automaton_type in {"DFA", "TOT", "MIN", "TOC", "MIC"}: elif automaton_type in {"DFA", "TOT", "MIN", "TOC", "CAN", "MIC"}: automaton = parser.str_to_dfa(string).dfa_to_nfa() automaton = parser.str_to_dfa(string).dfa_to_nfa() return reg.NFA(automaton.states, automaton.characters, automaton.transition, automaton.init, automaton.final) return reg.NFA(automaton.states, automaton.characters, automaton.transition, automaton.init, automaton.final) Loading @@ -50,7 +46,7 @@ def transform(string: str, automaton_type: str) -> Union[reg.DFA, reg.NFA, reg.R try: try: parser = Parser() parser = Parser() if automaton_type in {"DFA", "TOT", "MIN", "TOC", "MIC"}: if automaton_type in {"DFA", "TOT", "MIN", "TOC", "CAN", "MIC"}: formalism = parser.str_to_dfa(string) formalism = parser.str_to_dfa(string) elif automaton_type in {"EFA", "NFA"}: elif automaton_type in {"EFA", "NFA"}: formalism = parser.str_to_nfa(string) formalism = parser.str_to_nfa(string) Loading @@ -74,7 +70,7 @@ def check_task(automaton: Union[reg.DFA, reg.NFA], task: str) -> str: output = "NFA obsahuje ε-kroky." output = "NFA obsahuje ε-kroky." return output return output if task not in {"TOT", "MIN", "TOC", "MIC"}: if task not in {"TOT", "MIN", "TOC", "CAN", "MIC"}: return output return output if task == "TOT" and not automaton.is_total(): if task == "TOT" and not automaton.is_total(): Loading Loading
lib/checker.py +9 −13 Original line number Original line Diff line number Diff line Loading @@ -16,16 +16,12 @@ def get_task(string: str) -> Tuple[str, str]: # from IS task prefix def dfa_transform(string: str, automaton_type: str) -> reg.DFA: def dfa_transform(string: str, automaton_type: str) -> reg.DFA: try: if automaton_type in {"DFA", "TOT", "MIN", "TOC", "CAN", "MIC"}: if automaton_type in {"DFA", "TOT", "MIN", "TOC", "MIC"}: parser = Parser() parser = Parser() return parser.str_to_dfa(string) return parser.str_to_dfa(string) else: else: return nfa_transform(string, automaton_type).determinize() return nfa_transform(string, automaton_type).determinize() except ParsingError as ex: raise ParsingError(ex.args) def nfa_transform(string: str, automaton_type: str) -> reg.NFA: def nfa_transform(string: str, automaton_type: str) -> reg.NFA: try: try: Loading @@ -37,7 +33,7 @@ def nfa_transform(string: str, automaton_type: str) -> reg.NFA: automaton = parser.str_to_reggrammar(string).eliminate_useless().reggrammar_to_nfa() automaton = parser.str_to_reggrammar(string).eliminate_useless().reggrammar_to_nfa() elif automaton_type == "REG": elif automaton_type == "REG": automaton = parser.str_to_regex(string).regex_to_efa().eliminate_epsilon() automaton = parser.str_to_regex(string).regex_to_efa().eliminate_epsilon() elif automaton_type in {"DFA", "TOT", "MIN", "TOC", "MIC"}: elif automaton_type in {"DFA", "TOT", "MIN", "TOC", "CAN", "MIC"}: automaton = parser.str_to_dfa(string).dfa_to_nfa() automaton = parser.str_to_dfa(string).dfa_to_nfa() return reg.NFA(automaton.states, automaton.characters, automaton.transition, automaton.init, automaton.final) return reg.NFA(automaton.states, automaton.characters, automaton.transition, automaton.init, automaton.final) Loading @@ -50,7 +46,7 @@ def transform(string: str, automaton_type: str) -> Union[reg.DFA, reg.NFA, reg.R try: try: parser = Parser() parser = Parser() if automaton_type in {"DFA", "TOT", "MIN", "TOC", "MIC"}: if automaton_type in {"DFA", "TOT", "MIN", "TOC", "CAN", "MIC"}: formalism = parser.str_to_dfa(string) formalism = parser.str_to_dfa(string) elif automaton_type in {"EFA", "NFA"}: elif automaton_type in {"EFA", "NFA"}: formalism = parser.str_to_nfa(string) formalism = parser.str_to_nfa(string) Loading @@ -74,7 +70,7 @@ def check_task(automaton: Union[reg.DFA, reg.NFA], task: str) -> str: output = "NFA obsahuje ε-kroky." output = "NFA obsahuje ε-kroky." return output return output if task not in {"TOT", "MIN", "TOC", "MIC"}: if task not in {"TOT", "MIN", "TOC", "CAN", "MIC"}: return output return output if task == "TOT" and not automaton.is_total(): if task == "TOT" and not automaton.is_total(): Loading