| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> |
| <head> |
| <meta http-equiv="content-type" content="text/html;charset=utf-8" /> |
| <title>t052import</title> |
| |
| <!-- ANTLR includes --> |
| <script type="text/javascript" src="../../lib/antlr3-all.js"></script> |
| |
| <script type="text/javascript" src="t052importS1.js"></script> |
| <script type="text/javascript" src="t052importM1_t052importS1.js"></script> |
| <script type="text/javascript" src="t052importM1Lexer.js"></script> |
| <script type="text/javascript" src="t052importM1Parser.js"></script> |
| |
| <script type="text/javascript" src="t052importS2.js"></script> |
| <script type="text/javascript" src="t052importM2_t052importS2.js"></script> |
| <script type="text/javascript" src="t052importM2Lexer.js"></script> |
| <script type="text/javascript" src="t052importM2Parser.js"></script> |
| |
| <script type="text/javascript" src="t052importS3.js"></script> |
| <script type="text/javascript" src="t052importM3_t052importS3.js"></script> |
| <script type="text/javascript" src="t052importM3Lexer.js"></script> |
| <script type="text/javascript" src="t052importM3Parser.js"></script> |
| |
| <script type="text/javascript" src="t052importS4.js"></script> |
| <script type="text/javascript" src="t052importT4.js"></script> |
| <script type="text/javascript" src="t052importM4_t052importS4.js"></script> |
| <script type="text/javascript" src="t052importM4_t052importT4.js"></script> |
| <script type="text/javascript" src="t052importM4Lexer.js"></script> |
| <script type="text/javascript" src="t052importM4Parser.js"></script> |
| |
| <script type="text/javascript" src="t052importS5.js"></script> |
| <script type="text/javascript" src="t052importT5.js"></script> |
| <script type="text/javascript" src="t052importM5_t052importS5.js"></script> |
| <script type="text/javascript" src="t052importM5_t052importT5.js"></script> |
| <script type="text/javascript" src="t052importM5Lexer.js"></script> |
| <script type="text/javascript" src="t052importM5Parser.js"></script> |
| |
| <script type="text/javascript" src="t052importS6.js"></script> |
| <script type="text/javascript" src="t052importM6_t052importS6.js"></script> |
| <script type="text/javascript" src="t052importM6Lexer.js"></script> |
| <script type="text/javascript" src="t052importM6Parser.js"></script> |
| |
| <script type="text/javascript" src="t052importS7.js"></script> |
| <script type="text/javascript" src="t052importM7_t052importS7.js"></script> |
| <script type="text/javascript" src="t052importM7.js"></script> |
| |
| <script type="text/javascript" src="t052importS8.js"></script> |
| <script type="text/javascript" src="t052importM8_t052importS8.js"></script> |
| <script type="text/javascript" src="t052importM8.js"></script> |
| |
| <!-- JsUnit include --> |
| <script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script> |
| |
| <!-- Test Code --> |
| <script type="text/javascript"> |
| // Parser Tests |
| |
| function execLexer(lexerCls, xinput) { |
| var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), |
| lexer = new (EnhancedParser(lexerCls))(cstream), |
| token; |
| |
| while (true) { |
| token = lexer.nextToken(); |
| if (!token || token.getType()===org.antlr.runtime.Token.EOF) { |
| break; |
| } |
| lexer.buf += token.getText(); |
| } |
| |
| return lexer.buf; |
| } |
| |
| function execParser(lexerCls, parserCls, grammarEntry, xinput) { |
| var cstream = new org.antlr.runtime.ANTLRStringStream(xinput), |
| lexer = new (EnhancedParser(lexerCls))(cstream), |
| tstream = new org.antlr.runtime.CommonTokenStream(lexer), |
| parser = new (EnhancedParser(parserCls))(tstream); |
| var r = parser[grammarEntry](); |
| |
| return parser.buf; |
| } |
| |
| function EnhancedParser(base) { |
| var T = function() { |
| T.superclass.constructor.apply(this, arguments); |
| this.traces = []; |
| this.buf = ""; |
| }; |
| |
| org.antlr.lang.extend(T, base, { |
| capture: function(t) { |
| this.buf += t; |
| }, |
| traceIn: function(ruleName, ruleIndex) { |
| this.traces.push(">"+ruleName); |
| }, |
| traceOut: function(ruleName, ruleIndex) { |
| this.traces.push("<"+ruleName); |
| }, |
| reportError: function(input, re) { |
| throw re; |
| } |
| }); |
| |
| return T; |
| } |
| |
| function testDelegatorInvokesDelegateRule() { |
| var found = execParser(t052importM1Lexer, |
| t052importM1Parser, |
| "s", |
| "b"); |
| assertEquals("S.a", found); |
| } |
| |
| function testDelegatorInvokesDelegateRuleWithArgs() { |
| var found = execParser(t052importM2Lexer, |
| t052importM2Parser, |
| "s", |
| "b"); |
| assertEquals("S.a1000", found); |
| } |
| |
| function testDelegatorAccessesDelegateMembers() { |
| var found = execParser(t052importM3Lexer, |
| t052importM3Parser, |
| "s", |
| "b"); |
| assertEquals("foo", found); |
| } |
| |
| function testDelegatorInvokesFirstVersionOfDelegateRule() { |
| var found = execParser(t052importM4Lexer, |
| t052importM4Parser, |
| "s", |
| "b"); |
| assertEquals("S.a", found); |
| } |
| |
| function testDelegatesSeeSameTokenType() { |
| var found = execParser(t052importM5Lexer, |
| t052importM5Parser, |
| "s", |
| "aa"); |
| assertEquals("S.x T.y", found); |
| } |
| |
| function testDelegatorRuleOverridesDelegate() { |
| var found = execParser(t052importM6Lexer, |
| t052importM6Parser, |
| "a", |
| "c"); |
| assertEquals("S.a", found); |
| } |
| |
| // Lexer Tests |
| |
| function testLexerDelegatorInvokesDelegateRule() { |
| var found = execLexer(t052importM7, "abc"); |
| assertEquals("S.A abc", found); |
| } |
| |
| function testLexerDelegatorRuleOverridesDelegate() { |
| var found = execLexer(t052importM8, "a"); |
| assertEquals("M.A a", found); |
| } |
| </script> |
| |
| </head> |
| <body> |
| <h1>t052import</h1> |
| </body> |
| </html> |