1*16467b97STreehugger Robot<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2*16467b97STreehugger Robot<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 3*16467b97STreehugger Robot<head> 4*16467b97STreehugger Robot<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 5*16467b97STreehugger Robot<title>t053hetero</title> 6*16467b97STreehugger Robot 7*16467b97STreehugger Robot<!-- ANTLR includes --> 8*16467b97STreehugger Robot<script type="text/javascript" src="../../lib/antlr3-all.js"></script> 9*16467b97STreehugger Robot 10*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT1Lexer.js"></script> 11*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT1Parser.js"></script> 12*16467b97STreehugger Robot 13*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT2Lexer.js"></script> 14*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT2Parser.js"></script> 15*16467b97STreehugger Robot 16*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT3Lexer.js"></script> 17*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT3Parser.js"></script> 18*16467b97STreehugger Robot 19*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT4Lexer.js"></script> 20*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT4Parser.js"></script> 21*16467b97STreehugger Robot 22*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT5Lexer.js"></script> 23*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT5Parser.js"></script> 24*16467b97STreehugger Robot 25*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT6Lexer.js"></script> 26*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT6Parser.js"></script> 27*16467b97STreehugger Robot 28*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT7Lexer.js"></script> 29*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT7Parser.js"></script> 30*16467b97STreehugger Robot 31*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT8Lexer.js"></script> 32*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT8Parser.js"></script> 33*16467b97STreehugger Robot 34*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT9Lexer.js"></script> 35*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT9Parser.js"></script> 36*16467b97STreehugger Robot 37*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT10Lexer.js"></script> 38*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT10Parser.js"></script> 39*16467b97STreehugger Robot 40*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT11Lexer.js"></script> 41*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT11Parser.js"></script> 42*16467b97STreehugger Robot 43*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT12Lexer.js"></script> 44*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT12Parser.js"></script> 45*16467b97STreehugger Robot 46*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT13Lexer.js"></script> 47*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT13Parser.js"></script> 48*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP13Parser.js"></script> 49*16467b97STreehugger Robot 50*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT14Lexer.js"></script> 51*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT14Parser.js"></script> 52*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP14Parser.js"></script> 53*16467b97STreehugger Robot 54*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT15Lexer.js"></script> 55*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT15Parser.js"></script> 56*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP15Parser.js"></script> 57*16467b97STreehugger Robot 58*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT16Lexer.js"></script> 59*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT16Parser.js"></script> 60*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP16Parser.js"></script> 61*16467b97STreehugger Robot 62*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT17Lexer.js"></script> 63*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT17Parser.js"></script> 64*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP17Parser.js"></script> 65*16467b97STreehugger Robot 66*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT18Lexer.js"></script> 67*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT18Parser.js"></script> 68*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP18Parser.js"></script> 69*16467b97STreehugger Robot 70*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT18Lexer.js"></script> 71*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT18Parser.js"></script> 72*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP18Parser.js"></script> 73*16467b97STreehugger Robot 74*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTLexer.js"></script> 75*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTParser.js"></script> 76*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTPParser.js"></script> 77*16467b97STreehugger Robot 78*16467b97STreehugger Robot<!-- JsUnit include --> 79*16467b97STreehugger Robot<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script> 80*16467b97STreehugger Robot 81*16467b97STreehugger Robot<!-- Test Code --> 82*16467b97STreehugger Robot<script type="text/javascript"> 83*16467b97STreehugger Robot // Parser Tests 84*16467b97STreehugger Robot 85*16467b97STreehugger Robot function execParser(lexerCls, parserCls, grammarEntry, xinput) { 86*16467b97STreehugger Robot var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), 87*16467b97STreehugger Robot lexer = new (EnhancedParser(lexerCls))(cstream), 88*16467b97STreehugger Robot tstream = new org.antlr.runtime.CommonTokenStream(lexer), 89*16467b97STreehugger Robot parser = new (EnhancedParser(parserCls))(tstream); 90*16467b97STreehugger Robot var r = parser[grammarEntry](); 91*16467b97STreehugger Robot 92*16467b97STreehugger Robot if (r) { 93*16467b97STreehugger Robot return r.getTree().toStringTree(); 94*16467b97STreehugger Robot } 95*16467b97STreehugger Robot return ""; 96*16467b97STreehugger Robot } 97*16467b97STreehugger Robot 98*16467b97STreehugger Robot function execTreeParser(lexerCls, parserCls, grammarEntry, walkerCls, treeEntry, xinput) 99*16467b97STreehugger Robot { 100*16467b97STreehugger Robot var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), 101*16467b97STreehugger Robot lexer = new (EnhancedParser(lexerCls))(cstream), 102*16467b97STreehugger Robot tstream = new org.antlr.runtime.CommonTokenStream(lexer), 103*16467b97STreehugger Robot parser = new (EnhancedParser(parserCls))(tstream); 104*16467b97STreehugger Robot var r = parser[grammarEntry](); 105*16467b97STreehugger Robot 106*16467b97STreehugger Robot var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree()); 107*16467b97STreehugger Robot nodes.setTokenStream(tstream); 108*16467b97STreehugger Robot var walker = new walkerCls(nodes); 109*16467b97STreehugger Robot r = walker[treeEntry](); 110*16467b97STreehugger Robot 111*16467b97STreehugger Robot if (r) { 112*16467b97STreehugger Robot return r.getTree().toStringTree(); 113*16467b97STreehugger Robot } 114*16467b97STreehugger Robot return ""; 115*16467b97STreehugger Robot } 116*16467b97STreehugger Robot 117*16467b97STreehugger Robot 118*16467b97STreehugger Robot function EnhancedParser(base) { 119*16467b97STreehugger Robot var T = function() { 120*16467b97STreehugger Robot T.superclass.constructor.apply(this, arguments); 121*16467b97STreehugger Robot this.traces = []; 122*16467b97STreehugger Robot this.buf = ""; 123*16467b97STreehugger Robot }; 124*16467b97STreehugger Robot 125*16467b97STreehugger Robot org.antlr.lang.extend(T, base, { 126*16467b97STreehugger Robot capture: function(t) { 127*16467b97STreehugger Robot this.buf += t; 128*16467b97STreehugger Robot }, 129*16467b97STreehugger Robot traceIn: function(ruleName, ruleIndex) { 130*16467b97STreehugger Robot this.traces.push(">"+ruleName); 131*16467b97STreehugger Robot }, 132*16467b97STreehugger Robot traceOut: function(ruleName, ruleIndex) { 133*16467b97STreehugger Robot this.traces.push("<"+ruleName); 134*16467b97STreehugger Robot }, 135*16467b97STreehugger Robot reportError: function(input, re) { 136*16467b97STreehugger Robot throw re; 137*16467b97STreehugger Robot } 138*16467b97STreehugger Robot }); 139*16467b97STreehugger Robot 140*16467b97STreehugger Robot return T; 141*16467b97STreehugger Robot } 142*16467b97STreehugger Robot 143*16467b97STreehugger Robot // PARSERS -- AUTO AST 144*16467b97STreehugger Robot 145*16467b97STreehugger Robot function testToken() { 146*16467b97STreehugger Robot var found = execParser( 147*16467b97STreehugger Robot t053heteroT1Lexer, 148*16467b97STreehugger Robot t053heteroT1Parser, 149*16467b97STreehugger Robot "a", 150*16467b97STreehugger Robot "a"); 151*16467b97STreehugger Robot assertEquals("a<V>", found); 152*16467b97STreehugger Robot } 153*16467b97STreehugger Robot 154*16467b97STreehugger Robot function testTokenWithLabel() { 155*16467b97STreehugger Robot var found = execParser( 156*16467b97STreehugger Robot t053heteroT2Lexer, 157*16467b97STreehugger Robot t053heteroT2Parser, 158*16467b97STreehugger Robot "a", 159*16467b97STreehugger Robot "a"); 160*16467b97STreehugger Robot assertEquals("a<V>", found); 161*16467b97STreehugger Robot } 162*16467b97STreehugger Robot 163*16467b97STreehugger Robot function testTokenWithListLabel() { 164*16467b97STreehugger Robot var found = execParser( 165*16467b97STreehugger Robot t053heteroT3Lexer, 166*16467b97STreehugger Robot t053heteroT3Parser, 167*16467b97STreehugger Robot "a", 168*16467b97STreehugger Robot "a"); 169*16467b97STreehugger Robot assertEquals("a<V>", found); 170*16467b97STreehugger Robot } 171*16467b97STreehugger Robot 172*16467b97STreehugger Robot function testTokenRoot() { 173*16467b97STreehugger Robot var found = execParser( 174*16467b97STreehugger Robot t053heteroT4Lexer, 175*16467b97STreehugger Robot t053heteroT4Parser, 176*16467b97STreehugger Robot "a", 177*16467b97STreehugger Robot "a"); 178*16467b97STreehugger Robot assertEquals("a<V>", found); 179*16467b97STreehugger Robot } 180*16467b97STreehugger Robot 181*16467b97STreehugger Robot function testTokenRootWithListLabel() { 182*16467b97STreehugger Robot var found = execParser( 183*16467b97STreehugger Robot t053heteroT5Lexer, 184*16467b97STreehugger Robot t053heteroT5Parser, 185*16467b97STreehugger Robot "a", 186*16467b97STreehugger Robot "a"); 187*16467b97STreehugger Robot assertEquals("a<V>", found); 188*16467b97STreehugger Robot } 189*16467b97STreehugger Robot 190*16467b97STreehugger Robot function testString() { 191*16467b97STreehugger Robot var found = execParser( 192*16467b97STreehugger Robot t053heteroT6Lexer, 193*16467b97STreehugger Robot t053heteroT6Parser, 194*16467b97STreehugger Robot "a", 195*16467b97STreehugger Robot "begin"); 196*16467b97STreehugger Robot assertEquals("begin<V>", found); 197*16467b97STreehugger Robot } 198*16467b97STreehugger Robot 199*16467b97STreehugger Robot function testStringRoot() { 200*16467b97STreehugger Robot var found = execParser( 201*16467b97STreehugger Robot t053heteroT7Lexer, 202*16467b97STreehugger Robot t053heteroT7Parser, 203*16467b97STreehugger Robot "a", 204*16467b97STreehugger Robot "begin"); 205*16467b97STreehugger Robot assertEquals("begin<V>", found); 206*16467b97STreehugger Robot } 207*16467b97STreehugger Robot 208*16467b97STreehugger Robot // PARSERS -- REWRITE AST 209*16467b97STreehugger Robot 210*16467b97STreehugger Robot function testRewriteToken() { 211*16467b97STreehugger Robot var found = execParser( 212*16467b97STreehugger Robot t053heteroT8Lexer, 213*16467b97STreehugger Robot t053heteroT8Parser, 214*16467b97STreehugger Robot "a", 215*16467b97STreehugger Robot "a"); 216*16467b97STreehugger Robot assertEquals("a<V>", found); 217*16467b97STreehugger Robot } 218*16467b97STreehugger Robot 219*16467b97STreehugger Robot function testrewritetokenwithargs() { 220*16467b97STreehugger Robot var found = execParser( 221*16467b97STreehugger Robot t053heteroT9Lexer, 222*16467b97STreehugger Robot t053heteroT9Parser, 223*16467b97STreehugger Robot "a", 224*16467b97STreehugger Robot "a"); 225*16467b97STreehugger Robot assertEquals("<V>;421930 a<V>;9900", found); 226*16467b97STreehugger Robot } 227*16467b97STreehugger Robot 228*16467b97STreehugger Robot function testRewriteTokenRoot() { 229*16467b97STreehugger Robot var found = execParser( 230*16467b97STreehugger Robot t053heteroT10Lexer, 231*16467b97STreehugger Robot t053heteroT10Parser, 232*16467b97STreehugger Robot "a", 233*16467b97STreehugger Robot "a 2"); 234*16467b97STreehugger Robot assertEquals("(a<V> 2)", found); 235*16467b97STreehugger Robot } 236*16467b97STreehugger Robot 237*16467b97STreehugger Robot function testRewriteString() { 238*16467b97STreehugger Robot var found = execParser( 239*16467b97STreehugger Robot t053heteroT11Lexer, 240*16467b97STreehugger Robot t053heteroT11Parser, 241*16467b97STreehugger Robot "a", 242*16467b97STreehugger Robot "begin"); 243*16467b97STreehugger Robot assertEquals("begin<V>", found); 244*16467b97STreehugger Robot } 245*16467b97STreehugger Robot 246*16467b97STreehugger Robot function testRewriteStringRoot() { 247*16467b97STreehugger Robot var found = execParser( 248*16467b97STreehugger Robot t053heteroT12Lexer, 249*16467b97STreehugger Robot t053heteroT12Parser, 250*16467b97STreehugger Robot "a", 251*16467b97STreehugger Robot "begin 2"); 252*16467b97STreehugger Robot assertEquals("(begin<V> 2)", found); 253*16467b97STreehugger Robot } 254*16467b97STreehugger Robot 255*16467b97STreehugger Robot // TREE PARSERS -- REWRITE AST 256*16467b97STreehugger Robot 257*16467b97STreehugger Robot function testTreeParserRewriteFlatList() { 258*16467b97STreehugger Robot var found = execTreeParser( 259*16467b97STreehugger Robot t053heteroT13Lexer, 260*16467b97STreehugger Robot t053heteroT13Parser, 261*16467b97STreehugger Robot "a", 262*16467b97STreehugger Robot t053heteroTP13Parser, 263*16467b97STreehugger Robot "a", 264*16467b97STreehugger Robot "abc 34"); 265*16467b97STreehugger Robot assertEquals("34<V> abc<W>", found); 266*16467b97STreehugger Robot } 267*16467b97STreehugger Robot 268*16467b97STreehugger Robot function testTreeParserRewriteTree() { 269*16467b97STreehugger Robot var found = execTreeParser( 270*16467b97STreehugger Robot t053heteroT14Lexer, 271*16467b97STreehugger Robot t053heteroT14Parser, 272*16467b97STreehugger Robot "a", 273*16467b97STreehugger Robot t053heteroTP14Parser, 274*16467b97STreehugger Robot "a", 275*16467b97STreehugger Robot "abc 34"); 276*16467b97STreehugger Robot assertEquals("(34<V> abc<W>)", found); 277*16467b97STreehugger Robot } 278*16467b97STreehugger Robot 279*16467b97STreehugger Robot function testTreeParserRewriteImaginary() { 280*16467b97STreehugger Robot var found = execTreeParser( 281*16467b97STreehugger Robot t053heteroT15Lexer, 282*16467b97STreehugger Robot t053heteroT15Parser, 283*16467b97STreehugger Robot "a", 284*16467b97STreehugger Robot t053heteroTP15Parser, 285*16467b97STreehugger Robot "a", 286*16467b97STreehugger Robot "abc"); 287*16467b97STreehugger Robot assertEquals("ROOT<V> abc", found); 288*16467b97STreehugger Robot } 289*16467b97STreehugger Robot 290*16467b97STreehugger Robot function testTreeParserRewriteImaginaryWithArgs() { 291*16467b97STreehugger Robot var found = execTreeParser( 292*16467b97STreehugger Robot t053heteroT16Lexer, 293*16467b97STreehugger Robot t053heteroT16Parser, 294*16467b97STreehugger Robot "a", 295*16467b97STreehugger Robot t053heteroTP16Parser, 296*16467b97STreehugger Robot "a", 297*16467b97STreehugger Robot "abc"); 298*16467b97STreehugger Robot assertEquals("ROOT<V>;42 abc", found); 299*16467b97STreehugger Robot } 300*16467b97STreehugger Robot 301*16467b97STreehugger Robot function testTreeParserRewriteImaginaryRoot() { 302*16467b97STreehugger Robot var found = execTreeParser( 303*16467b97STreehugger Robot t053heteroT17Lexer, 304*16467b97STreehugger Robot t053heteroT17Parser, 305*16467b97STreehugger Robot "a", 306*16467b97STreehugger Robot t053heteroTP17Parser, 307*16467b97STreehugger Robot "a", 308*16467b97STreehugger Robot "abc"); 309*16467b97STreehugger Robot assertEquals("(ROOT<V> abc)", found); 310*16467b97STreehugger Robot } 311*16467b97STreehugger Robot 312*16467b97STreehugger Robot function testTreeParserRewriteImaginaryFromReal() { 313*16467b97STreehugger Robot var found = execTreeParser( 314*16467b97STreehugger Robot t053heteroT18Lexer, 315*16467b97STreehugger Robot t053heteroT18Parser, 316*16467b97STreehugger Robot "a", 317*16467b97STreehugger Robot t053heteroTP18Parser, 318*16467b97STreehugger Robot "a", 319*16467b97STreehugger Robot "abc"); 320*16467b97STreehugger Robot assertEquals("ROOT<V>@1", found); 321*16467b97STreehugger Robot } 322*16467b97STreehugger Robot 323*16467b97STreehugger Robot function testTreeParserAutoHeteroAST() { 324*16467b97STreehugger Robot var found = execTreeParser( 325*16467b97STreehugger Robot t053heteroTLexer, 326*16467b97STreehugger Robot t053heteroTParser, 327*16467b97STreehugger Robot "a", 328*16467b97STreehugger Robot t053heteroTPParser, 329*16467b97STreehugger Robot "a", 330*16467b97STreehugger Robot "abc;"); 331*16467b97STreehugger Robot assertEquals("abc<V> ;<V>", found); 332*16467b97STreehugger Robot } 333*16467b97STreehugger Robot</script> 334*16467b97STreehugger Robot 335*16467b97STreehugger Robot</head> 336*16467b97STreehugger Robot<body> 337*16467b97STreehugger Robot <h1>t053hetero</h1> 338*16467b97STreehugger Robot</body> 339*16467b97STreehugger Robot</html> 340