Files
mathlogic/lab3/programm/main.py

74 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import json
from grammar import Grammar
with open("grammar.txt", "r", encoding="utf-8") as file:
text = file.read()
# text = """
# S -> A b B | d
# A -> C A b | B
# B -> c S d | epsilon
# C -> a | e d
# """
# text = """
# S -> F | ( S + F )
# F -> 1
# """
grammar = Grammar(text)
print("FIRST sets:", grammar.first_sets)
print("FOLLOW sets:", grammar.follow_sets)
with open("grammar_rules.txt", "w", encoding="utf-8") as output_file:
output_file.write(grammar.format_rules())
print("Правила грамматики с номерами сохранены в grammar_rules.txt")
with open("grammar_lookup_table.txt", "w", encoding="utf-8") as output_file:
output_file.write(grammar.format_lookup_table())
print("Таблица синтаксического анализа сохранена в grammar_lookup_table.txt")
input_string = "ich las gestern ein alt Buch"
input_string = "der alt Mann las ein Buch"
input_string = "gestern las der alt Mann ein Buch"
print(f"Analyzing input '{input_string}':")
parse_result = grammar.analyze(input_string)
print(f"Applied rules: {parse_result}")
with open("analysis_result.txt", "w", encoding="utf-8") as f:
f.write(f"Input: {input_string}\n")
f.write("Applied rules: ")
f.write(str(parse_result))
f.write("\n\n")
f.write("Derivation steps:\n")
derivation_steps = grammar.generate_derivation_steps(parse_result)
for step in derivation_steps:
f.write(f"{step}\n")
print("Результат анализа сохранен в analysis_result.txt")
# Тестирование функции генерации строк
print("\nГенерация строк по грамматике:")
for i in range(5):
terminals, rules = grammar.generate()
generated_string = " ".join(terminals)
print(f"Сгенерированная строка {i+1}: {generated_string}")
print(f"Применённые правила: {rules}")
# Запись одной сгенерированной строки в файл
with open("generation_result.txt", "w", encoding="utf-8") as f:
terminals, rules = grammar.generate()
generated_string = " ".join(terminals)
f.write(f"Generated string: {generated_string}\n")
f.write("Applied rules: ")
f.write(str(rules))
f.write("\n\n")
f.write("Derivation steps:\n")
derivation_steps = grammar.generate_derivation_steps(rules)
for step in derivation_steps:
f.write(f"{step}\n")
print("Результат генерации сохранен в generation_result.txt")