基于ANTLR的Netbeans代码完成

时间:2016-01-03 10:26:49

标签: java parsing netbeans antlr4 code-completion

我正在尝试使用Netbeans Code Completion,使用ANTLR的Parsing和Lexer API为我的语言自动完成。我已经基于ANTLR语法文件生成了java类,例如ANTLR Parser,Lexer和BaseListener。我的目标是根据当前范围进行自动完成。例如,类范围,方法范围,内部范围等。

  1. 如何根据编辑器中的插入位置确定范围?

  2. 是否有一种机制允许在调用代码完成弹出窗口之前确定当前范围,以根据当前范围准备完成项目?

    public class XxxParser extends Parser {
    
    private Snapshot snapshot;
    private XxxcodeParser xxxcodeParser;
    
    @Override
    public void parse(Snapshot snapshot, Task task, SourceModificationEvent event) {
        this.snapshot = snapshot;
        ANTLRInputStream input = new ANTLRInputStream(snapshot.getText().toString());
        Lexer lexer = new XxxcodeLexer(input);
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        xxxcodeParser = new XxxcodeParser(tokens);
        xxxcodeParser.addParseListener(new XxxcodeBaseListener());
        CompilationUnitContext context = xxxcodeParser.compilationUnit();
    
    }
    

    XxxcodeBaseListener类包含enter和exit方法。当我在编辑器中输入字母时,parse(Snapshot snapshot, Task task, SourceModificationEvent event)方法执行。在解析当前文件时,侦听器会调用不同的进入和退出方法,例如@Override public void enterClassBody( XxxcodeParser.ClassBodyContext ctx) { }@Override public void exitClassBody(XxxcodeParser.ClassBodyContext ctx) { }等。

0 个答案:

没有答案