Что лучше, ANTLR или JavaCC? [закрытый]

Существует еще один способ использования Spring-управляемых компонентов в JSF-управляемых компонентах, просто расширяя ваш JSF-компонент из SpringBeanAutowiringSupport, а Spring будет обрабатывать инъекцию зависимостей.

@ManagedBean // JSF-managed.
@ViewScoped // JSF-managed scope.
public class GoodBean extends SpringBeanAutowiringSupport {

    @Autowired
    private SpringBeanClass springBeanName; // No setter required.

    // springBeanName is now available.
}
44
задан EBGreen 20 December 2008 в 07:13
поделиться

7 ответов

В первом приближении, что действительно будет иметь значение для Вас, на практике, насколько удобный и интуитивный нотация к Вашим глазам.

Однако я сделал проекты с ANTLR и JavaCC, и нашел, что ANTLR был ужасно тяжел для большинства вещей.

8
ответ дан Charlie Martin 4 August 2019 в 17:17
поделиться

ANTLR более полно показан: это намного больше компилятор компилятора поля - lexing, парсинг, AST, древовидные преобразования и генерация кода.

Для JavaCC, это - намного больше Парсер-генератор, чем компилятор компилятора. Поддержка AST оказывается через другой lib под названием JJTree.

10
ответ дан jamesh 4 August 2019 в 17:17
поделиться

Я не использовал парсеры-генераторы в некоторое время, но несколько лет назад, когда я интересовался ими, я не забываю любить SableCC лучше всего. Это реализовало некоторые интересные идеи относительно объектно-ориентированного поколения синтаксического анализатора, которое может или не могло быть взято альтернативами.

2
ответ дан Suppressingfire 4 August 2019 в 17:17
поделиться

Второй джамеш выше.

ANTLR имеет более широкие возможности: это гораздо больше компилятора из коробки компилятор - лексирование, парсинг, AST, дерево преобразования и генерация кода.

Для JavaCC это больше синтаксический анализатор генератор, чем компилятор компилятора. Поддержка AST осуществляется через другая библиотека под названием JJTree.

По моему личному опыту, вы можете делать гораздо больше с ANTLR, включая передачу параметра между правилами и через все подправила, что очень помогает при создании сложного парсера, такого как парсер для С #. Кроме того, переписывание правила - тоже классика. Это поможет вам легко отформатировать идеальный AST.

Однако он действительно тяжелый. Для простого проекта вы, вероятно, никогда не воспользуетесь этими функциями. Javacc для этого круче.

4
ответ дан 26 November 2019 в 21:21
поделиться

Конкретное преимущество ANTLR перед JavaCC заключается в том, что он имеет генераторы для языков, отличных от Java. Это может значительно упростить перенос вашего языка в другие места.

6
ответ дан 26 November 2019 в 21:21
поделиться

Есть пара альтернатив, которые вы не должны исключать:

  • JPARSEC - это каркас комбинатора парсера, которая позволяет строить Ваш парсор целиком от кода.
  • Framework Combistarator Parser Scala рассматривает аналогичную проблему; Однако синтаксис Scala делает все это гораздо более читаемое.
  • Тогда есть также система комбинатора парсеров, сделанная Джоном Метскером, для его книги Строительные анализаторы с Java ; Я точно не помню, где есть библиотека, но она по крайней мере плавала в Интернете в прошлом. Это касается того же озабоченности: вы не определяете определения вашей грамматики и токена в отдельном файле не-Java; Вместо этого это все Java.
  • Крепость, язык программирования Солнце работает в течение многих лет, кажется, построен на этот инструментарий: Крыс . У меня нет много информации, но я считаю, что если они используют его для своего нового языка программирования, он, вероятно, имеет некоторые интересные функции.

В целом, я создаю впечатление, что годы генераторов кода закончились. Если бы я был бы тобой, я бы использовал инструментарий комбинатора парсера Scala. В основном, любая IDE поддерживает SCALA, также «поддерживает» этот комбинатор парсера. Производительность хорошая, афайк.

Кстати, ANTLR имеет вполне достойную поддержку IDE, как плагин Eclipse (но, возможно, есть также что-то в Intellij - я не помню.) Итак, если вы решите классический подход определения вашего лексического анализатора и Парсер за пределами вашего языка, то antlr должен быть вашим выбором, я думаю. Он имеет самую большую раскладку среди разработчиков Java, есть поддержка инструментов, и у автора Antlr есть отличная книга. Я не думаю, что какая-либо из других наборов инструментов может утверждать, что.

28
ответ дан 26 November 2019 в 21:21
поделиться

Что касается проблем, которые вы упомянули, я бы предположил, что Javacc был лучшим выбором. Для разработчика Java быстрее учиться (синтаксис чрезвычайно похоже на обычную Java), документация всеобъемлющая, а интеграция Eclipse адекватна.

11
ответ дан 26 November 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: