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}") rule_details = {num: rule for rule, num in grammar.rule_numbers.items()} 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") current = grammar.start_symbol f.write(f"{current}\n") for rule_num in parse_result: non_terminal, replacement = rule_details[rule_num] words = current.split() for i, word in enumerate(words): if word == non_terminal: words[i : i + 1] = replacement break current = " ".join(words) f.write(f"{current}\n") print("Результат анализа сохранен в analysis_result.txt")