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

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

Спасибо!

Ответы [ 3 ]

4 голосов
/ 14 июля 2016

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

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

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

  • Автоматически Восстановление после ошибок / отказоустойчивость , поскольку редакторы и IDE должны иметь возможность обрабатывать «наиболее допустимые» входы.
  • Каждое правило грамматики может использоваться в качестве начального правила, так как редактор / IDE может захотеть реализовать только инкрементальный анализ по соображениям производительности.
3 голосов
/ 25 августа 2011

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

1 голос
/ 07 октября 2011

Это сложно.Я сам делаю то же самое.

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

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

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

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

...