ANTLR - Википедия - ANTLR

ANTLR
Оригинальный автор (ы)Теренс Парр и другие
изначальный выпускФевраль 1992 г.; 28 лет назад (1992-02)
Стабильный выпуск
4.8 / 16 января 2020; 11 месяцев назад (2020-01-16)
Репозиторий Отредактируйте это в Викиданных
Написано вЯва
ПлатформаКроссплатформенность
ЛицензияЛицензия BSD
Интернет сайтwww.antlr.org

В компьютерном распознавании языков ANTLR (произносится рог ), или же Другой инструмент для распознавания языков, это генератор парсеров который использует LL (*) для разбора. ANTLR является преемником Набор инструментов для построения компилятора Purdue (PCCTS), впервые разработанная в 1989 году и активно развивающаяся. Сопровождающий - профессор. Теренс Парр из Университет Сан-Франциско.[нужна цитата ]

использование

ANTLR принимает в качестве входных данных грамматика который указывает язык и генерирует как вывод исходный код для распознаватель этого языка. Хотя версия 3 поддерживала генерацию кода в языки программирования Ada95, ActionScript, C, C #, Ява, JavaScript, Цель-C, Perl, Python, Рубин, и Стандартный ML,[1] текущий выпуск в настоящее время нацелен только на Java, C #, C ++,[2] JavaScript, Python, Быстрый, и Идти. Язык указывается с помощью контекстно-свободная грамматика выражено с использованием Расширенная форма Бэкуса – Наура (EBNF).[нужна цитата ]

ANTLR может генерировать лексеры, парсеры, парсеры деревьев, и в сочетании лексические парсеры. Парсеры могут автоматически генерировать разбирать деревья или же абстрактные синтаксические деревья, которые можно обработать с помощью парсеров дерева. ANTLR предоставляет единую согласованную нотацию для определения лексеров, парсеров и парсеров деревьев.

По умолчанию ANTLR считывает грамматику и генерирует распознаватель для языка, определенного грамматикой (т. Е. Программу, которая считывает входной поток и генерирует ошибку, если входной поток не соответствует синтаксису, указанному в грамматике). Если синтаксических ошибок нет, действие по умолчанию - просто выйти без печати какого-либо сообщения. Чтобы сделать что-то полезное с языком, действия могут быть прикреплены к элементам грамматики в грамматике. Эти действия написаны на языке программирования, на котором создается распознаватель. Когда распознаватель создается, действия встраиваются в исходный код распознавателя в соответствующих точках. Действия могут использоваться для построения и проверки таблиц символов и для выдачи инструкций на целевом языке в случае компилятора.[нужна цитата ]

Помимо лексеров и парсеров, ANTLR может использоваться для генерации парсеров деревьев. Это распознаватели, которые обрабатывают абстрактные синтаксические деревья, которые могут автоматически генерироваться синтаксическими анализаторами. Эти парсеры деревьев уникальны для ANTLR и помогают обрабатывать абстрактные синтаксические деревья.[нужна цитата ]

Лицензирование

ANTLR 3[нужна цитата ] и ANTLR 4 являются бесплатно программное обеспечение, опубликовано с тремя пунктами Лицензия BSD.[3] Предыдущие версии были выпущены как программное обеспечение общественного достояния.[4] Документация, взятая из книги Парра Окончательный справочник по ANTLR 4, включен в лицензированный BSD источник ANTLR 4.[3][5]

Были разработаны различные плагины для Среда разработки Eclipse для поддержки грамматики ANTLR, включая ANTLR Studio, а запатентованный продукт, а также «АНТЛР 2»[6] и "ANTLR 3"[7] плагины для Eclipse, размещенные на SourceForge.[нужна цитата ]

ANTLR 4

ANTLR 4 имеет дело с прямым левая рекурсия правильно, но не с левой рекурсией в целом, т.е. с правилами грамматики Икс которые относятся к у которые относятся к Икс.[8]

Разработка

Как сообщается об инструментах[9] на странице проекта ANTLR плагины, которые включают такие функции, как подсветка синтаксиса, проверка синтаксических ошибок и завершение кода, свободно доступны для наиболее распространенных IDE (Intellij ИДЕЯ, NetBeans, Затмение, Visual Studio[10] и Код Visual Studio ).

Проекты

Вот неполный список программного обеспечения, созданного с использованием ANTLR:

Более 200 грамматик, реализованных в ANTLR 4, доступны на Github.[15] Они варьируются от грамматики до URL к грамматикам для целых языков, таких как C, Java и Go.

Пример

В следующем примере синтаксический анализатор в ANTLR описывает сумму выражений, которую можно увидеть в форме «1 + 2 + 3»:

// Общие параметры, например, целевой языкопции{язык=«CSharp»;}// За ним следует парсер учебный классSumParserрасширяетПарсер;опции{k=1;// Взгляд вперед в парсере: 1 токен}// Определение выраженияутверждение:ЦЕЛОЕ(PLUS^ЦЕЛОЕ)*;// Вот лексеручебный классSumLexerрасширяетЛексер;опции{k=1;// Lexer Lookahead: 1 символ}PLUS:'+';ЦИФРА:('0'..'9');ЦЕЛОЕ:(ЦИФРА)+;

Следующий листинг демонстрирует вызов парсера в программе:

 TextReader читатель; // (...) Заполняем TextReader символом SumLexer лексер = новый SumLexer(читатель); SumParser парсер = новый SumParser(лексер); парсер.утверждение();

Смотрите также

Рекомендации

  1. ^ Инструменты обработки языков SML / NJ: Руководство пользователя
  2. ^ https://soft-gems.net/the-antlr4-c-runtime-reached-home
  3. ^ а б "antlr4 / LICENSE.txt". GitHub. 2017-03-30.
  4. ^ Парр, Теренс (2004-02-05). "лицензионный материал". антлр-интерес (Список рассылки). Архивировано из оригинал на 2011-07-18. Получено 2009-12-15.
  5. ^ «Документация по ANTLR 4». GitHub. 2017-03-30.
  6. ^ http://antlreclipse.sourceforge.net
  7. ^ http://antlrv3ide.sourceforge.net
  8. ^ В чем разница между ANTLR 3 и 4
  9. ^ http://www.antlr.org/tools.html
  10. ^ https://marketplace.visualstudio.com/items?itemName=SamHarwell.ANTLRLanguageSupport
  11. ^ http://docs.groovy-lang.org/2.4.0/html/api/org/codehaus/groovy/antlr/parser/GroovyRecognizer.html
  12. ^ https://hg.python.org/jython/rev/31d97f0de5fe
  13. ^ Эберсол, Стив (2018-12-06). "Выпущен Hibernate ORM 6.0.0.Alpha1". В отношении к блогу команды Hibernate обо всех данных. Получено 2020-07-11.
  14. ^ https://openjdk.java.net/projects/compiler-grammar/
  15. ^ Грамматики, написанные для ANTLR v4; ожидание, что грамматики свободны от действий .: antlr / grammars-v4, Antlr Project, 2019-09-25, получено 2019-09-25

Библиография

дальнейшее чтение

  • Парр, T.J .; Куонг, Р.В. (июль 1995 г.). «ANTLR: Генератор синтаксического анализатора Predicated-LL (k)». Программное обеспечение: практика и опыт. 25 (7): 789–810. CiteSeerX  10.1.1.54.6015. Дои:10.1002 / spe.4380250705.

внешняя ссылка