c добавление автоматических предложений в мой редактор

0

Я пишу свой собственный редактор c/c++, и теперь, когда я делаю все, что я хочу добавить авто предложения, когда я пишу, для этого мне нужно разобрать заголовок, который включен в мой текущий файл, и организовать их в структуру JSON, я ищу дизайн, который дает мне лучшую производительность, но я едва ли имею опыт в этой области, так вот как я начал его, предположим, что у меня была эта простая c-программа

#include<stdio.h>
#include<stdlib.h>
#include<sys/scoket.h>
int main()
{
   return 0;
}

У меня есть класс под названием document и у него есть 3 массива:

  1. содержит все имена каждого включенного заголовка, изменения его содержимого основаны на моих инструкциях inculde, поэтому для вышеуказанного документа его содержимое

    "stdio" "stdlib" "scoket"

  2. содержит все предложения, полученные из файлов JSON, которые перечислены в первом массиве, и организует их, и распознает типы параметров функций, а также комментарий к предложению и т.д.
  3. содержит соответствующие предложения, и он продолжает меняться в зависимости от того, что набирается.

как я уже сказал, у меня нет опыта, и я не читал о том, как они это делают, но, кроме части JSON, это то, как они добавляют автоматическое предложение к среде IDE?

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

ps: если кто-то задается вопросом, почему JSON его, потому что я собираюсь сделать его онлайн-версию!

  • 0
    #include<sys/scoket.h> ? :)
  • 0
    @BЈовић BЈовић просто пример! этот вопрос не имеет ничего общего с сокетами pubs.opengroup.org/onlinepubs/7908799/xns/syssocket.h.html
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Шаг 1. A) Напишите совместимый C-парсер, способный перемещаться по лабиринту операторов препроцессора CPP (не C++, CPP).

ИЛИ

Шаг 1. B) Закрепите существующий, соответствующий C-компилятор для синтаксического анализа для вас, возможно, посредством:

Шаг 2. Определите, каков текущий контекст строки в точке (позиция курсора) в вашем редакторе; например

  • является ли пользователь входить в общий термин?
  • они разыменовывают указатель на структуру или объект или используют . оператор против одного, и нужно имя участника (метод, поле)?
  • они находятся в начале нового оператора и могут вводить имя типа для переменной или функции?
  • они ссылаются на функцию с известным списком параметров, и вы знаете, что они предоставляют параметр (nth), ergo этот параметр должен иметь тип (T), тогда они должны вводить буквальное значение или выражение типа (T)

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

Шаг 3. Найдите все определения, которые находятся в области действия в точке, и выполните требования к типу того, что пользователь может ожидать там. Этот список может включать значения из файлов заголовков, из текущего файла или из локальных областей внутри функции/метода.

Шаг 4. По мере того, как пользователь начинает печатать, сузите выделение только тем, которые соответствуют типу, определенному в 2, который начинается с буквы, уже введенной в слово (хотя вы можете сбросить фразу, т.е. нечувствительны и, возможно, игнорируют _ подчеркивания, поскольку они непоследовательно используются между различными библиотеками и тому подобное)


Шаг 1. C) Создайте хэш-таблицу (возможно, сложение флагов и _ -E) всех "слов, замеченных" в коллекции файлов в проекте, и просто выведите список этих слов, начинающихся с букв, напечатанных так далеко, независимо от типа.

Верьте или нет, потому что для моих относительно редких набегов в C код я больше не беспокоюсь о включении полного пакета (1B-4) выше в Emacs, я просто использую параметр dabbrev-Expand (M-/) который работает как (1C) здесь, и более-часто-чем-не доволен результатами. Если вы пишете редактор специально для обработки кода C и C++, вы, вероятно, захотите попробовать что-то более похожее на (1B-4), я бы ожидал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню