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)}
Esempio n. 2
0
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'}