首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法解析JavaParser

无法解析JavaParser
EN

Stack Overflow用户
提问于 2020-04-20 23:55:22
回答 1查看 69关注 0票数 1

JavaParser.CallContext和JavaParser.FunctionDeclContext似乎无法解决。这是在权威性的antlr参考文献中的第139页之后建模的。我是不是遗漏了一个自由党?

代码语言:javascript
复制
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.misc.MultiMap;
import org.antlr.v4.runtime.misc.OrderedHashSet;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.ParseTreeWalker;
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.tree.*;
import org.stringtemplate.v4.ST;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Set;



 static class FunctionListener extends JavaBaseListener {
            Graph graph = new Graph();
            String currentFunctionName = null;

            public void enterFunctionDecl(JavaParser.FunctionDeclContext ctx) {
                currentFunctionName = ctx.ID().getText();
                graph.nodes.add(currentFunctionName);
            }

            public void exitCall(JavaParser.CallContext ctx) {
                String funcName = ctx.ID().getText();
                // map current function to the callee
                graph.edge(currentFunctionName, funcName);
            }
        }
EN

回答 1

Stack Overflow用户

发布于 2020-04-21 05:34:37

我想我已经看过这篇文章了,我没有足够的要点来“评论”,但让我先问一个问题;看起来你正在试图生成一个外部版本的AST,在137页上,你拿到了例子,并将它们重命名为你已经生成的语法。我将假设它的其余部分都在工作,否则你会遇到比这个更多的错误!这是我们的目标吗?您只是想要调用方法/类,还是想要完整的同构AST?

这取决于语法入口点。这在书中并不像看起来那么明显。您引用了functionDecl,它看起来像是Cymbol.g4中的一个条目,但在Java.g4中并不存在,所以我建议使用functionDecl而不是JavaParser.FunctionDeclContext它应该拉出正确的方法。我也要承认,我不知道exitCall会映射到什么。我自己也可以用到照明。

你是想要整个AST,还是只想要调用图?如果是整个测试,我认为您也可以使用enterEveryRule或ExitEveryRule,但确认会更好。

因此,首先重新生成您的语法,更改您的程序以引用.g4文件中的规则入口点,然后看看是否一切正常。

谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61326718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档