代码编辑器带有自动补全功能

5

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

className.MethodName(parameterName = 2, ... )

我已经创建了适当的语法以及使用ANTLR工具生成解析器。现在我想为类、方法、变量和参数名称提供自动补全功能。这个列表应该是上下文相关的,例如对于 "class." 应该显示方法,对于 "class.Method(" 应该显示参数。我打算解析文本,并根据光标所在节点显示列表。问题是,对于像 "aaa.bbb(" 这样的不完整代码,解析器会产生错误而不是语法树。您有什么解决这个问题的想法吗? 也许我走错了路,不应该解析代码来显示自动完成?

2个回答

1

你需要解析代码的至少一部分才能知道要显示什么。

你需要一个解析器,它允许解析直到找到错误并稍后继续(甚至只是忽略错误并尝试自行修复以便能够继续解析——但这里变得非常困难),或者你可以访问最后一个节点并使用你的语法和现有的语法树来自动完成它,或者你可以缓存最新的语法树并使用类似正则表达式的东西来查看何时自动完成并使用缓存来查看要自动完成什么。

后面的建议可能更容易,但缺点是在需要完成时缓存可能已过时(即:你可能在文件中创建了一个新类,在该类基础上的所有完成都将在文件没有错误时可用)。

旁注:看到你在进行解析,你可能会对解析表达式语法感兴趣,虽然它们不能完全帮助你解决这个问题。


0

在Mac上使用TextMate或其他平台上的克隆版本如何?我刚刚开始尝试使用它,但它似乎具有非常开放的插件工具集。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接