Реализация поведения, подобного IntelliSense, в пользовательских редакторах для предметно-ориентированных языков.

Я создаю DSL с помощью редактора, похожего на шаблон, очень похожего на систему правил в Alice. Пользователи смогут выбирать отношения из списка, а также объекты, к которым нужно применить отношение. Эти два списка должны быть отфильтрованы на основе допустимых типов — например, если отношение «больше чем», то доступные объекты должны относиться к типу, для которого реализовано «больше чем».

Точно так же, если выбран объект, который не сравним с больше чем, то это отношение не должно быть в списке потенциальных отношений. Я думаю, что суть этой проблемы заключается в проверке типов, но я не уверен, как лучше всего включить логику такого типа в мое приложение. Кто-нибудь знает о существующих библиотеках проверки типов для DSL?

Меня особенно интересуют технологии с открытым исходным кодом и кроссплатформенные технологии. Java, вероятно, язык, который мы в конечном итоге будем использовать, но это не исправлено.


person rcreswick    schedule 19.09.2008    source источник
comment
Мне интересно, что с этим случилось? Вы нашли хорошее решение? На мой взгляд, Intellisense было бы чудовищно сложно реализовать с точки зрения удобства использования. Поиск правильного баланса между отзывчивостью и навязчивостью кажется невероятно сложной задачей. По моему опыту, реализация Microsoft намного опережает все остальные. Реализация Eclipse кажется такой неуклюжей. Мне было бы очень интересно узнать, нашли ли вы что-то хорошее.   -  person Alex    schedule 26.10.2009
comment
Это был рабочий проект, и меня уволили для работы над другим проектом, так что мои усилия в этом (вроде как) угасли. Помимо этого, я думаю, что вы (Алекс) и я интересуемся различными аспектами «интеллигенции». Вместо того, чтобы работать над реальным пользовательским интерфейсом, меня больше интересовал дизайн универсальной системы автозаполнения. (Интерфейс появится позже.)   -  person rcreswick    schedule 06.11.2009


Ответы (2)


Вы можете изучить Scintilla. Это компонент редактирования, используемый Notepad++ среди других инструментов. У него есть некоторая поддержка автозаполнения, хотя я сам не пробовал его использовать, поэтому не уверен, насколько хорошо он работает. Это открытый исходный код, поэтому, если он не соответствует вашим потребностям, я думаю, вы можете расширить его без особых хлопот.

person user10340    schedule 19.09.2008

Это может помочь на стороне IntelliSense — CodeTextBox

person benPearce    schedule 19.09.2008