Пользовательская система IntelliSense - PullRequest
0 голосов
/ 12 ноября 2018

Для личного проекта я с нетерпением жду создания собственной системы IntelliSense, рассматриваемый проект представляет собой простой редактор кода.

С какими проблемами я столкнулся, это аспект редактора IntelliSense и, в частности, выделение кода.Как система узнает, какие слова являются ключевыми словами?

Решение добавляет их вручную, но это не означает, что для сторонних библиотек это не будет работать, так как программа не имеет функций из этой библиотеки или API?

Короче говоря, каксоздана логика подсветки кода IntelliSense, и есть ли какой-нибудь архив в Интернете, где я могу получить ключевые слова языка?Имейте в виду, что я хочу создать этот редактор кода как многоязычный (поддерживает много языков).

1 Ответ

0 голосов
/ 12 ноября 2018

Создание достойной поддержки даже для одного нетривиального языка - большая работа.Подумайте об использовании библиотеки, которая сделает это за вас.Большинство из них не будут бесплатными, но, вероятно, это правильный путь, если только целью этого упражнения не является изучение теории компилятора.

Примером такой библиотеки является компилятор Microsoft C # (Roslyn).Он доступен как бесплатная библиотека с открытым исходным кодом, которую вы можете использовать в других приложениях .NET.Вы даете ему некоторый код в качестве ввода (в виде строки), и он говорит вам все, что нужно знать об этом куске кода: где находятся символы и ключевые слова, что представляет собой каждый символ, что предложить для автозаполнения, в какой момент, где компилироватьошибки в коде и т. д.

Если вы хотите научиться создавать что-то подобное самостоятельно, я предлагаю взять книгу по теории компиляторов и выделить несколько месяцев.Хотя это не ракетостроение, это тоже не тривиально.

Как только вы освоите лексеры и парсеры, вы, вероятно, захотите использовать генератор парсеров / лексеров, такой как Antlr, для утомительной работы по созданию лексера и парсера.После этого у вас все еще остается много работы для обработки синтаксического дерева, которое дает вам анализатор.Если вы создаете автозаполнение (intellisense), имейте в виду, что, пока пользователь печатает, код, который он печатает, вероятно, недействителен, что может привести к отключению синтаксического анализатора и появлению неправильных предложений автозаполнения.Как я уже сказал, чтобы сделать это правильно, нужно много работы.

Тем не менее, если подсветка синтаксиса - это все, что вам нужно, вы, вероятно, можете использовать редактор, в котором она уже есть.В зависимости от используемой вами технологии, вы можете использовать Scintilla или AvalonEdit .Вы не получите intellisense (автозаполнение), подсветку ошибок или любые другие функции, которые зависят от понимания смысла кода (семантический анализ), но вы можете получить полуприличную подсветку синтаксиса.

...