Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

В компьютерном распознавании языков 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

Ссылки [ править ]

  1. ^ Инструменты обработки языка SML / NJ: Руководство пользователя
  2. ^ https://soft-gems.net/the-antlr4-c-runtime-reached-home
  3. ^ a b "antlr4 / LICENSE.txt" . GitHub . 2017-03-30.
  4. ^ Парр, Теренс (2004-02-05). «лицензионный материал» . antlr-Interest (Список рассылки). Архивировано из оригинала на 2011-07-18 . Проверено 15 декабря 2009 .
  5. ^ "Документация ANTLR 4" . GitHub . 2017-03-30.
  6. ^ http://antlreclipse.sourceforge.net
  7. ^ http://antlrv3ide.sourceforge.net
  8. ^ В чем разница между ANTLR 3 и 4
  9. ^ http://www.antlr.org/tools.html
  10. ^ https://marketplace.visualstudio.com/items?itemName=SamHarwell.ANTLRLanguageSupport
  11. ^ http://docs.groovy-lang.org/2.4.0/html/api/org/codehaus/groovy/antlr/parser/GroovyRecognizer.html
  12. ^ https://hg.python.org/jython/rev/31d97f0de5fe
  13. ^ Эберсол, Стив (2018-12-06). «Выпущен Hibernate ORM 6.0.0.Alpha1» . В отношении к, блог команды Hibernate обо всех данных . Проверено 11 июля 2020 .
  14. ^ https://openjdk.java.net/projects/compiler-grammar/
  15. ^ Грамматики, написанные для 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?
  • АНТЛР Студия