Существуют ли какие-либо фреймворки javascript для синтаксического анализа/автоматического заполнения языка, специфичного для предметной области?

У меня есть грамматика для доменного языка, и мне нужно создать редактор кода javascript для этого языка. Существуют ли какие-либо инструменты, которые позволили бы мне создать а) инкрементный синтаксический анализатор javascript б) механизм автозаполнения/автоматического предложения javascript?

Спасибо!


person franck102    schedule 24.02.2011    source источник


Ответы (3)


Пример реализации помощника по содержимому (автозаполнение) с помощью Chevrotain DSL синтаксического анализа Javascript:

https://github.com/SAP/chevrotain/tree/master/examples/parser/content_assist

Chevrotain был разработан специально для создания синтаксических анализаторов, используемых (как часть) инструментов языковых служб в редакторах/IDE. Некоторые из соответствующих функций:

  • Автоматическое восстановление ошибок/отказоустойчивость, поскольку редакторы и IDE должны иметь возможность обрабатывать «в основном допустимые» входные данные.
  • Каждое правило грамматики может использоваться в качестве начального правила, поскольку редактор/IDE может захотеть реализовать добавочный синтаксический анализ только из соображений производительности.
person bd82    schedule 13.07.2016
comment
Парсинг (даже с исправлением ошибок) необходим, но едва ли достаточен. Следовательно, фреймворков синтаксического анализа никогда не бывает достаточно для решения проблемы. См. Жизнь после синтаксического анализа: semanticdesigns.com/Products/DMS/LifeAfterParsing.html - person Ira Baxter; 14.07.2016
comment
Анализатор в приведенном примере собирает синтаксическую информацию и контекст для дальнейшей обработки на отдельном этапе. Помощь семантического содержания выполняется отдельно от синтаксического анализа. Библиотек/фреймворков синтаксического анализа действительно недостаточно для создания языковых сервисов для редакторов/IDE. Я отредактирую свой пост, чтобы было понятнее. Chevrotain был разработан как часть цепочки инструментов для редакторов. и не является полным решением. - person bd82; 14.07.2016

Вам может понадобиться jison, генератор синтаксического анализатора js. Что касается автозаполнения/автоматического предложения... я знаю, что большинство вещей там больше основано на завершении слов, а не на завершении кода. Но когда у вас запущен синтаксический анализатор, я не думаю, что эта часть слишком сложна.

person ysaw    schedule 25.08.2011
comment
Не могли бы вы подсказать, как можно обеспечить контекстно-зависимое завершение слов с помощью jison? Например, SQL: CREATE (ctrl+space) должен показать TABLE и так далее. - person Narendra Pathai; 29.04.2014

Это сложно. Я сам занимаюсь тем же.

Один из подходов:

Вам нужен синтаксический анализатор, который предоставит вам массив возможных в настоящее время AST для текста до токена перед текущей позицией курсора.

Оттуда вы можете увидеть, что следующий токен может быть нескольких типов (обычно только один), и выполнить завершение на основе частичного текста.

Если я когда-нибудь заработаю свой инкрементный парсер, я пришлю ссылку.

Удачи, и дайте мне знать, если вы найдете пакет, который делает это.

Крис.

person fadedbee    schedule 07.10.2011