Jetbrains имеет открытый исходный код низкоуровневого языкового инструментария под названием Nitra, который включает в себя язык для описания грамматик и инструмент сборки для их компиляции.
В сообщении в блоге, посвященном Nitra еще в ноябре 2013 года, Хади Харири объяснил, что это не просто еще один генератор синтаксического анализатора, и привел пример его способности расширять C# с помощью нового оператора .? :
В то время Нитра уже находилась в стадии разработки более года. Теперь его команда, возглавляемая Владом Чистяковым, решила, что, хотя он «все еще находится в стадии разработки», он обеспечивает «минимальный жизнеспособный набор функций, а также хорошую архитектурную базу для будущего развития», и его исходный код был доступен на GitHub, выпущенном под упрощенной лицензией BSD.
Его описание на GitHub говорит нам:
Нитра-это языковой верстак. Вы можете использовать Nitra для создания или расширения языка программирования общего назначения или доменного языка (DSL). В настоящее время Nitra позволяет создавать динамически расширяющиеся парсеры. В будущем Nitra позволит создать полную поддержку языков программирования: компиляторы, поддержка IDE.
В своем блоге, анонсирующем его открытый источник, Мэтт Эллис дает более полное определение:
Nitra-это язык для описания грамматик и абстрактных синтаксических деревьев для их представления, а также инструмент сборки для компиляции грамматик в синтаксические анализаторы и создания классов, необходимых для представления и навигации по AST. И это также набор языковых служб, которые используют грамматику для обеспечения автоматической подсветки синтаксиса, выделения контуров и сопоставления скобок.
Создание синтаксических анализаторов и AST (абстрактных синтаксических деревьев) — это то, в чем JetBrains уже очень хорош, но, как объясняет Эллис, убрав часть работы, Нитра позволит компании
«поддержка большего количества языков, более быстрая и сосредоточенная на более высоких уровнях в стеке языковых инструментов, таких как анализ и быстрые исправления».
Он также предупреждает, что если вы хотите использовать Нитру, «ожидайте, что вы испачкаете руки», и перечисляет следующее в качестве того, что она в настоящее время поддерживает:
Грамматики для определения синтаксических анализаторов без лексеров и AST, которые могут быть расширены во время компиляции или во время выполнения, поддерживая состав языков или языков с расширяемым синтаксисом, таких как Nemerle
Инструмент командной строки для компиляции грамматик в сборку, содержащую синтаксический анализатор и классы AST (грамматики также могут быть скомпилированы в Visual Studio)
Приложение для Windows (Nitra.Visualizer.exe) для загрузки и тестирования грамматик
Языковая служба Visual Studio, которая использует Nitra для анализа файлов и обеспечивает автоматическую подсветку синтаксиса, выделение контуров и сопоставление скобок. Текущая работа заключается в том, чтобы увеличить автоматическую поддержку здесь, чтобы включить переход к объявлениям, поиск использования и переименование рефакторингов