Оригинальный автор (-ы) | Теренс Парр и другие |
---|---|
Первоначальный выпуск | февраля 1992 г.; 28 лет назад (1992-02) |
Стабильный выпуск | 4.8 / 16 января 2020 г.; 9 месяцев назад (2020-01-16) |
Репозиторий | |
Написано на | Java |
Platform | Cross -платформа |
Лицензия | Лицензия BSD |
Веб-сайт | www |
При компьютерном распознавании языков ANTLR(произносится antler ), или Другой инструмент для распознавания языков, представляет собой генератор парсера , который использует LL (*) для синтаксического анализа. ANTLR является преемником Purdue Compiler Construction Tool Set(PCCTS), впервые разработанного в 1989 году и активно развивающегося. Его сопровождающим является профессор Теренс Парр из Университета Сан-Франциско.
ANTLR принимает в качестве входных данных грамматика, которая определяет язык и генерирует в качестве вывода исходный код для распознавателя этого языка. В то время как Версия 3 поддерживала создание кода на языках программирования Ada95, ActionScript, C, C#, Java, JavaScript, Objective-C, Perl, Python, Ruby и Standard ML, текущий выпуск в настоящее время нацелен только на Java, C #, C ++ , JavaScript, Python, Swift и Go. Язык указывается с использованием контекстно-свободной грамматики, выраженной с помощью расширенной формы Бэкуса – Наура (EBNF).
ANTLR может генерировать лексеры, парсеры и вместе взятые. Синтаксические анализаторы могут автоматически генерировать деревья синтаксического анализа или абстрактные синтаксические деревья, которые могут быть в дальнейшем обработаны синтаксическими анализаторами деревьев. ANTLR предоставляет единую согласованную нотацию для определения лексеров, парсеров и парсеров деревьев.
По умолчанию ANTLR считывает грамматику и генерирует распознаватель для языка, определенного грамматикой (т. Е. Программу, которая считывает входной поток и генерирует ошибку, если входной поток не соответствует синтаксису, указанному в грамматика). Если синтаксических ошибок нет, действие по умолчанию - просто выйти без печати какого-либо сообщения. Чтобы сделать что-то полезное с языком, действия могут быть прикреплены к элементам грамматики в грамматике. Эти действия написаны на языке программирования, на котором создается распознаватель. Когда распознаватель создается, действия встраиваются в исходный код распознавателя в соответствующих точках. Действия могут использоваться для построения и проверки таблиц символов и для выдачи инструкций на целевом языке в случае компилятора.
Помимо лексеров и парсеров, ANTLR может использоваться для генерации парсеров дерева. Это распознаватели, обрабатывающие абстрактные синтаксические деревья, которые могут автоматически генерироваться синтаксическими анализаторами. Эти парсеры деревьев уникальны для ANTLR и помогают обрабатывать абстрактные синтаксические деревья.
ANTLR 3 и ANTLR 4 - это бесплатное программное обеспечение, опубликованное в соответствии с тремя пунктами Лицензия BSD. Предыдущие версии были выпущены как общественное достояние. Документация, взятая из книги Парра The Definitive ANTLR 4 Reference, включена в исходный код ANTLR 4 под лицензией BSD.
Для среды разработки Eclipse были разработаны различные плагины для поддержки грамматики ANTLR , включая ANTLR Studio, проприетарный продукт, а также плагины «ANTLR 2» и «ANTLR 3» для Eclipse, размещенные на SourceForge.
ANTLR 4 правильно работает с прямой левой рекурсией, но не с левой рекурсией в целом, т. Е. С грамматическими правилами x, которые относятся к y, которые относятся к x.
Как сообщается на странице инструментов проекта ANTLR, плагины, которые включают такие функции, как подсветка синтаксиса, проверка синтаксических ошибок и завершение кода, свободно доступны для наиболее распространенных IDE (Intellij IDEA, NetBeans, Eclipse, Visual Studio и код Visual Studio ).
Вот неполный список программного обеспечения, созданного с использованием ANTLR:
Более 200 грамматик, реализованных в ANTLR 4, доступны на Github. Они варьируются от грамматик для URL до грамматик для целых языков, таких как C, Java и Go.
В следующем примере синтаксический анализатор в ANTLR описывает сумму выражений, которую можно увидеть в форме «1 + 2 + 3»:
// Общие параметры, например, параметры целевого языка {language = "CSharp"; } // За ним следует класс парсера SumParser extends Parser; варианты {k = 1; // Parser Lookahead: 1 Token} // Определение выражения выражения: INTEGER (PLUS ^ INTEGER) *; // Вот класс Lexer SumLexer extends Lexer; варианты {k = 1; // Lexer Lookahead: 1 символ} PLUS: '+'; ЦИФРА: ('0'.. '9'); ЦЕЛОЕ: (ЦИФРА) +;
Следующий листинг демонстрирует вызов анализатора в программе:
Читатель TextReader; // (...) Заполните TextReader символом SumLexer lexer = new SumLexer (reader); Парсер SumParser = новый SumParser (лексер); parser.statement ();