ANTLR против Happy против других генераторов парсеров

Я хочу написать переводчик между двумя языками, и после некоторого чтения в Интернете я решил использовать ANTLR. Пришлось изучать его с нуля, но, если не считать проблем с устранением левой рекурсии, до сих пор все шло нормально.

Однако сегодня какой-то парень посоветовал мне проверить Happy, генератор синтаксических анализаторов на основе Haskell. У меня нет знаний Haskell, поэтому я мог бы воспользоваться некоторыми советами, действительно ли Happy лучше, чем ANTLR, и стоит ли его изучать.

В частности, меня беспокоит то, что мой переводчик должен поддерживать замену макросов, что я пока не знаю, как это сделать в ANTLR. Может в Хэппи это сделать проще?

Или, если вы считаете, что другие генераторы парсеров еще лучше, я был бы рад услышать о них.


person Gabriel    schedule 01.09.2009    source источник
comment
Если вы можете сказать, самая полезная информация, которую вы могли бы предоставить прямо сейчас, — это ответ на вопрос «Каковы исходный и целевой языки?».   -  person Sam Harwell    schedule 03.09.2009
comment
@ 280Z28 Это собственные языки. Они чем-то похожи на Java, с той разницей, что класс может содержать определения макросов, а затем внутри методов макросы нужно расширять.   -  person Gabriel    schedule 04.09.2009
comment
Тем временем я понял, что моя проблема проще, чем я думал. У меня получилось сделать это с ANTLR, в лексере, так что не надо сейчас срочно учить Happy или другой генератор.   -  person Gabriel    schedule 04.09.2009
comment
Что ж, было бы здорово, если бы вы поделились своим решением или хотя бы ссылкой на то, как вы начали использовать лексер для этого.   -  person Engineer    schedule 17.04.2016


Ответы (1)


Люди продолжают верить, что если они просто получат синтаксический анализатор, они сделают это при создании языковых инструментов. Это просто неправильно. Парсеры доставят вас к предгорьям Гималаев, тогда вам нужно серьезно заняться альпинизмом.

Если вам нужна промышленная поддержка для создания языковых переводчиков, см. наш DMS Software Reengineering Toolkit. DMS обеспечивает

  • Лексеры на основе Unicode
  • полные контекстно-свободные синтаксические анализаторы (левая рекурсия? Нет проблем! Произвольный просмотр вперед? Нет проблем. Неоднозначные грамматики? Нет проблем)
  • полный интерфейс для C, C#, COBOL, Java, C++, JavaScript, ... (включая полные препроцессоры для C и C++)
  • автоматическое построение AST
  • поддержка построения таблиц символов с произвольными правилами области видимости
  • оценка грамматики атрибутов для создания анализаторов, использующих древовидную структуру
  • поддержка управления и анализа потока данных (а также реализация этого для полного C, Java и COBOL),
  • преобразование источника в источник с использованием синтаксиса исходного И целевого языка
  • AST для красивой печати исходного кода, для воспроизведения текста на целевом языке

Что касается запроса OP на обработку макросов: наши внешние интерфейсы C, COBOL и C++ обрабатывают соответствующую предварительную обработку языка с помощью а) традиционного метода полного расширения или б) без расширения (где это целесообразно), чтобы обеспечить преобразование самих макросов после синтаксического анализа. . Хотя DMS как основа специально не реализует обработку макросов, она может поддерживать их создание и преобразование.

В качестве примера транслятора, созданного с помощью DMS, см. обсуждение преобразования JOVIAL в C для Бомбардировщик Б-2. Это 100% перевод для > 1 MSLOC кода жесткого реального времени. [Вас может позабавить тот факт, что нам никогда не позволяли увидеть реальную программу в переводе (совершенно секретно).]. И да, у JOVIAL есть препроцессор, и да, мы перевели большинство макросов JOVIAL в эквивалентные версии C.

[Haskell — классный язык программирования, но сам по себе он ничего подобного не делает. Дело не в том, что можно выразить языком. Речь идет о том, чтобы выяснить, какое оборудование требуется для поддержки задачи управления программами, и потратить 100 человеко-лет на его создание.]

person Ira Baxter    schedule 03.09.2009
comment
@Ира Бакстер - это маленький мир, ты в нескольких минутах ходьбы от меня. :о - person Sam Harwell; 03.09.2009
comment
Упс, нажмите кнопку вверх, это отличный комментарий. Тебе выгодна моя икота. Найдите мой адрес электронной почты на моей странице регистрации пользователя и отправьте мне вводную записку; здесь может быть веселая беседа. - person Ira Baxter; 03.09.2009
comment
Это круто. Однако я предполагаю, что вы не можете найти ничего подобного в сообществе с открытым исходным кодом. - person Gabriel; 04.09.2009
comment
Другие системы преобразования программ: TXL бесплатен, но я не думаю, что с открытым исходным кодом. Стратего, вероятно, и то, и другое. Оба имеют довольно сильную технологию синтаксического анализа. Ни один из них напрямую не поддерживает построение таблиц символов, выполнение грамматик атрибутов или анализ управления/потока данных. Не знаю насчёт Юникода. YMMV. - person Ira Baxter; 06.09.2009