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




27.03.2023


25.03.2023


24.03.2023


23.03.2023


23.03.2023


23.03.2023


23.03.2023





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

ANTLR

10.03.2023


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:
Комментарий: