Лучший способ представления языковых токенов для сценария автодополнения

Как некоторые из вас знают, я разрабатываю свою собственную IDE. Вы можете подумать: «О нет, еще один?!» - не беспокойтесь, вас никто не заставляет ею пользоваться, и я сомневаюсь, что она все равно будет серьезно опубликована.

Итак, перейдем к главному вопросу. Я пытаюсь внедрить систему автозаполнения. Точный пользовательский интерфейс не является проблемой. Однако моей основной проблемой является гибкое хранение токенов языка/библиотеки.

Допустим, мы предлагаем пользователю CSS-селекторы ИЛИ атрибуты. У нас было бы что-то вроде:

- css/core
  - a                      // anchor tag
  - etc                    // all valid html tags
  - .stuff                 // class name parsed from user project
  - ?etc                   // more stuff parsed from user project (ids, classes...)
- css/properties
  - border                 // regular css properties - we also need to associate
                           //  and  value tokens
  - etc                    // the rest of them
- css/values/border-style  // property value tokens
  - solid
  - dotted
- css/values/color
  - red
  - green
  - fucshia

Таким образом, каждый токен получает пространство имен, чтобы мы могли отслеживать между токенами. Как и в случае с BNF, некоторые значения токенов состоят из подтокенов, например граница и цвет.

1. Не забывайте, что нам нужно хранить все, что может относиться к языкам с экзотическим синтаксисом. 2.Кроме того, важно отметить, что мне нужно будет каким-то образом объединить приведенную выше информацию с контекстно-зависимой, такой как список имен классов, собранный из файлов проекта. Это должно быть быстро и эффективно, без дублирования токенов и т. д.

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

Я не уверен, что этот вопрос лучше подходит, например, программистам, поэтому я оставлю это на усмотрение модов.

5
задан Community 12 April 2017 в 07:31
поделиться