当我使用antlr4设置语法并生成它时,我在整个解析器中看到以下行
_errHandler.sync(this);
反过来,
getInterpreter()
然后调用它上面的方法。默认情况下,它返回null,因此解析会抛出NPE。
我齐心协力something
围绕着这个
myparser.setInterpreter(new ParserATNSimulator(myparser, myparser.getATN(), mylexer.getInterpreter().decisionToDFA,
new PredictionContextCache()));
但我确定这是错的。奇怪的是我没有看到任何例子解决这个要求,所以我想知道我做错了甚至还需要这样做。
有趣的TestRig工作正常,没有setInterpreter行,这就是我正在做的事情:
PelLexer pl = new PelLexer(CharStreams.fromString(s));
CommonTokenStream tokens = new CommonTokenStream(pl);
SecureRandom r = new SecureRandom();
String clsName = Parser.class.getPackage().getName() + ".eval.Eval" + Math.abs(r.nextLong());
PelParser pp = new PelParser(tokens, clsName);
pp.setBuildParseTree(false);
// pp.setInterpreter(new ParserATNSimulator(pp, pp.getATN(), pl.getInterpreter().decisionToDFA, new PredictionContextCache()));
pp.addErrorListener(new PELErrorListener());
pp.blockStatements();
byte[] clzData = pp.getClassBytes();
PELClassLoader pcl = AccessController.doPrivileged(new PrivilegedAction<PELClassLoader>() {
@Override
public PELClassLoader run() {
return new PELClassLoader(Thread.currentThread().getContextClassLoader());
}
});
pcl.addClass(clsName, clzData);
Class<Evaluable> c = (Class<Evaluable>) pcl.loadClass(clsName);
return c.newInstance();
答案 0 :(得分:0)
这是答案。
当您向解析器添加构造函数时,不要想要调用
<!DOCTYPE html>
<html>
<head>
<title>Image processing</title>
<style type="text/css">
</style>
</head>
<body>
<canvas id="mycanvas" width="100" height="100">
</canvas>
<img src="test1.png" alt="" id="image" style="display: none;" />
<script src="img22.js">
</script>
</body>
</html>
你想打电话
super(tokens);
在解析器中创建的默认构造函数
this(tokens);