ANTLR - ANTLR

ANTLR
Автор (ы) оригинала Теренс Парр и другие
Первый выпуск Февраль 1992 г . ; 29 лет назад ( 1992-02 )
Стабильный выпуск
4.9.2 / 11 марта 2021 г . ; 7 месяцев назад ( 2021-03-11 )
Репозиторий
Написано в Джава
Платформа Кроссплатформенность
Лицензия Лицензия BSD
Веб-сайт www .antlr .org

В компьютерном распознавании языков ANTLR (произносится как « рог» ) или еще один инструмент для распознавания языков - это генератор синтаксического анализатора, который использует 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 , включена в лицензированный BSD источник ANTLR 4.

Для среды разработки Eclipse были разработаны различные плагины для поддержки грамматики ANTLR, включая ANTLR Studio , проприетарный продукт , а также плагины «ANTLR 2» и «ANTLR 3» для Eclipse, размещенные на SourceForge .

ANTLR 4

ANTLR 4 правильно работает с прямой левой рекурсией , но не с левой рекурсией в целом, то есть с грамматическими правилами x, которые относятся к y, которые относятся к x .

Разработка

Как сообщается на странице инструментов проекта ANTLR, подключаемые модули, которые включают такие функции, как подсветка синтаксиса, проверка синтаксических ошибок и завершение кода, свободно доступны для наиболее распространенных IDE ( Intellij IDEA, NetBeans , Eclipse, Visual Studio и Visual Studio Code ). .

Проекты

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

Более 200 грамматик, реализованных в ANTLR 4, доступны на GitHub . Они варьируются от грамматик для 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();

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

использованная литература

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

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

  • Парр, TJ; Quong, RW (июль 1995 г.). «ANTLR: Генератор синтаксического анализатора Predicated-LL (k)». Программное обеспечение: практика и опыт . 25 (7): 789–810. CiteSeerX  10.1.1.54.6015 . DOI : 10.1002 / spe.4380250705 . S2CID  13453016 .

внешние ссылки