在Netbeans平台中使用ANTLR4 lexing进行代码完成

时间:2015-01-20 10:05:42

标签: antlr antlr4 lexer netbeans-platform

我正在使用ANTLR4来解析我的Netbeans平台应用程序中的代码。我已经使用ANTLR4和Netbeans机制成功实现了语法高亮。

我还为我的两个令牌实现了一个简单的代码完成。目前我正在使用教程中的一个简单实现,该教程搜索空白并从那里开始完成过程。这有效,但它认为用户在开始代码完成之前为空格添加前缀。

我的问题:是否有可能或甚至考虑使用ANTLR的词法分析器来确定当前从输入中读取哪些令牌以确定正确的完成项目?

我希望每个指针都朝着正确的方向来改善这种行为。

2 个答案:

答案 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;开始(标签可以,技术上可以是任何字符或标记)。

它使用的技术是:

  • 修改C语法以识别IDENT和IDENT_TAB令牌
  • 用于IDENT_TAB捕获部分表达式AST和&#34; TOKEN_TAB&#34;把它们扔回主要的&#39; (有一些黑客可以帮助捕获AST)
  • &#39;主&#39;然后对部分表达式执行type-eval(计算表达式的类型而不是值)并使用它来扩展TOKEN_TAB

同样的技术虽然不完全理想,但肯定可以在ANTLRv4中使用。