JavaScript目标中的侦听器未执行

时间:2016-07-23 19:18:54

标签: javascript antlr4

我已经创建了一个语法并使用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);
}

我现在缺少什么?

1 个答案:

答案 0 :(得分:0)

我发现了这个问题。

我刚刚没有生成监听器但是我做了(访问者只是生成了)。

还有一行:

var dnpMDParserListener = require('./dnpMDParserListener').dnpMDParserListener;
缺少

,包括对基本监听器的所有必要调用。

现在工作得很好。