5

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

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

我已经使用 ANTLR 工具创建了适当的语法和自动生成解析器。现在我想对类、方法、变量和参数名称进行自动完成。这个列表应该是上下文相关的,fe 代表“类”。它应该显示方法和“class.Method(” - 参数。我要解析文本并根据光标所在的节点显示列表。问题是对于像“aaa.bbb(”)这样的不完整代码解析器产生错误而不是语法树。知道如何解决这个问题吗?也许我走错了路,我不应该解析代码来显示自动完成?

4

2 回答 2

1

您至少需要解析代码的某些部分才能知道要显示的内容。

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

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

Sidenode:看到您进行解析,您可能对Parsing Expression Grammars感兴趣,但它们并不能完全帮助您解决这个问题。

于 2009-11-06T11:47:37.663 回答
0

Mac 上的 TextMate 或其在其他平台上的克隆怎么样?我刚开始使用它,但它似乎有一个非常开放的插件工具集。

于 2008-11-24T14:20:33.077 回答