代码之家  ›  专栏  ›  技术社区  ›  Andrey

具有自动完成功能的代码编辑器

  •  5
  • Andrey  · 技术社区  · 17 年前

    我需要为自己的简单语言创建一个代码编辑器:

    className.MethodName(parameterName=2,…)

    我已经使用ANTLR工具创建了适当的语法和自动生成解析器。现在我想有一个类,方法,变量和参数名的自动完成。这个列表应该是上下文相关的,例如“类”。它应该显示方法和“类。方法”(—参数)。我要分析文本并根据光标所在的节点显示列表。问题是对于不完整的代码,比如“a a a.bbb”(“解析器产生错误而不是语法树)。 你知道怎么解决这个问题吗?

    2 回复  |  直到 16 年前
        1
  •  1
  •   Marenz    16 年前

    您需要至少解析代码的某些部分,以知道要显示什么。

    您要么需要一个允许解析的解析器,直到它发现一个错误并在以后继续解析(或者甚至忽略它并试图修复它本身以使它能够继续解析,但是在这里变得非常困难,所以您可以访问最后一个节点并使用语法和现有语法树来自动完成它,要么缓存最新的语法树并使用类似regex的东西来查看何时自动完成,并使用缓存来查看要自动完成的内容。

    后面的建议可能更简单,但缺点是在需要完成时缓存可能已过期(即:您可能在文件中创建一个新类,在该文件没有错误之前,基于该类的所有完成都将不可用)。

    Sidenode:看到您进行了解析,您可能会对 Parsing Expression Grammars 不过,他们并不能帮你解决这个问题。

        2
  •  0
  •   kenny    17 年前