ANTLR (от англ. ANother Tool for Language Recognition — «ещё одно средство распознавания языков») — генератор нисходящих анализаторов для формальных языков. ANTLR преобразует контекстно-свободную грамматику в виде РБНФ в программу на C++, Java, C#, JavaScript, Go, Swift, Python[1]. Используется для разработки компиляторов, интерпретаторов и трансляторов.
ANTLR | |
---|---|
Тип | Компилятор компиляторов |
Авторы | Терренс Парр и другие |
Разработчик | Terence Parr[вд] |
Написана на | Java |
Первый выпуск | февраль 1992 |
Аппаратная платформа | Кроссплатформенное программное обеспечение |
Последняя версия | 4.13.1 (4 сентября 2023) |
Репозиторий | github.com/antlr/antlr4 |
Состояние | в разработке |
Лицензия | BSD |
Сайт | antlr.org |
Преимущества
править- Свободное программное обеспечение.
- Использование единой нотации для описания лексических и синтаксических анализаторов.
- Применение нисходящего, а не восходящего анализа.
- Удобство работы с абстрактным синтаксическим деревом.
- Предоставление сообщений об ошибках и восстановление после них.
- Наличие визуальных сред разработки (ANTLR Works, ANTLR Studio, плагинов к Eclipse и IntellliJ IDEA), которые позволяют создавать и отлаживать грамматики, поддерживают подсветку синтаксиса, автодополнение, визуальное отображание грамматик, строящееся в реальном времени по мере ввода, отладчик, рефакторинг.
Применение
правитьANTLR широко используется в крупных известных продуктах:
- Реализация языков программирования Groovy, Jython, Processing, Apex
- Анализ языков запросов в системах баз данных Hibernate HQL, Cassandra, Hive, Pig
- Анализ языков программирования в средах разработки: NetBeans C++, Oracle SQL Developer IDE, IntelliJ IDEA Clion.
Краткая справка элементов языка
править(...) подправило
(...)* повторение подправила 0 или более раз
(...)+ Повторение подправила 1 или более раз
(...)? подправило, может отсутствовать
{...} семантические действия (на языке, использующемся в качестве выходного - напр., Java)
[...] параметры правила
| оператор альтернативы
.. оператор диапазона
~ отрицание
. любой символ
= присваивание
: метка начала правила
; метка конца правила
Пример простейшей грамматики
правитьgrammar T;//имя грамматики, должно совпадать с названием файла
//нетерминальные символы:
msg : 'name' ID ';'
{
System.out.println("Hello, "+$ID.text+"!");
} ;
//терминальные символы
ID: 'a'..'z' + ;//произвольное ( но >=1) количество букв
WS: (' ' |'\n' |'\r' )+ {$channel=HIDDEN;} ; // пробел, перенос строки, табуляция
См. также
правитьПримечания
править- ↑ Таблица поддерживаемых языков . Дата обращения: 15 июня 2018. Архивировано из оригинала 29 июля 2018 года.
Литература
править- The Definitive ANTLR Reference: Building Domain-Specific Languages, ISBN 978-0-9787392-5-6 by Terence Parr. Pragmatic Bookshelf, 2007
Ссылки
правитьЭто заготовка статьи о программном обеспечении. Помогите Википедии, дополнив её. |