74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
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")
|