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>t057autoAST</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="t057autoAST1Lexer.js"></script> 11*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST1Parser.js"></script> 12*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST2Lexer.js"></script> 13*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST2Parser.js"></script> 14*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST3Lexer.js"></script> 15*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST3Parser.js"></script> 16*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST4Lexer.js"></script> 17*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST4Parser.js"></script> 18*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST5Lexer.js"></script> 19*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST5Parser.js"></script> 20*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST6Lexer.js"></script> 21*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST6Parser.js"></script> 22*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST7Lexer.js"></script> 23*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST7Parser.js"></script> 24*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST8Lexer.js"></script> 25*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST8Parser.js"></script> 26*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST9Lexer.js"></script> 27*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST9Parser.js"></script> 28*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST10Lexer.js"></script> 29*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST10Parser.js"></script> 30*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST11Lexer.js"></script> 31*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST11Parser.js"></script> 32*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST12Lexer.js"></script> 33*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST12Parser.js"></script> 34*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST13Lexer.js"></script> 35*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST13Parser.js"></script> 36*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST14Lexer.js"></script> 37*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST14Parser.js"></script> 38*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST15Lexer.js"></script> 39*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST15Parser.js"></script> 40*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST16Lexer.js"></script> 41*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST16Parser.js"></script> 42*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST17Lexer.js"></script> 43*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST17Parser.js"></script> 44*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST18Lexer.js"></script> 45*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST18Parser.js"></script> 46*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST19Lexer.js"></script> 47*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST19Parser.js"></script> 48*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST20Lexer.js"></script> 49*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST20Parser.js"></script> 50*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST21Lexer.js"></script> 51*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST21Parser.js"></script> 52*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST22Lexer.js"></script> 53*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST22Parser.js"></script> 54*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST23Lexer.js"></script> 55*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST23Parser.js"></script> 56*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST24Lexer.js"></script> 57*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST24Parser.js"></script> 58*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST25Lexer.js"></script> 59*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST25Parser.js"></script> 60*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST26Lexer.js"></script> 61*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST26Parser.js"></script> 62*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST27Lexer.js"></script> 63*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST27Parser.js"></script> 64*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST28Lexer.js"></script> 65*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST28Parser.js"></script> 66*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST29Lexer.js"></script> 67*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST29Parser.js"></script> 68*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST30Lexer.js"></script> 69*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST30Parser.js"></script> 70*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST31Lexer.js"></script> 71*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST31Parser.js"></script> 72*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST32Lexer.js"></script> 73*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST32Parser.js"></script> 74*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST33Lexer.js"></script> 75*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST33Parser.js"></script> 76*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST34Lexer.js"></script> 77*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST34Parser.js"></script> 78*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST35Lexer.js"></script> 79*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST35Parser.js"></script> 80*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST36Lexer.js"></script> 81*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST36Parser.js"></script> 82*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST37Lexer.js"></script> 83*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST37Parser.js"></script> 84*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST38Lexer.js"></script> 85*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST38Parser.js"></script> 86*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST39Lexer.js"></script> 87*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST39Parser.js"></script> 88*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST40Lexer.js"></script> 89*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST40Parser.js"></script> 90*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST41Lexer.js"></script> 91*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST41Parser.js"></script> 92*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST42Lexer.js"></script> 93*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST42Parser.js"></script> 94*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST43Lexer.js"></script> 95*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST43Parser.js"></script> 96*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST44Lexer.js"></script> 97*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST44Parser.js"></script> 98*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST45Lexer.js"></script> 99*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST45Parser.js"></script> 100*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST46Lexer.js"></script> 101*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST46Parser.js"></script> 102*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST47Lexer.js"></script> 103*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST47Parser.js"></script> 104*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST48Lexer.js"></script> 105*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST48Parser.js"></script> 106*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST49Lexer.js"></script> 107*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST49Parser.js"></script> 108*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST50Lexer.js"></script> 109*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST50Parser.js"></script> 110*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST51Lexer.js"></script> 111*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST51Parser.js"></script> 112*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST52Lexer.js"></script> 113*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST52Parser.js"></script> 114*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST53Lexer.js"></script> 115*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST53Parser.js"></script> 116*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST54Lexer.js"></script> 117*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST54Parser.js"></script> 118*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST55Lexer.js"></script> 119*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST55Parser.js"></script> 120*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST56Lexer.js"></script> 121*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST56Parser.js"></script> 122*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST57Lexer.js"></script> 123*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST57Parser.js"></script> 124*16467b97STreehugger Robot 125*16467b97STreehugger Robot<!-- JsUnit include --> 126*16467b97STreehugger Robot<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script> 127*16467b97STreehugger Robot 128*16467b97STreehugger Robot<!-- Test Code --> 129*16467b97STreehugger Robot<script type="text/javascript"> 130*16467b97STreehugger Robot // Parser Tests 131*16467b97STreehugger Robot 132*16467b97STreehugger Robot function execParser(lexerCls, parserCls, grammarEntry, xinput, expectErrors) { 133*16467b97STreehugger Robot var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), 134*16467b97STreehugger Robot lexer = new (EnhancedParser(lexerCls))(cstream), 135*16467b97STreehugger Robot tstream = new org.antlr.runtime.CommonTokenStream(lexer), 136*16467b97STreehugger Robot parser = new (EnhancedParser(parserCls))(tstream); 137*16467b97STreehugger Robot var r = parser[grammarEntry](); 138*16467b97STreehugger Robot 139*16467b97STreehugger Robot if (!expectErrors) { 140*16467b97STreehugger Robot assertEquals(parser._errors.length, 0); 141*16467b97STreehugger Robot } 142*16467b97STreehugger Robot 143*16467b97STreehugger Robot var result = ""; 144*16467b97STreehugger Robot if (r) { 145*16467b97STreehugger Robot if (r.result) { 146*16467b97STreehugger Robot result += r.result 147*16467b97STreehugger Robot } 148*16467b97STreehugger Robot if (r.getTree()) { 149*16467b97STreehugger Robot result += r.getTree().toStringTree(); 150*16467b97STreehugger Robot } 151*16467b97STreehugger Robot } 152*16467b97STreehugger Robot 153*16467b97STreehugger Robot if (!expectErrors) { 154*16467b97STreehugger Robot return result; 155*16467b97STreehugger Robot } else { 156*16467b97STreehugger Robot return [result, parser._errors]; 157*16467b97STreehugger Robot } 158*16467b97STreehugger Robot } 159*16467b97STreehugger Robot 160*16467b97STreehugger Robot function EnhancedParser(base) { 161*16467b97STreehugger Robot var T = function() { 162*16467b97STreehugger Robot T.superclass.constructor.apply(this, arguments); 163*16467b97STreehugger Robot this.traces = []; 164*16467b97STreehugger Robot this.buf = ""; 165*16467b97STreehugger Robot this._errors = []; 166*16467b97STreehugger Robot }; 167*16467b97STreehugger Robot 168*16467b97STreehugger Robot org.antlr.lang.extend(T, base, { 169*16467b97STreehugger Robot capture: function(t) { 170*16467b97STreehugger Robot this.buf += t; 171*16467b97STreehugger Robot }, 172*16467b97STreehugger Robot traceIn: function(ruleName, ruleIndex) { 173*16467b97STreehugger Robot this.traces.push(">"+ruleName); 174*16467b97STreehugger Robot }, 175*16467b97STreehugger Robot traceOut: function(ruleName, ruleIndex) { 176*16467b97STreehugger Robot this.traces.push("<"+ruleName); 177*16467b97STreehugger Robot }, 178*16467b97STreehugger Robot emitErrorMessage: function(msg) { 179*16467b97STreehugger Robot this._errors.push(msg); 180*16467b97STreehugger Robot } 181*16467b97STreehugger Robot }); 182*16467b97STreehugger Robot 183*16467b97STreehugger Robot return T; 184*16467b97STreehugger Robot } 185*16467b97STreehugger Robot 186*16467b97STreehugger Robotfunction testTokenList() { 187*16467b97STreehugger Robot var found = execParser(t057autoAST1Lexer, t057autoAST1Parser, "a", "abc 34"); 188*16467b97STreehugger Robot assertEquals("abc 34", found); 189*16467b97STreehugger Robot} 190*16467b97STreehugger Robot 191*16467b97STreehugger Robotfunction testTokenListInSingleAltBlock() { 192*16467b97STreehugger Robot var found = execParser(t057autoAST2Lexer, t057autoAST2Parser,"a", "abc 34"); 193*16467b97STreehugger Robot assertEquals("abc 34", found); 194*16467b97STreehugger Robot} 195*16467b97STreehugger Robot 196*16467b97STreehugger Robotfunction testSimpleRootAtOuterLevel() { 197*16467b97STreehugger Robot var found = execParser(t057autoAST3Lexer, t057autoAST3Parser, "a", "abc 34"); 198*16467b97STreehugger Robot assertEquals("(abc 34)", found); 199*16467b97STreehugger Robot} 200*16467b97STreehugger Robot 201*16467b97STreehugger Robotfunction testSimpleRootAtOuterLevelReverse() { 202*16467b97STreehugger Robot var found = execParser(t057autoAST4Lexer, t057autoAST4Parser, "a", "34 abc"); 203*16467b97STreehugger Robot assertEquals("(abc 34)", found); 204*16467b97STreehugger Robot} 205*16467b97STreehugger Robot 206*16467b97STreehugger Robotfunction testBang() { 207*16467b97STreehugger Robot var found = execParser(t057autoAST5Lexer, t057autoAST5Parser, "a", "abc 34 dag 4532"); 208*16467b97STreehugger Robot assertEquals("abc 4532", found); 209*16467b97STreehugger Robot} 210*16467b97STreehugger Robot 211*16467b97STreehugger Robotfunction testOptionalThenRoot() { 212*16467b97STreehugger Robot var found = execParser(t057autoAST6Lexer, t057autoAST6Parser, "a", "a 1 b"); 213*16467b97STreehugger Robot assertEquals("(b a 1)", found); 214*16467b97STreehugger Robot} 215*16467b97STreehugger Robot 216*16467b97STreehugger Robotfunction testLabeledStringRoot() { 217*16467b97STreehugger Robot var found = execParser(t057autoAST7Lexer, t057autoAST7Parser, "a", "void foo;"); 218*16467b97STreehugger Robot assertEquals("(void foo ;)", found); 219*16467b97STreehugger Robot} 220*16467b97STreehugger Robot 221*16467b97STreehugger Robotfunction testWildcard() { 222*16467b97STreehugger Robot var found = execParser(t057autoAST8Lexer, t057autoAST8Parser, "a", "void foo;"); 223*16467b97STreehugger Robot assertEquals("(void foo ;)", found); 224*16467b97STreehugger Robot} 225*16467b97STreehugger Robot 226*16467b97STreehugger Robotfunction testWildcardRoot() { 227*16467b97STreehugger Robot var found = execParser(t057autoAST9Lexer, t057autoAST9Parser, "a", "void foo;"); 228*16467b97STreehugger Robot assertEquals("(foo void ;)", found); 229*16467b97STreehugger Robot} 230*16467b97STreehugger Robot 231*16467b97STreehugger Robotfunction testWildcardRootWithLabel() { 232*16467b97STreehugger Robot var found = execParser(t057autoAST10Lexer, t057autoAST10Parser, "a", "void foo;"); 233*16467b97STreehugger Robot assertEquals("(foo void ;)", found); 234*16467b97STreehugger Robot} 235*16467b97STreehugger Robot 236*16467b97STreehugger Robotfunction testWildcardRootWithListLabel() { 237*16467b97STreehugger Robot var found = execParser(t057autoAST11Lexer, t057autoAST11Parser, "a", "void foo;"); 238*16467b97STreehugger Robot assertEquals("(foo void ;)", found); 239*16467b97STreehugger Robot} 240*16467b97STreehugger Robot 241*16467b97STreehugger Robotfunction testRootRoot() { 242*16467b97STreehugger Robot var found = execParser(t057autoAST12Lexer, t057autoAST12Parser, "a", "a 34 c"); 243*16467b97STreehugger Robot assertEquals("(34 a c)", found); 244*16467b97STreehugger Robot} 245*16467b97STreehugger Robot 246*16467b97STreehugger Robotfunction testRootRoot2() { 247*16467b97STreehugger Robot var found = execParser(t057autoAST13Lexer, t057autoAST13Parser, "a", "a 34 c"); 248*16467b97STreehugger Robot assertEquals("(c (34 a))", found); 249*16467b97STreehugger Robot} 250*16467b97STreehugger Robot 251*16467b97STreehugger Robotfunction testRootThenRootInLoop() { 252*16467b97STreehugger Robot var found = execParser(t057autoAST14Lexer, t057autoAST14Parser, "a", "a 34 * b 9 * c"); 253*16467b97STreehugger Robot assertEquals("(* (* (a 34) b 9) c)", found); 254*16467b97STreehugger Robot} 255*16467b97STreehugger Robot 256*16467b97STreehugger Robotfunction testNestedSubrule() { 257*16467b97STreehugger Robot var found = execParser(t057autoAST15Lexer, t057autoAST15Parser, "a", "void a b;"); 258*16467b97STreehugger Robot assertEquals("void a b ;", found); 259*16467b97STreehugger Robot} 260*16467b97STreehugger Robot 261*16467b97STreehugger Robotfunction testInvokeRule() { 262*16467b97STreehugger Robot var found = execParser(t057autoAST16Lexer, t057autoAST16Parser, "a", "int a"); 263*16467b97STreehugger Robot assertEquals("int a", found); 264*16467b97STreehugger Robot} 265*16467b97STreehugger Robot 266*16467b97STreehugger Robotfunction testInvokeRuleAsRoot() { 267*16467b97STreehugger Robot var found = execParser(t057autoAST17Lexer, t057autoAST17Parser, "a", "int a"); 268*16467b97STreehugger Robot assertEquals("(int a)", found); 269*16467b97STreehugger Robot} 270*16467b97STreehugger Robot 271*16467b97STreehugger Robotfunction testInvokeRuleAsRootWithLabel() { 272*16467b97STreehugger Robot var found = execParser(t057autoAST18Lexer, t057autoAST18Parser, "a", "int a"); 273*16467b97STreehugger Robot assertEquals("(int a)", found); 274*16467b97STreehugger Robot} 275*16467b97STreehugger Robot 276*16467b97STreehugger Robotfunction testInvokeRuleAsRootWithListLabel() { 277*16467b97STreehugger Robot var found = execParser(t057autoAST19Lexer, t057autoAST19Parser, "a", "int a"); 278*16467b97STreehugger Robot assertEquals("(int a)", found); 279*16467b97STreehugger Robot} 280*16467b97STreehugger Robot 281*16467b97STreehugger Robotfunction testRuleRootInLoop() { 282*16467b97STreehugger Robot var found = execParser(t057autoAST20Lexer, t057autoAST20Parser, "a", "a+b+c+d"); 283*16467b97STreehugger Robot assertEquals("(+ (+ (+ a b) c) d)", found); 284*16467b97STreehugger Robot} 285*16467b97STreehugger Robot 286*16467b97STreehugger Robotfunction testRuleInvocationRuleRootInLoop() { 287*16467b97STreehugger Robot var found = execParser(t057autoAST21Lexer, t057autoAST21Parser, "a", "a+b+c-d"); 288*16467b97STreehugger Robot assertEquals("(- (+ (+ a b) c) d)", found); 289*16467b97STreehugger Robot} 290*16467b97STreehugger Robot 291*16467b97STreehugger Robotfunction testTailRecursion() { 292*16467b97STreehugger Robot var found = execParser(t057autoAST22Lexer, t057autoAST22Parser, "s", "3 exp 4 exp 5"); 293*16467b97STreehugger Robot assertEquals("(exp 3 (exp 4 5))", found); 294*16467b97STreehugger Robot} 295*16467b97STreehugger Robot 296*16467b97STreehugger Robotfunction testSet() { 297*16467b97STreehugger Robot var found = execParser(t057autoAST23Lexer, t057autoAST23Parser, "a", "abc"); 298*16467b97STreehugger Robot assertEquals("abc", found); 299*16467b97STreehugger Robot} 300*16467b97STreehugger Robot 301*16467b97STreehugger Robotfunction testSetRoot() { 302*16467b97STreehugger Robot var found = execParser(t057autoAST24Lexer, t057autoAST24Parser, "a", "+abc"); 303*16467b97STreehugger Robot assertEquals("(+ abc)", found); 304*16467b97STreehugger Robot} 305*16467b97STreehugger Robot 306*16467b97STreehugger Robot//@testbase.broken("FAILS until antlr.g rebuilt in v3", RuntimeError); 307*16467b97STreehugger Robotfunction testSetRootWithLabel() { 308*16467b97STreehugger Robot var found = execParser(t057autoAST25Lexer, t057autoAST25Parser, "a", "+abc"); 309*16467b97STreehugger Robot assertEquals("(+ abc)", found); 310*16467b97STreehugger Robot} 311*16467b97STreehugger Robot 312*16467b97STreehugger Robotfunction testSetAsRuleRootInLoop() { 313*16467b97STreehugger Robot var found = execParser(t057autoAST26Lexer, t057autoAST26Parser, "a", "a+b-c"); 314*16467b97STreehugger Robot assertEquals("(- (+ a b) c)", found); 315*16467b97STreehugger Robot} 316*16467b97STreehugger Robot 317*16467b97STreehugger Robotfunction testNotSet() { 318*16467b97STreehugger Robot var found = execParser(t057autoAST27Lexer, t057autoAST27Parser, "a", "34+2"); 319*16467b97STreehugger Robot assertEquals("34 + 2", found); 320*16467b97STreehugger Robot} 321*16467b97STreehugger Robot 322*16467b97STreehugger Robotfunction testNotSetWithLabel() { 323*16467b97STreehugger Robot var found = execParser(t057autoAST28Lexer, t057autoAST28Parser, "a", "34+2"); 324*16467b97STreehugger Robot assertEquals("34 + 2", found); 325*16467b97STreehugger Robot} 326*16467b97STreehugger Robot 327*16467b97STreehugger Robotfunction testNotSetWithListLabel() { 328*16467b97STreehugger Robot var found = execParser(t057autoAST29Lexer, t057autoAST29Parser, "a", "34+2"); 329*16467b97STreehugger Robot assertEquals("34 + 2", found); 330*16467b97STreehugger Robot} 331*16467b97STreehugger Robot 332*16467b97STreehugger Robotfunction testNotSetRoot() { 333*16467b97STreehugger Robot var found = execParser(t057autoAST30Lexer, t057autoAST30Parser, "a", "34 55"); 334*16467b97STreehugger Robot assertEquals("(34 55)", found); 335*16467b97STreehugger Robot} 336*16467b97STreehugger Robot 337*16467b97STreehugger Robotfunction testNotSetRootWithLabel() { 338*16467b97STreehugger Robot var found = execParser(t057autoAST31Lexer, t057autoAST31Parser, "a", "34 55"); 339*16467b97STreehugger Robot assertEquals("(34 55)", found); 340*16467b97STreehugger Robot} 341*16467b97STreehugger Robot 342*16467b97STreehugger Robotfunction testNotSetRootWithListLabel() { 343*16467b97STreehugger Robot var found = execParser(t057autoAST32Lexer, t057autoAST32Parser, "a", "34 55"); 344*16467b97STreehugger Robot assertEquals("(34 55)", found); 345*16467b97STreehugger Robot} 346*16467b97STreehugger Robot 347*16467b97STreehugger Robotfunction testNotSetRuleRootInLoop() { 348*16467b97STreehugger Robot var found = execParser(t057autoAST33Lexer, t057autoAST33Parser, "a", "3+4+5"); 349*16467b97STreehugger Robot assertEquals("(+ (+ 3 4) 5)", found); 350*16467b97STreehugger Robot} 351*16467b97STreehugger Robot 352*16467b97STreehugger Robot//@testbase.broken("FIXME: What happened to the semicolon?", AssertionError); 353*16467b97STreehugger Robotfunction testTokenLabelReuse() { 354*16467b97STreehugger Robot// check for compilation problem due to multiple defines 355*16467b97STreehugger Robot var found = execParser(t057autoAST34Lexer, t057autoAST34Parser, "a", "a b"); 356*16467b97STreehugger Robot assertEquals("2nd id=b;a b", found); 357*16467b97STreehugger Robot} 358*16467b97STreehugger Robot 359*16467b97STreehugger Robotfunction testTokenLabelReuse2() { 360*16467b97STreehugger Robot// check for compilation problem due to multiple defines 361*16467b97STreehugger Robot var found = execParser(t057autoAST35Lexer, t057autoAST35Parser, "a", "a b"); 362*16467b97STreehugger Robot assertEquals("2nd id=b,(b a)", found); 363*16467b97STreehugger Robot} 364*16467b97STreehugger Robot 365*16467b97STreehugger Robotfunction testTokenListLabelReuse() { 366*16467b97STreehugger Robot// check for compilation problem due to multiple defines 367*16467b97STreehugger Robot// make sure ids has both ID tokens 368*16467b97STreehugger Robot var found = execParser(t057autoAST36Lexer, t057autoAST36Parser, "a", "a b"); 369*16467b97STreehugger Robot expecting = "id list=[a,b],a b" 370*16467b97STreehugger Robot assertEquals(expecting, found); 371*16467b97STreehugger Robot} 372*16467b97STreehugger Robot 373*16467b97STreehugger Robotfunction testTokenListLabelReuse2() { 374*16467b97STreehugger Robot// check for compilation problem due to multiple defines 375*16467b97STreehugger Robot// make sure ids has both ID tokens 376*16467b97STreehugger Robot var found = execParser(t057autoAST37Lexer, t057autoAST37Parser, "a", "a b"); 377*16467b97STreehugger Robot expecting = "id list=[a,b],(a b)" 378*16467b97STreehugger Robot assertEquals(expecting, found); 379*16467b97STreehugger Robot} 380*16467b97STreehugger Robot 381*16467b97STreehugger Robotfunction testTokenListLabelRuleRoot() { 382*16467b97STreehugger Robot var found = execParser(t057autoAST38Lexer, t057autoAST38Parser, "a", "a"); 383*16467b97STreehugger Robot assertEquals("a", found); 384*16467b97STreehugger Robot} 385*16467b97STreehugger Robot 386*16467b97STreehugger Robotfunction testTokenListLabelBang() { 387*16467b97STreehugger Robot var found = execParser(t057autoAST39Lexer, t057autoAST39Parser, "a", "a"); 388*16467b97STreehugger Robot assertEquals("", found); 389*16467b97STreehugger Robot} 390*16467b97STreehugger Robot 391*16467b97STreehugger Robotfunction testRuleListLabel() { 392*16467b97STreehugger Robot var found = execParser(t057autoAST40Lexer, t057autoAST40Parser, "a", "a b"); 393*16467b97STreehugger Robot assertEquals("2nd x=b,a b", found); 394*16467b97STreehugger Robot} 395*16467b97STreehugger Robot 396*16467b97STreehugger Robotfunction testRuleListLabelRuleRoot() { 397*16467b97STreehugger Robot var found = execParser(t057autoAST41Lexer, t057autoAST41Parser, "a", "a b"); 398*16467b97STreehugger Robot assertEquals("x=(b a),(b a)", found); 399*16467b97STreehugger Robot} 400*16467b97STreehugger Robot 401*16467b97STreehugger Robotfunction testRuleListLabelBang() { 402*16467b97STreehugger Robot var found = execParser(t057autoAST42Lexer, t057autoAST42Parser, "a", "a b"); 403*16467b97STreehugger Robot assertEquals("1st x=a,b", found); 404*16467b97STreehugger Robot} 405*16467b97STreehugger Robot 406*16467b97STreehugger Robotfunction testComplicatedMelange() { 407*16467b97STreehugger Robot// check for compilation problem 408*16467b97STreehugger Robot var found = execParser(t057autoAST43Lexer, t057autoAST43Parser, "a", "a b b c c d"); 409*16467b97STreehugger Robot assertEquals("a b b c c d", found); 410*16467b97STreehugger Robot} 411*16467b97STreehugger Robot 412*16467b97STreehugger Robotfunction testReturnValueWithAST() { 413*16467b97STreehugger Robot var found = execParser(t057autoAST44Lexer, t057autoAST44Parser, "a", "abc 34"); 414*16467b97STreehugger Robot assertEquals("34\nabc 34", found); 415*16467b97STreehugger Robot} 416*16467b97STreehugger Robot 417*16467b97STreehugger Robotfunction testSetLoop() { 418*16467b97STreehugger Robot var found = execParser(t057autoAST45Lexer, t057autoAST45Parser, "r", "abc 34 d"); 419*16467b97STreehugger Robot assertEquals("abc 34 d", found); 420*16467b97STreehugger Robot} 421*16467b97STreehugger Robot 422*16467b97STreehugger Robotfunction testExtraTokenInSimpleDecl() { 423*16467b97STreehugger Robot found, errors = execParser(t057autoAST46Lexer, t057autoAST46Parser, "decl", "int 34 x=1;", 424*16467b97STreehugger Robot true); 425*16467b97STreehugger Robot assertEquals(["line 1:4 extraneous input u'34' expecting ID"], 426*16467b97STreehugger Robot errors); 427*16467b97STreehugger Robot assertEquals("(int x 1)", found); // tree gets correct x and 1 tokens 428*16467b97STreehugger Robot} 429*16467b97STreehugger Robot 430*16467b97STreehugger Robotfunction testMissingIDInSimpleDecl() { 431*16467b97STreehugger Robot found, errors = execParser(t057autoAST47Lexer, t057autoAST47Parser, "decl", "int =1;", 432*16467b97STreehugger Robot true); 433*16467b97STreehugger Robot assertEquals(["line 1:4 missing ID at u'='"], errors); 434*16467b97STreehugger Robot assertEquals("(int <missing ID> 1)", found); // tree gets invented ID token 435*16467b97STreehugger Robot} 436*16467b97STreehugger Robot 437*16467b97STreehugger Robotfunction testMissingSetInSimpleDecl() { 438*16467b97STreehugger Robot found, errors = execParser(t057autoAST48Lexer, t057autoAST48Parser, "decl", "x=1;", 439*16467b97STreehugger Robot true); 440*16467b97STreehugger Robot assertEquals(["line 1:0 mismatched input u'x' expecting set None"], errors); 441*16467b97STreehugger Robot assertEquals("(<error: x> x 1)", found); // tree gets invented ID token 442*16467b97STreehugger Robot} 443*16467b97STreehugger Robot 444*16467b97STreehugger Robotfunction testMissingTokenGivesErrorNode() { 445*16467b97STreehugger Robot found, errors = execParser(t057autoAST49Lexer, t057autoAST49Parser, "a", "abc", true); 446*16467b97STreehugger Robot assertEquals(["line 0:-1 missing INT at '<EOF>'"], errors); 447*16467b97STreehugger Robot assertEquals("abc <missing INT>", found); 448*16467b97STreehugger Robot} 449*16467b97STreehugger Robot 450*16467b97STreehugger Robotfunction testMissingTokenGivesErrorNodeInInvokedRule() { 451*16467b97STreehugger Robot found, errors = execParser(t057autoAST50Lexer, t057autoAST50Parser, "a", "abc", true); 452*16467b97STreehugger Robot assertEquals(["line 0:-1 missing INT at '<EOF>'"], errors); 453*16467b97STreehugger Robot assertEquals("abc <missing INT>", found); 454*16467b97STreehugger Robot} 455*16467b97STreehugger Robot 456*16467b97STreehugger Robotfunction testExtraTokenGivesErrorNode() { 457*16467b97STreehugger Robot found, errors = execParser(t057autoAST51Lexer, t057autoAST51Parser, "a", "abc ick 34", 458*16467b97STreehugger Robot true); 459*16467b97STreehugger Robot assertEquals(["line 1:4 extraneous input u'ick' expecting INT"], 460*16467b97STreehugger Robot errors); 461*16467b97STreehugger Robot assertEquals("abc 34", found); 462*16467b97STreehugger Robot} 463*16467b97STreehugger Robot 464*16467b97STreehugger Robotfunction testMissingFirstTokenGivesErrorNode() { 465*16467b97STreehugger Robot found, errors = execParser(t057autoAST52Lexer, t057autoAST52Parser, "a", "34", true); 466*16467b97STreehugger Robot assertEquals(["line 1:0 missing ID at u'34'"], errors); 467*16467b97STreehugger Robot assertEquals("<missing ID> 34", found); 468*16467b97STreehugger Robot} 469*16467b97STreehugger Robot 470*16467b97STreehugger Robotfunction testMissingFirstTokenGivesErrorNode2() { 471*16467b97STreehugger Robot found, errors = execParser(t057autoAST53Lexer, t057autoAST53Parser, "a", "34", true); 472*16467b97STreehugger Robot// finds an error at the first token, 34, and re-syncs. 473*16467b97STreehugger Robot// re-synchronizing does not consume a token because 34 follows 474*16467b97STreehugger Robot// ref to rule b (start of c). It then matches 34 in c. 475*16467b97STreehugger Robot assertEquals(["line 1:0 missing ID at u'34'"], errors); 476*16467b97STreehugger Robot assertEquals("<missing ID> 34", found); 477*16467b97STreehugger Robot} 478*16467b97STreehugger Robot 479*16467b97STreehugger Robotfunction testNoViableAltGivesErrorNode() { 480*16467b97STreehugger Robot found, errors = execParser(t057autoAST54Lexer, t057autoAST54Parser, "a", "*", true); 481*16467b97STreehugger Robot assertEquals(["line 1:0 no viable alternative at input u'*'"], 482*16467b97STreehugger Robot errors); 483*16467b97STreehugger Robot assertEquals("<unexpected: [@0,0:0=u'*',<6>,1:0], resync=*>", 484*16467b97STreehugger Robot found); 485*16467b97STreehugger Robot} 486*16467b97STreehugger Robot 487*16467b97STreehugger Robot</script> 488*16467b97STreehugger Robot 489*16467b97STreehugger Robot</head> 490*16467b97STreehugger Robot<body> 491*16467b97STreehugger Robot <h1>t057autoAST</h1> 492*16467b97STreehugger Robot</body> 493*16467b97STreehugger Robot</html> 494*16467b97STreehugger Robot 495*16467b97STreehugger Robot 496