我已经创建了一个语法并使用IntelliJ生成了相应的JavaScript目标文件。
解析过程似乎工作正常,因为附加的错误监听器导致错误(或没有错误)。
但我无法启动并运行自定义侦听器。我想将语言转换为另一种语言,但忽略了监听器:
var chars = new antlr4.InputStream(this.test);
var lexer = new dnpMDLexer.dnpMDLexer(chars);
var tokens = new antlr4.CommonTokenStream(lexer);
var parser = new dnpMDParser.dnpMDParser(tokens);
parser.buildParseTrees = true;
parser.removeErrorListeners();
var errors = [];
var errorListener = new ErrorListener(errors);
parser.addErrorListener(errorListener);
var tree = parser.dnpMD();
var listener = new DnpMDListener();
antlr4.tree.ParseTreeWalker.DEFAULT.walk(listener, tree);
这里是监听器的代码(现在只实现了一些功能):
var dnpMDParserListener = require('./lib/dnpMD/dnpMDParserListener.js').dnpMDParserListener;
var DnpMDListener = function() {
dnpMDParserListener.call(this);
return this;
};
DnpMDListener.prototype = Object.create(dnpMDParserListener.prototype);
DnpMDListener.prototype.constructor = DnpMDListener;
DnpMDListener.prototype.enterDnpMD = function(ctx) {
console.log("dnp: " + ctx);
}
DnpMDListener.prototype.enterHead = function(ctx) {
console.log("Head: " + ctx);
}
DnpMDListener.prototype.enterHeadline = function(ctx) {
console.log("Headline: " + ctx);
}
我现在缺少什么?
答案 0 :(得分:0)
我发现了这个问题。
我刚刚没有生成监听器但是我做了(访问者只是生成了)。
还有一行:
var dnpMDParserListener = require('./dnpMDParserListener').dnpMDParserListener;
缺少,包括对基本监听器的所有必要调用。
现在工作得很好。