В основном вы не можете делать интересные оптимизации на уровне AST, потому что вам нужна информация о том, как данные передаются из одной части программы в другую. Хотя поток данных подразумевается в значении AST, его нелегко определить, проверяя только AST, поэтому люди, строящие компиляторы и оптимизаторы, строят другие представления программ (включая таблицы символов, графики потоков управления, достижения определений, поток данных). формы SSA и т. д.).
Наличие синтаксического анализатора для языка является легкой частью анализа / манипулирования этим языком.
Вам нужны все эти другие вещи, чтобы сделать хорошую работу.
Если у вас есть все эти другие представления, вы можете подумать об оптимизации на уровне AST. Большинство людей, строящих компиляторы, не беспокоятся; они преобразуются в представление потока данных и просто оптимизируют это. Но если вы хотите воспроизвести исходный код с изменениями, вам нужен AST. Вам также понадобится симпатичный принтер, чтобы вы могли восстановить исходный код. Если вы зайдете так далеко, вы в конечном итоге с источником к источнику
система преобразования программ.
DMS Software Reengineering Toolkit - это система, которая преобразует AST, используя все эти другие представления для проведения анализа, необходимого для преобразований.