我使用antlr4(4.5.3)与JavaScript的目标,并试图实现访问者。Antlr4 Javascript的目标 - 与访问者问题和标签替代
继antlr4本书的计算器示例(伟大的书BTW)我试图创建一个类似的语法:
...
expr: expr op=('*'|'/') expr # MulDiv
| expr op=('+'|'-') expr # AddSub
| INT # int
| '(' expr ')' # parens
;
...
问题:为标记的替代物创建访问者方法(例如visitMulDiv),但是2缺少的东西:
- 在基地访问者原型中执行
visitExpr
。 - 当调用
this.visit(ctx.expr())
时,自动检测正确的选项 - 意思是访问正确的visitX方法。
这就是本书如何实现Java的访问者。
我已经通过实施visitExpr()
和黑客上下文c'tor名称(类似于here)来解决此问题,但感觉JS应该可以免费使用,就像Java版本一样。
这是一个错误还是我错过了什么?
感谢 - 这个伟大工程。因为我不想修改库函数,所以在我的ValidatorVisitor.prototype.visitExpr() – Froyke
的实现中使用了相同的概念。您的解决方案更好!我已经更新了我的答案。 – gzc