Commit d330782a authored by Vladimír Štill's avatar Vladimír Štill
Browse files

evalweb: Avoid error 500 for automata with unreachable states, #16

parent a3712875
Pipeline #122021 passed with stage
in 1 minute and 27 seconds
......@@ -116,6 +116,7 @@ def compare() -> str:
alphabets=checker.alphabets,
extra_word_ce=extra_word_ce,
missing_word_ce=missing_word_ce,
is_task_valid=checker.is_task_valid,
is_task=checker.is_task,
img_src=checker.img_src,
langs=checker.languages,
......@@ -175,7 +176,7 @@ def convert() -> str:
return render_template('convert.html', error=ex, **convert_args)
student = Language(string=student_string, task=student_type)
is_task = student.gen_is_task(task=task)
is_task_valid, is_task = student.gen_is_task(task=task)
return render_template('result_convert.html', compare=False,
student_string=student_string,
......@@ -184,6 +185,7 @@ def convert() -> str:
raw_in_type=student_type,
raw_out_type=task,
output=output,
is_task_valid=is_task_valid,
is_task=is_task)
if request.method == 'POST' and 'example_button' in request.form:
......
{% if is_task_valid %}
<h4>Vygenerovaný řetězec pro odpovědník</h4>
<details>
<summary>zobrazit/skrýt</summary>
......@@ -6,3 +7,7 @@ Zkonstruujte {{student_type_string|default(task)}}…
:e1a___
:e1a="d:?{{is_task}}"</pre>
</details>
{% else %}
<h4>Chyba při generování řetězce pro odpovědník</h4>
{{is_task}}
{% endif %}
......@@ -2,7 +2,7 @@ from lib import reg, parser
from lib.parser import ParsingError
from lib.checker import transform, dfa_transform, nfa_transform, check_task, \
check_alphabets
from typing import List, Optional
from typing import List, Optional, Tuple
from enum import Enum
import enum
......@@ -42,11 +42,14 @@ class Language: # contains information about formalism and its language
self.sizename = name[size.name]
self.dfa = dfa
def gen_is_task(self, task: str) -> str:
def gen_is_task(self, task: str) -> Tuple[bool, str]:
teacher = "NFA" if self.task == "EFA" else self.task
assert self.dfa is not None
dfa = parser.dfa_to_str(self.dfa.canonize())
return f"{teacher}-{task}:{dfa}"
try:
dfa = parser.dfa_to_str(self.dfa.canonize())
return True, f"{teacher}-{task}:{dfa}"
except Exception as ex:
return False, str(ex.args[0])
class CompositeException(Exception):
......@@ -64,7 +67,8 @@ class WebChecker:
self.eq: Optional[reg.IsEquivalentResult] = None
self.teacher: Optional[Language] = None
self.student: Optional[Language] = None
self.is_task: Optional[str] = None
self.is_task_valid = False
self.is_task: str = "No output!"
self.img_src: Optional[str] = None
self.languages: List[Optional[Language]] = [None, None, None, None]
......@@ -88,7 +92,7 @@ class WebChecker:
self.teacher = teacher
self.student = student
self.is_task = teacher.gen_is_task(task=self.task)
self.is_task_valid, self.is_task = teacher.gen_is_task(task=self.task)
if isinstance(student_solution, reg.DFA) \
or isinstance(student_solution, reg.NFA):
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment