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>t049treeparser</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<script type="text/javascript" src="t049treeparseraLexer.js"></script> 10*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparseraParser.js"></script> 11*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparseraWalker.js"></script> 12*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserbLexer.js"></script> 13*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserbParser.js"></script> 14*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserbWalker.js"></script> 15*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparsercLexer.js"></script> 16*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparsercParser.js"></script> 17*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparsercWalker.js"></script> 18*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserdLexer.js"></script> 19*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserdParser.js"></script> 20*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserdWalker.js"></script> 21*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparsereLexer.js"></script> 22*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparsereParser.js"></script> 23*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparsereWalker.js"></script> 24*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserfLexer.js"></script> 25*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserfParser.js"></script> 26*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserfWalker.js"></script> 27*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparsergLexer.js"></script> 28*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparsergParser.js"></script> 29*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparsergWalker.js"></script> 30*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserhLexer.js"></script> 31*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserhParser.js"></script> 32*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparserhWalker.js"></script> 33*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparseriLexer.js"></script> 34*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparseriParser.js"></script> 35*16467b97STreehugger Robot<script type="text/javascript" src="t049treeparseriWalker.js"></script> 36*16467b97STreehugger Robot 37*16467b97STreehugger Robot 38*16467b97STreehugger Robot 39*16467b97STreehugger Robot<!-- JsUnit include --> 40*16467b97STreehugger Robot<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script> 41*16467b97STreehugger Robot 42*16467b97STreehugger Robot<!-- Test Code --> 43*16467b97STreehugger Robot<script type="text/javascript"> 44*16467b97STreehugger Robot function execTreeParser(lexerCls, parserCls, grammarEntry, walkerCls, treeEntry, xinput) 45*16467b97STreehugger Robot { 46*16467b97STreehugger Robot var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), 47*16467b97STreehugger Robot lexer = new lexerCls(cstream), 48*16467b97STreehugger Robot tstream = new org.antlr.runtime.CommonTokenStream(lexer), 49*16467b97STreehugger Robot parser = new parserCls(tstream); 50*16467b97STreehugger Robot var r = parser[grammarEntry](); 51*16467b97STreehugger Robot 52*16467b97STreehugger Robot var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree()); 53*16467b97STreehugger Robot nodes.setTokenStream(tstream); 54*16467b97STreehugger Robot var walker = new (walkerClass(walkerCls))(nodes); 55*16467b97STreehugger Robot walker[treeEntry](); 56*16467b97STreehugger Robot 57*16467b97STreehugger Robot return walker._output; 58*16467b97STreehugger Robot } 59*16467b97STreehugger Robot 60*16467b97STreehugger Robot function walkerClass(base) { 61*16467b97STreehugger Robot var TWalker = function() { 62*16467b97STreehugger Robot TWalker.superclass.constructor.apply(this, arguments); 63*16467b97STreehugger Robot this._output = ""; 64*16467b97STreehugger Robot this.traces = []; 65*16467b97STreehugger Robot }; 66*16467b97STreehugger Robot 67*16467b97STreehugger Robot org.antlr.lang.extend(TWalker, base, { 68*16467b97STreehugger Robot capture: function(t) { 69*16467b97STreehugger Robot this._output += t; 70*16467b97STreehugger Robot }, 71*16467b97STreehugger Robot traceIn: function(ruleName, ruleIndex) { 72*16467b97STreehugger Robot this.traces.push(">"+ruleName); 73*16467b97STreehugger Robot }, 74*16467b97STreehugger Robot traceOut: function(ruleName, ruleIndex) { 75*16467b97STreehugger Robot this.traces.push("<"+ruleName); 76*16467b97STreehugger Robot }, 77*16467b97STreehugger Robot recover: function(input, re) { 78*16467b97STreehugger Robot throw re; 79*16467b97STreehugger Robot } 80*16467b97STreehugger Robot }); 81*16467b97STreehugger Robot 82*16467b97STreehugger Robot return TWalker; 83*16467b97STreehugger Robot } 84*16467b97STreehugger Robot 85*16467b97STreehugger Robot function testFlatList() { 86*16467b97STreehugger Robot var found = execTreeParser(t049treeparseraLexer, 87*16467b97STreehugger Robot t049treeparseraParser, 88*16467b97STreehugger Robot "a", 89*16467b97STreehugger Robot t049treeparseraWalker, 90*16467b97STreehugger Robot "a", 91*16467b97STreehugger Robot "abc 34"); 92*16467b97STreehugger Robot assertEquals(found, "abc, 34"); 93*16467b97STreehugger Robot } 94*16467b97STreehugger Robot 95*16467b97STreehugger Robot function testSimpleTree() { 96*16467b97STreehugger Robot var found = execTreeParser(t049treeparserbLexer, 97*16467b97STreehugger Robot t049treeparserbParser, 98*16467b97STreehugger Robot "a", 99*16467b97STreehugger Robot t049treeparserbWalker, 100*16467b97STreehugger Robot "a", 101*16467b97STreehugger Robot "abc 34"); 102*16467b97STreehugger Robot assertEquals(found, "abc, 34"); 103*16467b97STreehugger Robot } 104*16467b97STreehugger Robot 105*16467b97STreehugger Robot function testFlatVsTreeDecision() { 106*16467b97STreehugger Robot var found = execTreeParser(t049treeparsercLexer, 107*16467b97STreehugger Robot t049treeparsercParser, 108*16467b97STreehugger Robot "a", 109*16467b97STreehugger Robot t049treeparsercWalker, 110*16467b97STreehugger Robot "a", 111*16467b97STreehugger Robot "a 1 b 2"); 112*16467b97STreehugger Robot assertEquals(found, "^(a 1)b 2\n"); 113*16467b97STreehugger Robot } 114*16467b97STreehugger Robot 115*16467b97STreehugger Robot function testFlatVsTreeDecision2() { 116*16467b97STreehugger Robot var found = execTreeParser(t049treeparserdLexer, 117*16467b97STreehugger Robot t049treeparserdParser, 118*16467b97STreehugger Robot "a", 119*16467b97STreehugger Robot t049treeparserdWalker, 120*16467b97STreehugger Robot "a", 121*16467b97STreehugger Robot "a 1 2 3 b 4 5"); 122*16467b97STreehugger Robot assertEquals(found, "^(a 3)b 5\n"); 123*16467b97STreehugger Robot } 124*16467b97STreehugger Robot 125*16467b97STreehugger Robot function testCyclicDFALookahead() { 126*16467b97STreehugger Robot var found = execTreeParser(t049treeparsereLexer, 127*16467b97STreehugger Robot t049treeparsereParser, 128*16467b97STreehugger Robot "a", 129*16467b97STreehugger Robot t049treeparsereWalker, 130*16467b97STreehugger Robot "a", 131*16467b97STreehugger Robot "a 1 2 3."); 132*16467b97STreehugger Robot assertEquals(found, "alt 1"); 133*16467b97STreehugger Robot } 134*16467b97STreehugger Robot 135*16467b97STreehugger Robot function testNullableChildList() { 136*16467b97STreehugger Robot var found = execTreeParser(t049treeparserfLexer, 137*16467b97STreehugger Robot t049treeparserfParser, 138*16467b97STreehugger Robot "a", 139*16467b97STreehugger Robot t049treeparserfWalker, 140*16467b97STreehugger Robot "a", 141*16467b97STreehugger Robot "abc"); 142*16467b97STreehugger Robot assertEquals(found, "abc"); 143*16467b97STreehugger Robot } 144*16467b97STreehugger Robot 145*16467b97STreehugger Robot function testNullableChildList2() { 146*16467b97STreehugger Robot var found = execTreeParser(t049treeparsergLexer, 147*16467b97STreehugger Robot t049treeparsergParser, 148*16467b97STreehugger Robot "a", 149*16467b97STreehugger Robot t049treeparsergWalker, 150*16467b97STreehugger Robot "a", 151*16467b97STreehugger Robot "abc 3;"); 152*16467b97STreehugger Robot assertEquals(found, "abc"); 153*16467b97STreehugger Robot } 154*16467b97STreehugger Robot 155*16467b97STreehugger Robot function testNullableChildList3() { 156*16467b97STreehugger Robot var found = execTreeParser(t049treeparserhLexer, 157*16467b97STreehugger Robot t049treeparserhParser, 158*16467b97STreehugger Robot "a", 159*16467b97STreehugger Robot t049treeparserhWalker, 160*16467b97STreehugger Robot "a", 161*16467b97STreehugger Robot "abc 3 def;"); 162*16467b97STreehugger Robot assertEquals(found, "abc, def"); 163*16467b97STreehugger Robot } 164*16467b97STreehugger Robot 165*16467b97STreehugger Robot function testActionsAfterRoot() { 166*16467b97STreehugger Robot var found = execTreeParser(t049treeparseriLexer, 167*16467b97STreehugger Robot t049treeparseriParser, 168*16467b97STreehugger Robot "a", 169*16467b97STreehugger Robot t049treeparseriWalker, 170*16467b97STreehugger Robot "a", 171*16467b97STreehugger Robot "abc;"); 172*16467b97STreehugger Robot assertEquals(found, "abc, 2"); 173*16467b97STreehugger Robot } 174*16467b97STreehugger Robot 175*16467b97STreehugger Robot 176*16467b97STreehugger Robot</script> 177*16467b97STreehugger Robot 178*16467b97STreehugger Robot</head> 179*16467b97STreehugger Robot<body> 180*16467b97STreehugger Robot <h1>t049treeparser</h1> 181*16467b97STreehugger Robot</body> 182*16467b97STreehugger Robot</html> 183