c向我的编辑器添加自动建议

时间:2014-01-21 17:06:08

标签: c++ c

我正在编写自己的c / c ++编辑器,现在我已经完成了在写作时想要添加自动建议的所有内容,为此我需要解析当前文件中包含的标题并组织他们进入JSON结构,我正在寻找能给我带来最佳性能的设计,但我几乎没有这方面的经验,所以这就是我开始它的方式,假设我有这个简单的c程序

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

我有一个名为document的类,它有3个数组:

  1. 包含每个标头的所有名称,其内容会发生变化 基于我的inculde声明,所以对于上面的文档,其内容是

    “标准输入输出”    “STDLIB”    “SCOKET”

  2. 保存从第一个数组中列出的JSON文件中获取的所有建议并组织它们,并识别函数参数的类型,以及每个建议的注释等。
  3. 保存匹配建议,并根据最新情况不断变化 被打字。
  4. 正如我所说,我没有经验,我没有读过他们是如何做到的,但除了JSON部分之外,他们是如何向IDE添加自动建议的?

    我也很感激一些提示可以帮助我改进这个设计甚至废弃它。

    ps:如果有人想知道为什么JSON,因为我要制作它的在线版本!

1 个答案:

答案 0 :(得分:1)

步骤1. A)编写一个符合C的解析器,能够导航CPP(不是C ++,CPP)预处理器操作符的迷宫。

OR

步骤1. B)利用现有的,符合标准的C编译器为您进行解析,可能通过以下方式:

步骤2.确定编辑器中点(光标位置)的当前上下文的内容; e.g。

  • 是用户希望输入一般术语吗?
  • 他们是取消引用指向结构或对象的指针,还是使用.运算符对一个,并且需要一个成员(方法,字段)名称?
  • 它们是否在新语句的开头,可能正在输入变量或函数的类型名称?
  • 他们调用具有已知参数列表的函数,并且您知道它们提供了第(n)个参数,因此参数必须是类型(T),那么它们必须输入文字值或类型表达式(T)

这部分你可能会使用一些语法提示而不需要调用一个完整的编译器,并且可能有点命中。

步骤3.查找该点范围内的所有定义,并满足用户可能希望进入该类型的类型要求。此列表可能包括头文件,当前文件中的值或函数/方法中的本地范围内的值。

步骤4.当用户开始输入时,将选择范围缩小到仅满足2中确定的类型的选项,该类型以字母中已输入的字母开头(尽管您可能想要折叠大小写,即make它不区分大小写,并且可能忽略_下划线,因为它们在不同的库之间不一致地使用等等)


步骤1. C)在项目中的文件集合中构建所有“看到的单词”的哈希表(可能是大小写折叠和_ - 删除),并简单地将该列表提取到那些开头的单词到目前为止输入的字母,无论其类型如何。

信不信由你,我对C代码的相对罕见的尝试,我大多不打扰在Emacs中启用上面的完整堆栈(1B-4),我只是使用dabbrev-expand选项(M-/)在这里的工作方式与(1C)类似,而且通常对结果感到满意。如果您正在编写专门用于处理C和C ++代码的编辑器,那么您可能希望尝试更多类似于(1B-4)的内容,我期待。