Эта статья требует дополнительных ссылок для проверки . ( март 2016 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
Автор (ы) оригинала | Теренс Парр и другие |
---|---|
Начальная версия | Февраль 1992 г . |
Стабильный выпуск | 4.8 / 16 января 2020 г . |
Репозиторий | |
Написано в | Ява |
Платформа | Кроссплатформенность |
Лицензия | Лицензия BSD |
Веб-сайт | www |
В компьютерном распознавании языков 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 , [1] текущая версия в настоящее время предназначена только для Java, C #, C ++, [2] JavaScript, Python, Swift иИди . Язык указывается с использованием контекстно-свободной грамматики, выраженной с помощью расширенной формы Бэкуса – Наура (EBNF). [ необходима цитата ]
ANTLR может генерировать лексер , парсер , дерево парсер , и комбинированные Лексер-парсер . Синтаксические анализаторы могут автоматически генерировать деревья синтаксического анализа или абстрактные синтаксические деревья , которые могут обрабатываться с помощью анализаторов деревьев. ANTLR предоставляет единую согласованную нотацию для определения лексеров, парсеров и парсеров деревьев.
По умолчанию ANTLR считывает грамматику и генерирует распознаватель для языка, определенного грамматикой (т. Е. Программу, которая считывает входной поток и генерирует ошибку, если входной поток не соответствует синтаксису, указанному в грамматике). Если синтаксических ошибок нет, действие по умолчанию - просто выйти без печати какого-либо сообщения. Чтобы сделать что-то полезное с языком, действия могут быть прикреплены к элементам грамматики в грамматике. Эти действия написаны на языке программирования, на котором создается распознаватель. Когда распознаватель создается, действия встраиваются в исходный код распознавателя в соответствующих точках. Действия могут использоваться для построения и проверки таблиц символов и для выдачи инструкций на целевом языке в случае компилятора. [цитата необходима ]
Помимо лексеров и парсеров, ANTLR может использоваться для генерации парсеров дерева. Это распознаватели, которые обрабатывают абстрактные синтаксические деревья, которые могут автоматически генерироваться синтаксическими анализаторами. Эти парсеры деревьев уникальны для ANTLR и помогают обрабатывать абстрактные синтаксические деревья. [ необходима цитата ]
Лицензирование [ править ]
ANTLR 3 [ необходима ссылка ] и ANTLR 4 - бесплатное программное обеспечение , опубликованное в соответствии с лицензией BSD с тремя пунктами . [3] Предыдущие версии были выпущены как общественное достояние . [4] Документация, взятая из книги Парра « Окончательный справочник по ANTLR 4» , включена в лицензированный BSD источник ANTLR 4. [3] [5]
Для среды разработки Eclipse были разработаны различные плагины для поддержки грамматики ANTLR, включая ANTLR Studio , проприетарный продукт , а также плагины «ANTLR 2» [6] и «ANTLR 3» [7] для Eclipse, размещенные на SourceForge . [ необходима цитата ]
ANTLR 4 [ править ]
ANTLR 4 правильно работает с прямой левой рекурсией , но не с левой рекурсией в целом, то есть с правилами грамматики x, которые относятся к y, которые относятся к x . [8]
Развитие [ править ]
Как сообщается на странице инструментов [9] проекта ANTLR, плагины, которые включают такие функции, как подсветка синтаксиса, проверка синтаксических ошибок и завершение кода, свободно доступны для наиболее распространенных IDE ( Intellij IDEA, NetBeans , Eclipse, Visual Studio [10 ] и Visual Studio Code ).
Проекты [ править ]
Вот неполный список программного обеспечения, созданного с использованием ANTLR:
- Groovy . [11]
- Jython . [12]
- Гибернация [13]
- OpenJDK Compiler Grammar - экспериментальная версия компилятора javac, основанная на грамматике, написанной в ANTLR. [14]
- Apex , язык программирования Salesforce.com . [ необходима цитата ]
- Оценщик выражений в Numbers , электронной таблице Apple. [ необходима цитата ]
- Язык поисковых запросов Twitter . [ необходима цитата ]
- Сервер Weblogic. [ необходима цитата ]
- Apache Cassandra . [ необходима цитата ]
- Обработка . [ необходима цитата ]
- JabRef . [ необходима цитата ]
- Presto (механизм запросов SQL)
- MySQL Workbench
Более 200 грамматик, реализованных в ANTLR 4, доступны на Github . [15] Они варьируются от грамматик для URL до грамматик для целых языков, таких как C, Java и Go.
Пример [ править ]
В следующем примере синтаксический анализатор в ANTLR описывает сумму выражений, которую можно увидеть в форме «1 + 2 + 3»:
// Общие параметры, например, целевой язык опции { language = "CSharp"; } // За ним следует парсер class SumParser расширяет Parser; опции { k = 1 ; // Взгляд вперед в парсере: 1 токен } // Определение выражения инструкция : INTEGER ( PLUS ^ INTEGER ) * ; // Вот лексер class SumLexer расширяет Lexer; опции { k = 1 ; // Lexer Lookahead: 1 символ } ПЛЮС : '+' ; ЦИФРА : ( '0' .. '9' ) ; ЦЕЛОЕ : ( ЦИФРА ) + ;
Следующий листинг демонстрирует вызов парсера в программе:
Читатель TextReader ; // (...) Заполните TextReader символом SumLexer lexer = new SumLexer ( reader ); SumParser парсер = новый SumParser ( лексический анализатор ); парсер . заявление ();
См. Также [ править ]
- Коко / Р
- Набор инструментов для реинжиниринга программного обеспечения DMS
- JavaCC
- Модульный формализм определения синтаксиса
- Пропаренный (Java)
- Анализ грамматики выражений
- SableCC
Ссылки [ править ]
- ^ Инструменты обработки языка SML / NJ: Руководство пользователя
- ^ https://soft-gems.net/the-antlr4-c-runtime-reached-home
- ^ a b "antlr4 / LICENSE.txt" . GitHub . 2017-03-30.
- ^ Парр, Теренс (2004-02-05). «лицензионный материал» . antlr-Interest (Список рассылки). Архивировано из оригинала на 2011-07-18 . Проверено 15 декабря 2009 .
- ^ "Документация ANTLR 4" . GitHub . 2017-03-30.
- ^ http://antlreclipse.sourceforge.net
- ^ http://antlrv3ide.sourceforge.net
- ^ В чем разница между ANTLR 3 и 4
- ^ http://www.antlr.org/tools.html
- ^ https://marketplace.visualstudio.com/items?itemName=SamHarwell.ANTLRLanguageSupport
- ^ http://docs.groovy-lang.org/2.4.0/html/api/org/codehaus/groovy/antlr/parser/GroovyRecognizer.html
- ^ https://hg.python.org/jython/rev/31d97f0de5fe
- ^ Эберсол, Стив (2018-12-06). «Выпущен Hibernate ORM 6.0.0.Alpha1» . В отношении к, блог команды Hibernate обо всех данных . Проверено 11 июля 2020 .
- ^ https://openjdk.java.net/projects/compiler-grammar/
- ^ Грамматики, написанные для ANTLR v4; ожидание, что грамматики свободны от действий .: antlr / grammars-v4 , Antlr Project, 2019-09-25 , получено 2019-09-25
Библиография [ править ]
- Парр, Теренс (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 ANTLR 4 Reference (1-е изд.), Pragmatic Bookshelf , стр. 328, ISBN 978-1-93435-699-9
Дальнейшее чтение [ править ]
- Парр, 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 .
Внешние ссылки [ править ]
- Официальный сайт
- Учебное пособие по ANTLR (мега)
- Зачем использовать ANTLR?
- АНТЛР Студия