ANTLR - ANTLR
Эта статья нужны дополнительные цитаты для проверка.Март 2016 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
Оригинальный автор (ы) | Теренс Парр и другие |
---|---|
изначальный выпуск | Февраль 1992 г. |
Стабильный выпуск | 4.8 / 16 января 2020 |
Репозиторий | |
Написано в | Ява |
Платформа | Кроссплатформенность |
Лицензия | Лицензия BSD |
Интернет сайт | www |
В компьютерном распознавании языков ANTLR (произносится рог ), или же Другой инструмент для распознавания языков, это генератор парсеров который использует LL (*) для разбора. ANTLR является преемником Набор инструментов для построения компилятора Purdue (PCCTS), впервые разработанная в 1989 году и активно развивающаяся. Сопровождающий - профессор. Теренс Парр из Университет Сан-Франциско.[нужна цитата ]
использование
ANTLR принимает в качестве входных данных грамматика который указывает язык и генерирует как вывод исходный код для распознаватель этого языка. Хотя версия 3 поддерживала генерацию кода в языки программирования Ada95, ActionScript, C, C #, Ява, JavaScript, Цель-C, Perl, Python, Рубин, и Стандартный ML,[1] текущий выпуск в настоящее время нацелен только на Java, C #, C ++,[2] JavaScript, Python, Быстрый, и Идти. Язык указывается с помощью контекстно-свободная грамматика выражено с использованием Расширенная форма Бэкуса – Наура (EBNF).[нужна цитата ]
ANTLR может генерировать лексеры, парсеры, парсеры деревьев, и в сочетании лексические парсеры. Парсеры могут автоматически генерировать разбирать деревья или же абстрактные синтаксические деревья, которые можно обработать с помощью парсеров дерева. ANTLR предоставляет единую согласованную нотацию для определения лексеров, парсеров и парсеров деревьев.
По умолчанию ANTLR считывает грамматику и генерирует распознаватель для языка, определенного грамматикой (т. Е. Программу, которая считывает входной поток и генерирует ошибку, если входной поток не соответствует синтаксису, указанному в грамматике). Если синтаксических ошибок нет, действие по умолчанию - просто выйти без печати какого-либо сообщения. Чтобы сделать что-то полезное с языком, действия могут быть прикреплены к элементам грамматики в грамматике. Эти действия написаны на языке программирования, на котором создается распознаватель. Когда распознаватель создается, действия встраиваются в исходный код распознавателя в соответствующих точках. Действия могут использоваться для построения и проверки таблиц символов и для выдачи инструкций на целевом языке в случае компилятора.[нужна цитата ]
Помимо лексеров и парсеров, ANTLR может использоваться для генерации парсеров деревьев. Это распознаватели, которые обрабатывают абстрактные синтаксические деревья, которые могут автоматически генерироваться синтаксическими анализаторами. Эти парсеры деревьев уникальны для ANTLR и помогают обрабатывать абстрактные синтаксические деревья.[нужна цитата ]
Лицензирование
ANTLR 3[нужна цитата ] и ANTLR 4 являются бесплатно программное обеспечение, опубликовано с тремя пунктами Лицензия BSD.[3] Предыдущие версии были выпущены как программное обеспечение общественного достояния.[4] Документация, взятая из книги Парра Окончательный справочник по ANTLR 4, включен в лицензированный BSD источник ANTLR 4.[3][5]
Были разработаны различные плагины для Среда разработки Eclipse для поддержки грамматики ANTLR, включая ANTLR Studio, а запатентованный продукт, а также «АНТЛР 2»[6] и "ANTLR 3"[7] плагины для Eclipse, размещенные на SourceForge.[нужна цитата ]
ANTLR 4
ANTLR 4 имеет дело с прямым левая рекурсия правильно, но не с левой рекурсией в целом, т.е. с правилами грамматики Икс которые относятся к у которые относятся к Икс.[8]
Разработка
Как сообщается об инструментах[9] на странице проекта ANTLR плагины, которые включают такие функции, как подсветка синтаксиса, проверка синтаксических ошибок и завершение кода, свободно доступны для наиболее распространенных IDE (Intellij ИДЕЯ, NetBeans, Затмение, Visual Studio[10] и Код Visual Studio ).
Проекты
Вот неполный список программного обеспечения, созданного с использованием ANTLR:
- Groovy.[11]
- Jython.[12]
- Спящий режим[13]
- OpenJDK Compiler Grammar project экспериментальная версия javac компилятор, основанный на грамматике, написанной в ANTLR.[14]
- Апекс, Salesforce.com язык программирования.[нужна цитата ]
- Оценщик выражений в Числа, Электронная таблица Apple.[нужна цитата ]
- Twitter язык поискового запроса.[нужна цитата ]
- Сервер Weblogic.[нужна цитата ]
- Apache Cassandra.[нужна цитата ]
- Обработка.[нужна цитата ]
- JabRef.[нужна цитата ]
- Presto (механизм запросов SQL)
- MySQL Workbench
Более 200 грамматик, реализованных в ANTLR 4, доступны на Github.[15] Они варьируются от грамматики до URL к грамматикам для целых языков, таких как C, Java и Go.
Пример
В следующем примере синтаксический анализатор в ANTLR описывает сумму выражений, которую можно увидеть в форме «1 + 2 + 3»:
// Общие параметры, например, целевой языкопции{язык=«CSharp»;}// За ним следует парсер учебный классSumParserрасширяетПарсер;опции{k=1;// Взгляд вперед в парсере: 1 токен}// Определение выраженияутверждение:ЦЕЛОЕ(PLUS^ЦЕЛОЕ)*;// Вот лексеручебный классSumLexerрасширяетЛексер;опции{k=1;// Lexer Lookahead: 1 символ}PLUS:'+';ЦИФРА:('0'..'9');ЦЕЛОЕ:(ЦИФРА)+;
Следующий листинг демонстрирует вызов парсера в программе:
TextReader читатель; // (...) Заполняем TextReader символом SumLexer лексер = новый SumLexer(читатель); SumParser парсер = новый SumParser(лексер); парсер.утверждение();
Смотрите также
- Коко / Р
- Набор инструментов для реинжиниринга программного обеспечения DMS
- JavaCC
- Модульный формализм определения синтаксиса
- Пропаренный (Java)
- Разбор грамматики выражений
- SableCC
Рекомендации
- ^ Инструменты обработки языков SML / NJ: Руководство пользователя
- ^ https://soft-gems.net/the-antlr4-c-runtime-reached-home
- ^ а б "antlr4 / LICENSE.txt". GitHub. 2017-03-30.
- ^ Парр, Теренс (2004-02-05). "лицензионный материал". антлр-интерес (Список рассылки). Архивировано из оригинал на 2011-07-18. Получено 2009-12-15.
- ^ «Документация по 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 обо всех данных. Получено 2020-07-11.
- ^ https://openjdk.java.net/projects/compiler-grammar/
- ^ Грамматики, написанные для ANTLR v4; ожидание, что грамматики свободны от действий .: antlr / grammars-v4, Antlr Project, 2019-09-25, получено 2019-09-25
Библиография
- Парр, Теренс (17 мая 2007 г.), Окончательный справочник по Antlr: создание доменно-ориентированных языков (1-е изд.), Прагматическая книжная полка, п. 376, г. ISBN 978-0-9787392-5-6
- Парр, Теренс (декабрь 2009 г.), Шаблоны языковой реализации: создавайте свои собственные предметно-ориентированные и общие языки программирования (1-е изд.), Прагматическая книжная полка, п. 374, г. ISBN 978-1-934356-45-6
- Парр, Теренс (15 января 2013 г.), Окончательный справочник по ANTLR 4 (1-е изд.), Прагматическая книжная полка, п. 328, ISBN 978-1-93435-699-9
дальнейшее чтение
- Парр, T.J .; Куонг, Р.В. (июль 1995 г.). «ANTLR: Генератор синтаксического анализатора Predicated-LL (k)». Программное обеспечение: практика и опыт. 25 (7): 789–810. CiteSeerX 10.1.1.54.6015. Дои:10.1002 / spe.4380250705.