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")