Алгебраическое упрощение на абстрактном синтаксическом дереве - PullRequest
0 голосов
/ 20 сентября 2019

Я разработал синтаксический анализатор в C, который способен генерировать AST, но когда я начал внедрять упрощения, он действительно испортился.Я успешно реализовал правила для суммирования ниже:

x + 0 -> x

x + x -> 2 * x

и т. Д.

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

Я прочитал эту ветку , но я действительно запутался в системах переписывания терминов (что это такое на самом деле, как реализовать в C).

Существует ли более общий и эффективный способ упрощения AST?Или как написать систему переписывания терминов в C

...