Skip to content

Instantly share code, notes, and snippets.

Created January 15, 2016 22:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/6b388afff93da12cbb2d to your computer and use it in GitHub Desktop.
Save anonymous/6b388afff93da12cbb2d to your computer and use it in GitHub Desktop.
// jshint ignore: start
var antlr4 = require('antlr4/index');
// This class defines a complete generic visitor for a parse tree produced by PlusMinusParser.
function MyPlusMinusVisitor() {
antlr4.tree.ParseTreeVisitor.call(this);
return this;
}
MyPlusMinusVisitor.prototype = Object.create(antlr4.tree.ParseTreeVisitor.prototype);
MyPlusMinusVisitor.prototype.constructor = MyPlusMinusVisitor;
// Visit a parse tree produced by PlusMinusParser#statement.
MyPlusMinusVisitor.prototype.visitInput = function(ctx) {
var operation = ctx.plusOrMinus(),
operationConstructorString,
operationVisitFnName;
// operation is plus or minus, but how can I tell which one?
// Taking it from the name of the constructor of the child (very ugly)
operationConstructorString = operation.constructor.toString();
operationConstructorString = operationConstructorString.substr('function '.length);
operationConstructorString = operationConstructorString.substr(0, operationConstructorString.indexOf('('));
operationVisitFnName = "visit" + operationConstructorString.substring(0, operationConstructorString.length - "context".length);
// Here I finally have the visit function that I need, visitPlusOp or visitMinusOp
return this[operationVisitFnName](operation);
};
// Visit a parse tree produced by PlusMinusParser#Plus.
MyPlusMinusVisitor.prototype.visitPlus = function(ctx) {
return parseInt(ctx.numberLeft().getText(), 10) + parseInt(ctx.numberRight().getText(), 10);
};
// Visit a parse tree produced by PlusMinusParser#Minus.
MyPlusMinusVisitor.prototype.visitMinus = function(ctx) {
return parseInt(ctx.numberLeft().getText()) - parseInt(ctx.numberRight().getText(), 10);
};
exports.MyPlusMinusVisitor = MyPlusMinusVisitor;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment