You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
340 lines
11 KiB
340 lines
11 KiB
<!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>
|