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>t056lexer</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="t056lexer1Lexer.js"></script> 10*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer1Parser.js"></script> 11*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer2Lexer.js"></script> 12*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer2Parser.js"></script> 13*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer3Lexer.js"></script> 14*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer3Parser.js"></script> 15*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer4Lexer.js"></script> 16*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer4Parser.js"></script> 17*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer5Lexer.js"></script> 18*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer5Parser.js"></script> 19*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer6Lexer.js"></script> 20*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer6Parser.js"></script> 21*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer7Lexer.js"></script> 22*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer7Parser.js"></script> 23*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer8Lexer.js"></script> 24*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer8Parser.js"></script> 25*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer9Lexer.js"></script> 26*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer9Parser.js"></script> 27*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer10Lexer.js"></script> 28*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer10Parser.js"></script> 29*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer11Lexer.js"></script> 30*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer11Parser.js"></script> 31*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer12.js"></script> 32*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer13.js"></script> 33*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer14.js"></script> 34*16467b97STreehugger Robot<script type="text/javascript" src="t056lexer15.js"></script> 35*16467b97STreehugger Robot 36*16467b97STreehugger Robot<!-- JsUnit include --> 37*16467b97STreehugger Robot<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script> 38*16467b97STreehugger Robot 39*16467b97STreehugger Robot<!-- Test Code --> 40*16467b97STreehugger Robot<script type="text/javascript"> 41*16467b97STreehugger Robot function execParser(lexerCls, parserCls, grammarEntry, xinput) 42*16467b97STreehugger Robot { 43*16467b97STreehugger Robot var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), 44*16467b97STreehugger Robot lexer = new lexerCls(cstream), 45*16467b97STreehugger Robot tstream = new org.antlr.runtime.CommonTokenStream(lexer), 46*16467b97STreehugger Robot parser = new parserCls(tstream), 47*16467b97STreehugger Robot output = ""; 48*16467b97STreehugger Robot lexer.xlog = function(msg){output += msg;}; 49*16467b97STreehugger Robot parser.xlog = lexer.xlog; 50*16467b97STreehugger Robot var r = parser[grammarEntry](); 51*16467b97STreehugger Robot 52*16467b97STreehugger Robot return output; 53*16467b97STreehugger Robot } 54*16467b97STreehugger Robot 55*16467b97STreehugger Robot function execLexer(lexerCls, xinput) { 56*16467b97STreehugger Robot var token, 57*16467b97STreehugger Robot cstream = new org.antlr.runtime.ANTLRStringStream(xinput), 58*16467b97STreehugger Robot lexer = new lexerCls(cstream); 59*16467b97STreehugger Robot do { 60*16467b97STreehugger Robot token = lexer.nextToken(); 61*16467b97STreehugger Robot } while (token.getType()!==lexer.EOF); 62*16467b97STreehugger Robot } 63*16467b97STreehugger Robot 64*16467b97STreehugger Robotfunction testSetText() { 65*16467b97STreehugger Robot var found = execParser(t056lexer1Lexer, t056lexer1Parser, "a", "\\t"); 66*16467b97STreehugger Robot assertEquals(" ", found); 67*16467b97STreehugger Robot} 68*16467b97STreehugger Robot 69*16467b97STreehugger Robotfunction testRefToRuleDoesNotSetTokenNorEmitAnother() { 70*16467b97STreehugger Robot // this must return A not I to the parser; calling a nonfragment rule 71*16467b97STreehugger Robot // from a nonfragment rule does not set the overall token. 72*16467b97STreehugger Robot var found = execParser(t056lexer2Lexer, t056lexer2Parser, "a", "-34"); 73*16467b97STreehugger Robot assertEquals("-34", found); 74*16467b97STreehugger Robot} 75*16467b97STreehugger Robot 76*16467b97STreehugger Robotfunction testRefToRuleDoesNotSetChannel() { 77*16467b97STreehugger Robot // this must set channel of A to HIDDEN. $channel is local to rule 78*16467b97STreehugger Robot // like $type. 79*16467b97STreehugger Robot var found = execParser(t056lexer3Lexer, t056lexer3Parser, "a", "- 34"); 80*16467b97STreehugger Robot assertEquals("- 34, channel=0", found); 81*16467b97STreehugger Robot} 82*16467b97STreehugger Robot 83*16467b97STreehugger Robotfunction testWeCanSetType() { 84*16467b97STreehugger Robot var found = execParser(t056lexer4Lexer, t056lexer4Parser, "a", "-34"); 85*16467b97STreehugger Robot assertEquals("-34", found); 86*16467b97STreehugger Robot} 87*16467b97STreehugger Robot 88*16467b97STreehugger Robotfunction testRefToFragment() { 89*16467b97STreehugger Robot // this must return A not I to the parser; calling a nonfragment rule 90*16467b97STreehugger Robot // from a nonfragment rule does not set the overall token. 91*16467b97STreehugger Robot var found = execParser(t056lexer5Lexer, t056lexer5Parser, "a", "-34"); 92*16467b97STreehugger Robot assertEquals("-34", found); 93*16467b97STreehugger Robot} 94*16467b97STreehugger Robot 95*16467b97STreehugger Robotfunction testMultipleRefToFragment() { 96*16467b97STreehugger Robot // this must return A not I to the parser; calling a nonfragment rule 97*16467b97STreehugger Robot // from a nonfragment rule does not set the overall token. 98*16467b97STreehugger Robot var found = execParser(t056lexer6Lexer, t056lexer6Parser, "a", "3.14159"); 99*16467b97STreehugger Robot assertEquals("3.14159", found); 100*16467b97STreehugger Robot} 101*16467b97STreehugger Robot 102*16467b97STreehugger Robotfunction testLabelInSubrule() { 103*16467b97STreehugger Robot // can we see v outside? 104*16467b97STreehugger Robot var found = execParser(t056lexer7Lexer, t056lexer7Parser, "a", "hi 342"); 105*16467b97STreehugger Robot assertEquals("342", found); 106*16467b97STreehugger Robot} 107*16467b97STreehugger Robot 108*16467b97STreehugger Robotfunction testRefToTokenInLexer() { 109*16467b97STreehugger Robot var found = execParser(t056lexer8Lexer, t056lexer8Parser, "a", "342"); 110*16467b97STreehugger Robot assertEquals("342", found); 111*16467b97STreehugger Robot} 112*16467b97STreehugger Robot 113*16467b97STreehugger Robotfunction testListLabelInLexer() { 114*16467b97STreehugger Robot var found = execParser(t056lexer9Lexer, t056lexer9Parser, "a", "33 297"); 115*16467b97STreehugger Robot assertEquals(" 33 297", found); 116*16467b97STreehugger Robot} 117*16467b97STreehugger Robot 118*16467b97STreehugger Robotfunction testDupListRefInLexer() { 119*16467b97STreehugger Robot var found = execParser(t056lexer10Lexer, t056lexer10Parser, "a", "33 297"); 120*16467b97STreehugger Robot assertEquals(" 33 297", found); 121*16467b97STreehugger Robot} 122*16467b97STreehugger Robot 123*16467b97STreehugger Robotfunction testCharLabelInLexer() { 124*16467b97STreehugger Robot var found = execParser(t056lexer11Lexer, t056lexer11Parser, "a", "a"); 125*16467b97STreehugger Robot assertEquals("a", found); 126*16467b97STreehugger Robot} 127*16467b97STreehugger Robot 128*16467b97STreehugger Robotfunction testRepeatedLabelInLexer() { 129*16467b97STreehugger Robot execLexer(t056lexer12, "ababab"); 130*16467b97STreehugger Robot} 131*16467b97STreehugger Robot 132*16467b97STreehugger Robotfunction testRepeatedRuleLabelInLexer() { 133*16467b97STreehugger Robot execLexer(t056lexer13, "aa"); 134*16467b97STreehugger Robot} 135*16467b97STreehugger Robot 136*16467b97STreehugger Robotfunction testIsolatedEOTEdge() { 137*16467b97STreehugger Robot execLexer(t056lexer14, "qbalogna!q"); 138*16467b97STreehugger Robot} 139*16467b97STreehugger Robot 140*16467b97STreehugger Robotfunction testEscapedLiterals() { 141*16467b97STreehugger Robot execLexer(t056lexer15, "\\\""); 142*16467b97STreehugger Robot} 143*16467b97STreehugger Robot</script> 144*16467b97STreehugger Robot 145*16467b97STreehugger Robot</head> 146*16467b97STreehugger Robot<body> 147*16467b97STreehugger Robot <h1>t056lexer</h1> 148*16467b97STreehugger Robot</body> 149*16467b97STreehugger Robot</html> 150*16467b97STreehugger Robot 151