Главная
Новости
Статьи
Строительство
Ремонт
Дизайн и интерьер
Строительная теплофизика
Прочность сплавов
Основания и фундаменты
Осадочные породы
Прочность дорог
Минералогия глин
Краны башенные
Справочник токаря
Цементный бетон





















Яндекс.Метрика

ANTLR


ANTLR (от англ. ANother Tool for Language Recognition — «ещё одно средство распознавания языков») — генератор нисходящих анализаторов для формальных языков. ANTLR преобразует контекстно-свободную грамматику в виде РБНФ в программу на C++, Java, C#, JavaScript, Go, Swift, Python. Используется для разработки компиляторов, интерпретаторов и трансляторов.

Преимущества

  • Свободное программное обеспечение.
  • Использование единой нотации для описания лексических и синтаксических анализаторов.
  • Применение нисходящего, а не восходящего анализа.
  • Удобство работы с абстрактным синтаксическим деревом.
  • Предоставление сообщений об ошибках и восстановление после них.
  • Наличие визуальных сред разработки (ANTLR Works, ANTLR Studio, плагинов к Eclipse и IntellliJ IDEA), которые позволяют создавать и отлаживать грамматики, поддерживают подсветку синтаксиса, автодополнение, визуальное отображание грамматик, строящееся в реальном времени по мере ввода, отладчик, рефакторинг.

Применение

ANTLR широко используется в крупных известных продуктах:

  • Реализация языков программирования Groovy, Jython, Processing, Apex
  • Анализ языков запросов в системах баз данных Hibernate HQL, Cassandra, Hive, Pig
  • Анализ языков программирования в средах разработки: NetBeans C++, Oracle SQL Developer IDE, IntelliJ IDEA Clion.

Краткая справка элементов языка

(...) подправило (...)* повторение подправила 0 или более раз (...)+ Повторение подправила 1 или более раз (...)? подправило, может отсутствовать {...} семантические действия (на языке, использующемся в качестве выходного - напр., Java) [...] параметры правила | оператор альтернативы .. оператор диапазона ~ отрицание . любой символ = присваивание : метка начала правила ; метка конца правила

Пример простейшей грамматики

grammar T;//имя грамматики, должно совпадать с названием файла //нетерминальные символы: msg : 'name' ID ';' { System.out.println("Hello, "+$ID.text+"!"); } ; //терминальные символы ID: 'a'..'z' + ;//произвольное ( но >=1) количество букв WS: (' ' |' ' |' ' )+ {$channel=HIDDEN;} ; // пробел, перенос строки, табуляция
Имя:*
E-Mail:
Комментарий: