ANTLR - ANTLR
Автор (ы) оригинала | Теренс Парр и другие |
---|---|
Первый выпуск | Февраль 1992 г . |
Стабильный выпуск | 4.9.2 / 11 марта 2021 г .
|
Репозиторий | |
Написано в | Джава |
Платформа | Кроссплатформенность |
Лицензия | Лицензия 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 , текущая версия в настоящее время предназначена только для 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:
- Groovy .
- Jython .
- Спящий режим
- OpenJDK Compiler Grammar - экспериментальная версия компилятора javac, основанная на грамматике, написанной в ANTLR.
- Apex , язык программирования Salesforce.com .
- Оценщик выражений в Numbers , электронной таблице Apple.
- Язык поисковых запросов Twitter .
- Сервер Weblogic.
- Apache Cassandra .
- Обработка .
- JabRef .
- Trino (механизм запросов SQL)
- Presto (механизм запросов SQL)
- MySQL Workbench
Более 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();
Смотрите также
- Коко / Р
- Набор инструментов для реинжиниринга программного обеспечения DMS
- JavaCC
- Модульный формализм определения синтаксиса
- Пропаренный (Java)
- Анализ грамматики выражений
- SableCC
использованная литература
Библиография
- Парр, Теренс (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 .