我需要为自己的简单语言创建一个代码编辑器:
className.MethodName(parameterName = 2,...)
我已经使用ANTLR工具创建了合适的语法和自动生成解析器。现在我想对类,方法,变量和参数名称进行自动完成。该列表应该依赖于上下文,例如。上课。”它应该显示方法和“class.Method(” - 参数。我将解析文本并根据光标所在的节点显示列表。问题是对于不完整的代码,如“aaa.bbb”(“解析器生成错误而不是语法树。 知道如何解决这个问题吗? 也许我的方法不对,我不应该解析代码来显示自动完成?
答案 0 :(得分:1)
您需要至少解析代码的某些部分才能知道要显示的内容。
你需要一个允许解析的解析器,直到它找到错误并从那里继续(或者甚至只是忽略它并尝试自己修复它以便能够继续解析 - 但这里很难,所以你可以访问最后一个节点并使用您的语法和现有语法树自动完成它,或者您缓存最新的语法树并使用正则表达式来查看何时自动完成并使用缓存来查看自动完成的内容。
后面的建议可能更简单,但缺点是在您需要完成时缓存可能是最新的(即:您可能在文件中创建一个新类,所有完成基于此在文件没有错误之前,类将不可用。)
Sidenode:看到你进行解析,你可能会对Parsing Expression Grammars感兴趣,但是他们并没有完全帮助你解决这个问题。
答案 1 :(得分:0)
Mac上的TextMate或其他平台上的克隆怎么样?我刚刚开始使用它,但它似乎有一个非常开放的插件工具集。