340 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			340 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			HTML
		
	
	
		
			Executable File
		
	
	
| <!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>t053hetero</title>
 | |
| 
 | |
| <!-- ANTLR includes -->
 | |
| <script type="text/javascript" src="../../lib/antlr3-all.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT1Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT1Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT2Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT2Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT3Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT3Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT4Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT4Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT5Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT5Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT6Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT6Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT7Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT7Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT8Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT8Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT9Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT9Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT10Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT10Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT11Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT11Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT12Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT12Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT13Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT13Parser.js"></script>
 | |
| <script type="text/javascript" src="t053heteroTP13Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT14Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT14Parser.js"></script>
 | |
| <script type="text/javascript" src="t053heteroTP14Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT15Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT15Parser.js"></script>
 | |
| <script type="text/javascript" src="t053heteroTP15Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT16Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT16Parser.js"></script>
 | |
| <script type="text/javascript" src="t053heteroTP16Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT17Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT17Parser.js"></script>
 | |
| <script type="text/javascript" src="t053heteroTP17Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT18Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT18Parser.js"></script>
 | |
| <script type="text/javascript" src="t053heteroTP18Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroT18Lexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroT18Parser.js"></script>
 | |
| <script type="text/javascript" src="t053heteroTP18Parser.js"></script>
 | |
| 
 | |
| <script type="text/javascript" src="t053heteroTLexer.js"></script>
 | |
| <script type="text/javascript" src="t053heteroTParser.js"></script>
 | |
| <script type="text/javascript" src="t053heteroTPParser.js"></script>
 | |
| 
 | |
| <!-- JsUnit include -->
 | |
| <script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
 | |
| 
 | |
| <!-- Test Code -->
 | |
| <script type="text/javascript">
 | |
|     // Parser Tests
 | |
| 
 | |
|     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]();
 | |
| 
 | |
|         if (r) {
 | |
|             return r.getTree().toStringTree();
 | |
|         }
 | |
|         return "";
 | |
|     }
 | |
| 
 | |
|     function execTreeParser(lexerCls, parserCls, grammarEntry, walkerCls, treeEntry, 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]();
 | |
| 
 | |
|         var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree());
 | |
|         nodes.setTokenStream(tstream);
 | |
|         var walker = new walkerCls(nodes);
 | |
|         r = walker[treeEntry]();
 | |
| 
 | |
|         if (r) {
 | |
|             return r.getTree().toStringTree();
 | |
|         }
 | |
|         return "";
 | |
|     }
 | |
| 
 | |
| 
 | |
|     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;
 | |
|     }
 | |
| 
 | |
|     // PARSERS -- AUTO AST
 | |
| 
 | |
|     function testToken() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT1Lexer,
 | |
|                 t053heteroT1Parser,
 | |
|                 "a",
 | |
|                 "a");
 | |
|         assertEquals("a<V>", found);
 | |
|     }
 | |
| 
 | |
|     function testTokenWithLabel() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT2Lexer,
 | |
|                 t053heteroT2Parser,
 | |
|                 "a",
 | |
|                 "a");
 | |
|         assertEquals("a<V>", found);
 | |
|     }
 | |
| 
 | |
|     function testTokenWithListLabel() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT3Lexer,
 | |
|                 t053heteroT3Parser,
 | |
|                 "a",
 | |
|                 "a");
 | |
|         assertEquals("a<V>", found);
 | |
|     }
 | |
| 
 | |
|     function testTokenRoot() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT4Lexer,
 | |
|                 t053heteroT4Parser,
 | |
|                 "a",
 | |
|                 "a");
 | |
|         assertEquals("a<V>", found);
 | |
|     }
 | |
| 
 | |
|     function testTokenRootWithListLabel() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT5Lexer,
 | |
|                 t053heteroT5Parser,
 | |
|                 "a",
 | |
|                 "a");
 | |
|         assertEquals("a<V>", found);
 | |
|     }
 | |
| 
 | |
|     function testString() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT6Lexer,
 | |
|                 t053heteroT6Parser,
 | |
|                 "a",
 | |
|                 "begin");
 | |
|         assertEquals("begin<V>", found);
 | |
|     }
 | |
| 
 | |
|     function testStringRoot() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT7Lexer,
 | |
|                 t053heteroT7Parser,
 | |
|                 "a",
 | |
|                 "begin");
 | |
|         assertEquals("begin<V>", found);
 | |
|     }
 | |
| 
 | |
|     // PARSERS -- REWRITE AST
 | |
| 
 | |
|     function testRewriteToken() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT8Lexer,
 | |
|                 t053heteroT8Parser,
 | |
|                 "a",
 | |
|                 "a");
 | |
|         assertEquals("a<V>", found);
 | |
|     }
 | |
| 
 | |
|     function testrewritetokenwithargs() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT9Lexer,
 | |
|                 t053heteroT9Parser,
 | |
|                 "a",
 | |
|                 "a");
 | |
|         assertEquals("<V>;421930 a<V>;9900", found);
 | |
|     }
 | |
| 
 | |
|     function testRewriteTokenRoot() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT10Lexer,
 | |
|                 t053heteroT10Parser,
 | |
|                 "a",
 | |
|                 "a 2");
 | |
|         assertEquals("(a<V> 2)", found);
 | |
|     }
 | |
| 
 | |
|     function testRewriteString() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT11Lexer,
 | |
|                 t053heteroT11Parser,
 | |
|                 "a",
 | |
|                 "begin");
 | |
|         assertEquals("begin<V>", found);
 | |
|     }
 | |
| 
 | |
|     function testRewriteStringRoot() {
 | |
|         var found = execParser(
 | |
|                 t053heteroT12Lexer,
 | |
|                 t053heteroT12Parser,
 | |
|                 "a",
 | |
|                 "begin 2");
 | |
|         assertEquals("(begin<V> 2)", found);
 | |
|     }
 | |
| 
 | |
|     // TREE PARSERS -- REWRITE AST
 | |
| 
 | |
|     function testTreeParserRewriteFlatList() {
 | |
|         var found = execTreeParser(
 | |
|                 t053heteroT13Lexer,
 | |
|                 t053heteroT13Parser,
 | |
|                 "a",
 | |
|                 t053heteroTP13Parser,
 | |
|                 "a",
 | |
|                 "abc 34");
 | |
|         assertEquals("34<V> abc<W>", found);
 | |
|     }
 | |
| 
 | |
|     function testTreeParserRewriteTree() {
 | |
|         var found = execTreeParser(
 | |
|                 t053heteroT14Lexer,
 | |
|                 t053heteroT14Parser,
 | |
|                 "a",
 | |
|                 t053heteroTP14Parser,
 | |
|                 "a",
 | |
|                 "abc 34");
 | |
|         assertEquals("(34<V> abc<W>)", found);
 | |
|     }
 | |
| 
 | |
|     function testTreeParserRewriteImaginary() {
 | |
|         var found = execTreeParser(
 | |
|                 t053heteroT15Lexer,
 | |
|                 t053heteroT15Parser,
 | |
|                 "a",
 | |
|                 t053heteroTP15Parser,
 | |
|                 "a",
 | |
|                 "abc");
 | |
|         assertEquals("ROOT<V> abc", found);
 | |
|     }
 | |
| 
 | |
|     function testTreeParserRewriteImaginaryWithArgs() {
 | |
|         var found = execTreeParser(
 | |
|                 t053heteroT16Lexer,
 | |
|                 t053heteroT16Parser,
 | |
|                 "a",
 | |
|                 t053heteroTP16Parser,
 | |
|                 "a",
 | |
|                 "abc");
 | |
|         assertEquals("ROOT<V>;42 abc", found);
 | |
|     }
 | |
| 
 | |
|     function testTreeParserRewriteImaginaryRoot() {
 | |
|         var found = execTreeParser(
 | |
|                 t053heteroT17Lexer,
 | |
|                 t053heteroT17Parser,
 | |
|                 "a",
 | |
|                 t053heteroTP17Parser,
 | |
|                 "a",
 | |
|                 "abc");
 | |
|         assertEquals("(ROOT<V> abc)", found);
 | |
|     }
 | |
| 
 | |
|     function testTreeParserRewriteImaginaryFromReal() {
 | |
|         var found = execTreeParser(
 | |
|                 t053heteroT18Lexer,
 | |
|                 t053heteroT18Parser,
 | |
|                 "a",
 | |
|                 t053heteroTP18Parser,
 | |
|                 "a",
 | |
|                 "abc");
 | |
|         assertEquals("ROOT<V>@1", found);
 | |
|     }
 | |
| 
 | |
|     function testTreeParserAutoHeteroAST() {
 | |
|         var found = execTreeParser(
 | |
|                 t053heteroTLexer,
 | |
|                 t053heteroTParser,
 | |
|                 "a",
 | |
|                 t053heteroTPParser,
 | |
|                 "a",
 | |
|                 "abc;");
 | |
|         assertEquals("abc<V> ;<V>", found);
 | |
|     }
 | |
| </script>
 | |
| 
 | |
| </head>
 | |
| <body>
 | |
|     <h1>t053hetero</h1>
 | |
| </body>
 | |
| </html>
 |