АНТЛР
Эта статья нуждается в дополнительных цитатах для проверки . ( март 2016 г. ) |
Оригинальный автор(ы) | Теренс Парр и другие |
---|---|
Первоначальный выпуск | 10 апреля 1992 г |
Стабильная версия | 4.13.1
/ 4 сентября 2023 г |
Репозиторий | |
Написано в | Ява |
Платформа | Кросс-платформенный |
Лицензия | Лицензия БСД |
Веб-сайт | www |
В компьютерном распознавании языка ANTLR (произносится как рог ) или ANother Tool for Language Recognition — это генератор синтаксического анализатора , использующий для анализа алгоритм LL(*) . ANTLR является преемником набора инструментов Purdue Compiler Construction Tool Set ( PCCTS ), впервые разработанного в 1989 году и находящегося в стадии активной разработки. Его сопровождающим является профессор Теренс Парр из Университета Сан-Франциско . [ нужна ссылка ]
PCCTS 1.00 был анонсирован 10 апреля 1992 года. [1] [2]
Использование
[ редактировать ]ANTLR принимает на вход грамматику , которая определяет язык, и генерирует на выходе исходный код для распознавателя этого языка. Хотя версия 3 поддерживала генерацию кода на языках программирования Ada95 , Экшнскрипт , С , С# , Ява , JavaScript , Цель-С , Перл , Питон , Ruby и Standard ML , [3] Версия 4 в настоящее время нацелена С#, С++, Дарт , [4] [5] Ява, JavaScript, Идти , PHP , Питон (2 и 3), и Свифт .
Язык определяется с использованием контекстно-свободной грамматики , выраженной с использованием расширенной формы Бэкуса-Наура (EBNF). [ нужна ссылка ] [6] ANTLR может генерировать лексеры , парсеры , парсеры деревьев и комбинированные лексеры-парсеры . Синтаксические анализаторы могут автоматически генерировать деревья синтаксического анализа или деревья абстрактного синтаксиса , которые могут быть дополнительно обработаны с помощью анализаторов деревьев. ANTLR предоставляет единую согласованную нотацию для определения лексеров, анализаторов и анализаторов деревьев.
По умолчанию ANTLR читает грамматику и генерирует распознаватель для языка, определенного грамматикой (т. е. программу, которая считывает входной поток и генерирует ошибку, если входной поток не соответствует синтаксису, указанному грамматикой). Если синтаксических ошибок нет, действие по умолчанию — просто выйти без вывода какого-либо сообщения. Чтобы сделать что-то полезное с языком, к элементам грамматики можно прикрепить действия. Эти действия написаны на языке программирования, на котором генерируется распознаватель. При генерации распознавательного процесса действия встраиваются в исходный код распознавательного устройства в соответствующих точках. В случае компилятора действия можно использовать для построения и проверки таблиц символов, а также для выдачи инструкций на целевом языке. [ нужна ссылка ] [6]
Помимо лексеров и парсеров, ANTLR можно использовать для создания парсеров деревьев. Это распознаватели, обрабатывающие абстрактные синтаксические деревья, которые могут автоматически генерироваться парсерами. Эти парсеры деревьев уникальны для ANTLR и помогают обрабатывать абстрактные синтаксические деревья. [ нужна ссылка ] [6]
Лицензирование
[ редактировать ]АНТЛР 3 [ нужна ссылка ] и ANTLR 4 — свободное программное обеспечение из трех пунктов , опубликованное под лицензией BSD . [7] Предыдущие версии были выпущены как общедоступное программное обеспечение . [8] Документация, взятая из книги Парра The Definitive ANTLR 4 Reference , включена в исходный код ANTLR 4 под лицензией BSD. [7] [9]
были разработаны различные плагины Для среды разработки Eclipse для поддержки грамматики ANTLR, включая ANTLR Studio , собственный продукт а также «ANTLR 2». [10] и «АНТЛР 3» [11] плагины для Eclipse, размещенные на SourceForge . [ нужна ссылка ]
АНТЛР 4
[ редактировать ]ANTLR 4 корректно работает с прямой левой рекурсией , но не с левой рекурсией в целом, т. е. грамматическими правилами x , которые ссылаются на y , которые ссылаются на x . [12]
Разработка
[ редактировать ]Как сообщается об инструментах [13] На странице проекта ANTLR плагины, которые включают такие функции, как подсветка синтаксиса, проверка синтаксических ошибок и завершение кода, свободно доступны для наиболее распространенных IDE ( Intellij IDEA, NetBeans , Eclipse , Visual Studio). [14] и код Visual Studio ).
Проекты
[ редактировать ]Программное обеспечение, созданное с использованием ANTLR, включает в себя:
- Круто . [15]
- Джитон . [16]
- Спящий режим [17]
- Проект OpenJDK Compiler Grammar — экспериментальная версия компилятора javac , основанная на грамматике, написанной на ANTLR. [18]
- Apex — . язык программирования Salesforce.com [ нужна ссылка ]
- Оценщик выражений в Numbers , электронной таблице Apple. [ нужна ссылка ]
- Twitter . Язык поисковых запросов [ нужна ссылка ]
- Веблогический сервер. [ нужна ссылка ]
- Апач Кассандра . [ нужна ссылка ]
- Обработка . [ нужна ссылка ]
- ДжабРеф . [ нужна ссылка ]
- Trino (система запросов SQL)
- Престо (система запросов SQL)
- MySQL рабочая среда
доступно более 200 грамматик, реализованных в ANTLR 4 На GitHub . [19] Они варьируются от грамматик для URL-адресов до грамматик для целых языков, таких как C, Java и Go.
Пример
[ редактировать ]В следующем примере парсер в ANTLR описывает сумму выражений, которую можно увидеть в виде «1+2+3»:
// Common options, for example, the target language
options
{
language = "CSharp";
}
// Followed by the parser
class SumParser extends Parser;
options
{
k = 1; // Parser Lookahead: 1 Token
}
// Definition of an expression
statement: INTEGER (PLUS^ INTEGER)*;
// Here is the Lexer
class SumLexer extends Lexer;
options
{
k = 1; // Lexer Lookahead: 1 characters
}
PLUS: '+';
DIGIT: ('0'..'9');
INTEGER: (DIGIT)+;
Следующий листинг демонстрирует вызов синтаксического анализатора в программе:
TextReader reader;
// (...) Fill TextReader with character
SumLexer lexer = new SumLexer(reader);
SumParser parser = new SumParser(lexer);
parser.statement();
См. также
[ редактировать ]- Коко/Р
- Набор инструментов для реинжиниринга программного обеспечения DMS
- JavaCC
- Модульный формализм определения синтаксиса
- Пропаренный (Ява)
- Разбор грамматики выражений
- СобольCC
Ссылки
[ редактировать ]- ^ «Comp.compilers: доступен набор инструментов Purdue Compiler-Construction Tool 1.00» . compilers.iecc.com . 10 апреля 1992 года . Проверено 5 мая 2023 г.
- ^ «Comp.compilers: Еще о PCCTS» . compilers.iecc.com . 30 апреля 1992 года . Проверено 5 мая 2023 г.
- ^ Инструменты обработки языка SML/NJ: Руководство пользователя
- ^ «Библиотеки времени выполнения и цели генерации кода» . гитхаб . 6 января 2022 г.
- ^ «Среда выполнения ANTLR4 C++ добралась до дома — Soft Gems» .
- ^ Jump up to: а б с Парр, Теренс (15 января 2013 г.). Полный справочник по ANTLR 4 . Прагматичная книжная полка. ISBN 978-1-68050-500-9 .
- ^ Jump up to: а б "antlr4/ЛИЦЕНЗИЯ.txt" . Гитхаб . 2017-03-30.
- ^ Парр, Теренс (5 февраля 2004 г.). «лицензионные штучки» . antlr-interest (список рассылки). Архивировано из оригинала 18 июля 2011 г. Проверено 15 декабря 2009 г.
- ^ «Документация ANTLR 4» . Гитхаб . 2017-03-30.
- ^ «Плагин ANTLR для Eclipse» .
- ^ «ANTLR IDE. Плагин eclipse для грамматик ANTLR» .
- ^ В чем разница между ANTLR 3 и 4
- ^ «Инструменты разработки ANTLR» .
- ^ «Поддержка языка ANTLR — Visual Studio Marketplace» .
- ^ «GroovyRecouncer (Groovy 2.4.0)» .
- ^ «Джитон: 31d97f0de5fe» .
- ^ Эберсоул, Стив (6 декабря 2018 г.). «Выпущена Hibernate ORM 6.0.0.Alpha1» . В отношении блога команды Hibernate, посвященного всем данным . Проверено 11 июля 2020 г.
- ^ «OpenJDK: Грамматика компилятора» .
- ^ Грамматики написаны для ANTLR v4; ожидание, что грамматики свободны от действий.: antlr/grammars-v4 , Antlr Project, 25 сентября 2019 г. , получено 25 сентября 2019 г.
Библиография
[ редактировать ]- Парр, Теренс (17 мая 2007 г.), Полный справочник по Antlr: Создание предметно-ориентированных языков (1-е изд.), Pragmatic Bookshelf , стр. 376, ISBN 978-0-9787392-5-6
- Парр, Теренс (декабрь 2009 г.), Шаблоны реализации языков: создайте свои собственные языки программирования, специфичные для конкретной предметной области, и общие языки программирования (1-е изд.), Pragmatic Bookshelf , стр. 374, ISBN 978-1-934356-45-6
- Парр, Теренс (15 января 2013 г.), The Definitive Reference ANTLR 4 (1-е изд.), Pragmatic Bookshelf , стр. 328, ISBN 978-1-93435-699-9
Дальнейшее чтение
[ редактировать ]- Парр, Ти Джей; Куонг, RW (июль 1995 г.). «ANTLR: генератор синтаксического анализатора Predicate-LL (k)». Программное обеспечение: практика и опыт . 25 (7): 789–810. CiteSeerX 10.1.1.54.6015 . дои : 10.1002/спе.4380250705 . S2CID 13453016 .