Я разработал синтаксический анализатор в C, который способен генерировать AST, но когда я начал внедрять упрощения, он действительно испортился.Я успешно реализовал правила для суммирования ниже:
x + 0 -> x
x + x -> 2 * x
и т. Д.
Но для этого потребовалось огромное количество усилий и кода.Я выполнил поиск по всему дереву и попытался найти шаблон, который я мог бы использовать (много рекурсии), затем, если был каскад узлов PLUS, я добавил их в список, а затем поработал над этим списком (суммируя числаи объединение переменных и т. д.) затем я создал другое дерево из этого списка и слил его с существующим.Именно эту бумагу я использовал для ее реализации.Вкратце учитывая выражение 2*x+1+1+x+0
я получил 3*x+2
.И это было просто суммирование, которое доставило мне столько неприятностей, что я даже могу представить себе продвинутые вещи.Поэтому я понял, что что-то не так.
Я прочитал эту ветку , но я действительно запутался в системах переписывания терминов (что это такое на самом деле, как реализовать в C).
Существует ли более общий и эффективный способ упрощения AST?Или как написать систему переписывания терминов в C