AST позволяет вам отделять синтаксический анализ от других задач компилятора (привязка имени, проверка типов, генерация кода) - он представляет структуру программы более удобно, чем простой текст. Когда вы выполняете связывание, проверку типов или создание кода, тогда вы заботитесь о структуре, а не о текстовом макете программы.
Для действительно простого языка можно было бы сделать все возможное в действиях синтаксического анализатора (у ссылки на ANTLR есть пример), но для нетривиальных языков программирования AST - путь.
(Вам необязательно использовать деревья ANTLR и древовидные грамматики, в действиях правил, которые вы можете создавать, и свои собственные структуры данных)
Если вы парень из Java, то этот урок о Java AST в Eclipse может быть интересным:
http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html