Я не могу много сказать о ANTLR, но, возможно, немного информации о SableCC.
Дизайн
Он генерирует синтаксический анализатор, в котором сгенерированный код и рукописный код четко разделены с использованием шаблона Visitor, и интегрирует преобразование из дерева конкретного синтаксиса в абстрактный синтаксисДерево.В результате конструктор может получить AST после того, как синтаксический анализатор успешно проанализирует ввод, и он может пройтись по дереву и выполнить действие на соответствующих узлах.
Дизайнер может сначала написать и отладить свою грамматику, попытаться оптимизироватьпреобразование из конкретного синтаксического дерева в абстрактное синтаксическое дерево.После того, как у него есть твердый AST, он может написать код действия в отдельном классе.Таким образом, разработчик пишет грамматику только один раз и может написать несколько типов действий для грамматики, например один раз для подсветки синтаксиса, один раз для семантического анализа и генератора кода.Я сделал это в продуктивной системе.Это работает очень хорошо.
С помощью ANTLR разработчик может построить дерево AST, добавив код действия в грамматику, чтобы сгенерировать AST, а затем повторно использовать его для других целей.Но нет четкого разделения между сгенерированным кодом и рукописным кодом.
Другим аспектом может быть поддержка IDE.Поскольку в SableCC вы разделили код, вы можете легко использовать функцию автозаполнения IDE.
грамматика
SableCC - это генератор синтаксического анализатора LR (1), поэтомуIMO проще написать грамматику для ANTLR, который является генератором синтаксического анализатора LL (k) (без уловки).Я думаю (aber не уверен) SableCC - единственный генератор Lava (1) java-парсера, который так популярен.
парсер вывода
ANTLR может генерировать парсер вмного языков, в то время как SableCC может генерировать синтаксический анализатор только в Java (основной поток).Есть некоторый плагин / адаптер для генерации парсера на другом языке, однако, по словам автора (http://www.mare.ee/indrek/sablecc/) они слишком старые. SableCC 4 может генерировать больше, но он находится в бета-версии, что не рекомендуется для серьезных проектов.
Поддержка разработки
ANTLR - это среда разработки для написания грамматики. Это ANTLRWorks, которая может визуально отображать грамматику, перемещаться по источнику (как переход к определению токена или продукции). SableCC: неттакие инструменты. Есть примитивный скрипт Syntax Highlight для VIM и плохой плагин для функций Netbeans.
Заключение
IMO Я думаю, что для большого проекта требуется долгосрочное обслуживание SableCCболее подходит, чем ANTLR.
У Мартина Фаулера есть информация о SableCC, вы можете найти его здесь. http://martinfowler.com/bliki/HelloSablecc.html