grammar t053heteroT9; options { language=JavaScript; output=AST; } @header { function V2() { var x, y, z, token, ttype; if (arguments.length===4) { ttype = arguments[0]; x = arguments[1]; y = arguments[2]; z = arguments[3]; token = new org.antlr.runtime.CommonToken(ttype, ""); } else if (arguments.length===3) { ttype = arguments[0]; token = arguments[1]; x = arguments[2]; y = 0; z = 0; } else { throw new Error("Invalid args"); } V2.superclass.constructor.call(this, token); this.x = x; this.y = y; this.z = z; }; org.antlr.lang.extend(V2, org.antlr.runtime.tree.CommonTree, { toString: function() { var txt = ""; if (this.token) { txt += this.getText(); } txt += "<V>;"+this.x.toString()+this.y.toString()+this.z.toString(); return txt; } }); } a : ID -> ID<V2>[42,19,30] ID<V2>[$ID,99]; ID : 'a'..'z'+ ; WS : (' '|'\n') {$channel=HIDDEN;} ;