Предобработка
This commit is contained in:
@@ -286,8 +286,9 @@ class Grammar:
|
|||||||
|
|
||||||
return "\n".join(result)
|
return "\n".join(result)
|
||||||
|
|
||||||
def analyze(self, string: str) -> list[int]:
|
def analyze(self, input_tokens: list[str]) -> list[int]:
|
||||||
input_tokens = string.split() + ["$"]
|
input_tokens = input_tokens.copy()
|
||||||
|
input_tokens += ["$"]
|
||||||
input_pos = 0
|
input_pos = 0
|
||||||
|
|
||||||
# Инициализируем стек с терминальным символом и начальным символом
|
# Инициализируем стек с терминальным символом и начальным символом
|
||||||
|
|||||||
@@ -39,6 +39,11 @@ def load_grammar(filename: str = "grammar.txt") -> Grammar | None:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def tokenize_string(input_string: str) -> list[str]:
|
||||||
|
input_string = input_string.replace(",", " , ").replace(".", " . ")
|
||||||
|
return input_string.split()
|
||||||
|
|
||||||
|
|
||||||
def check_string(grammar: Grammar | None, input_string: str) -> None:
|
def check_string(grammar: Grammar | None, input_string: str) -> None:
|
||||||
if not grammar:
|
if not grammar:
|
||||||
print("Ошибка: Грамматика не загружена")
|
print("Ошибка: Грамматика не загружена")
|
||||||
@@ -46,7 +51,18 @@ def check_string(grammar: Grammar | None, input_string: str) -> None:
|
|||||||
|
|
||||||
print(f"Проверка строки: '{input_string}'")
|
print(f"Проверка строки: '{input_string}'")
|
||||||
try:
|
try:
|
||||||
parse_result = grammar.analyze(input_string)
|
input_tokens = tokenize_string(input_string)
|
||||||
|
|
||||||
|
if not input_tokens:
|
||||||
|
parse_result = grammar.analyze(input_tokens)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
input_tokens[0] = input_tokens[0][0].lower() + input_tokens[0][1:]
|
||||||
|
parse_result = grammar.analyze(input_tokens)
|
||||||
|
except ValueError as e:
|
||||||
|
input_tokens[0] = input_tokens[0][0].upper() + input_tokens[0][1:]
|
||||||
|
parse_result = grammar.analyze(input_tokens)
|
||||||
|
|
||||||
print(f"Результат: Строка соответствует грамматике")
|
print(f"Результат: Строка соответствует грамматике")
|
||||||
print(f"Применённые правила: {parse_result}")
|
print(f"Применённые правила: {parse_result}")
|
||||||
|
|
||||||
@@ -71,7 +87,8 @@ def check_string(grammar: Grammar | None, input_string: str) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def post_process_string(string: str) -> str:
|
def post_process_string(string: str) -> str:
|
||||||
string = string.capitalize()
|
if string:
|
||||||
|
string = string[0].upper() + string[1:]
|
||||||
string = string.replace(" ,", ",")
|
string = string.replace(" ,", ",")
|
||||||
string = string.replace(" .", ".")
|
string = string.replace(" .", ".")
|
||||||
string = string.replace(",.", ".")
|
string = string.replace(",.", ".")
|
||||||
|
|||||||
Reference in New Issue
Block a user