我正在使用ANTLR4来解析我的Netbeans平台应用程序中的代码。我已经使用ANTLR4和Netbeans机制成功实现了语法高亮。
我还为我的两个令牌实现了一个简单的代码完成。目前我正在使用教程中的一个简单实现,该教程搜索空白并从那里开始完成过程。这有效,但它认为用户在开始代码完成之前为空格添加前缀。
我的问题:是否有可能或甚至考虑使用ANTLR的词法分析器来确定当前从输入中读取哪些令牌以确定正确的完成项目?
我希望每个指针都朝着正确的方向来改善这种行为。
答案 0 :(得分:1)
不是真正的答案,但我没有足够的声誉点来发表评论。
是否可以或甚至考虑使用ANTLR的词法分析器来确定当前从输入中读取哪些令牌以确定正确的完成项目?
看看这里:http://www.antlr3.org/pipermail/antlr-interest/2008-November/031576.html
在这里:https://groups.google.com/forum/#!topic/antlr-discussion/DbJ-2qBmNk0
请记住,第一篇文章是在2008年编写的,当前的antlr v4与当时可用的版本非常不同,这就是为什么Sam对此主题的看法似乎已经发生了变化。
我的个人经历 - 你提出的大部分内容可能都适用于antlr,但你必须非常了解antlr 非常。更直接的选择是使用antlr收集有关上下文的信息,并使用您自己的启发式方法来决定在此上下文中需要显示的内容。
答案 1 :(得分:0)
ANTLRv3语法https://sourceware.org/git/?p=frysk.git;a=blob_plain;f=frysk-core/frysk/expr/CExpr.g;hb=HEAD实现C语言表达式的上下文敏感完成(无宏)。
例如,如果输入字符串:
a_struct->a<tab>
它只会列出&#34; a_struct&#34;的字段。从&#34; a&#34;开始(标签可以,技术上可以是任何字符或标记)。
它使用的技术是:
同样的技术虽然不完全理想,但肯定可以在ANTLRv4中使用。