<!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>