def check_dfa_language_from_words(student_answer, word_list, length): word_list = " ".join(word_list) try: A = parse_dfa(student_answer) except RuntimeError as e: return {'correct': False, 'feedback': str(e)} A_words = generate_language(A, length) words = parse_word_list(word_list) feedback = compare_languages(A_words, words) if len(feedback) == 0: return {'correct': True} else: return {'correct': False, 'feedback': " / ".join(feedback)}
def fsm_accepts(student_answer, word_list): try: A = parse_nfa(student_answer) except RuntimeError as e: return {'correct': False, 'feedback': str(e)} word_list = " ".join(word_list) words = parse_word_list(word_list) for word in words: if not nfa_accepts_word(A, word): return { 'correct': False, 'feedback': 'a word was rejected', 'word': word } return {'correct': True, 'feedback': 'correct'}
def regex_rejects(student_answer, word_list): try: A = parse_simple_regexp(student_answer) except RuntimeError as e: return {'correct': False, 'feedback': str(e)} word_list = " ".join(word_list) words = parse_word_list(word_list) for word in words: if regexp_accepts_word(A, word): return { 'correct': False, 'feedback': 'a word was accepted', 'word': word } return {'correct': True, 'feedback': 'correct'}