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.

130 lines
5.1 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>t047treeparser</title>
<!-- ANTLR includes -->
<script type="text/javascript" src="../../lib/antlr3-all.js"></script>
<script type="text/javascript" src="t047treeparserLexer.js"></script>
<script type="text/javascript" src="t047treeparserParser.js"></script>
<script type="text/javascript" src="t047treeparserWalker.js"></script>
<!-- JsUnit include -->
<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
<!-- Test Code -->
<script type="text/javascript">
var TLexer = function() {
TLexer.superclass.constructor.apply(this, arguments);
};
org.antlr.lang.extend(TLexer, t047treeparserLexer, {
reportError: function(re) {
throw re;
}
});
var TParser = function() {
TParser.superclass.constructor.apply(this, arguments);
};
org.antlr.lang.extend(TParser, t047treeparserParser, {
recover: function(re) {
throw new PrivateError(re);
}
});
var TWalker = function() {
TWalker.superclass.constructor.apply(this, arguments);
this.traces = [];
};
org.antlr.lang.extend(TWalker, t047treeparserWalker, {
recover: function(re) {
throw new PrivateError(re);
},
traceIn: function(ruleName, ruleIndex) {
this.traces.push(">"+ruleName);
},
traceOut: function(ruleName, ruleIndex) {
this.traces.push("<"+ruleName);
}
});
function testWalker() {
var xinput = [
"char c;",
"int x;",
"",
"void bar(int x);",
"",
"int foo(int y, char d) {",
" int i;",
" for (i=0; i<3; i=i+1) {",
" x=3;",
" y=5;",
" }",
"}"
].join("\n"),
xoutput = "(VAR_DEF char c) (VAR_DEF int x) (FUNC_DECL (FUNC_HDR void bar (ARG_DEF int x))) (FUNC_DEF (FUNC_HDR int foo (ARG_DEF int y) (ARG_DEF char d)) (BLOCK (VAR_DEF int i) (for (= i 0) (< i 3) (= i (+ i 1)) (BLOCK (= x 3) (= y 5)))))",
traces = [
'>program', '>declaration', '>variable', '>type', '<type',
'>declarator', '<declarator', '<variable', '<declaration',
'>declaration', '>variable', '>type', '<type', '>declarator',
'<declarator', '<variable', '<declaration', '>declaration',
'>functionHeader', '>type', '<type', '>formalParameter',
'>type', '<type', '>declarator', '<declarator',
'<formalParameter', '<functionHeader', '<declaration',
'>declaration', '>functionHeader', '>type', '<type',
'>formalParameter', '>type', '<type', '>declarator',
'<declarator', '<formalParameter', '>formalParameter', '>type',
'<type', '>declarator', '<declarator', '<formalParameter',
'<functionHeader', '>block', '>variable', '>type', '<type',
'>declarator', '<declarator', '<variable', '>stat', '>forStat',
'>expr', '>expr', '>atom', '<atom', '<expr', '<expr', '>expr',
'>expr', '>atom', '<atom', '<expr', '>expr', '>atom', '<atom',
'<expr', '<expr', '>expr', '>expr', '>expr', '>atom', '<atom',
'<expr', '>expr', '>atom', '<atom', '<expr', '<expr', '<expr',
'>block', '>stat', '>expr', '>expr', '>atom', '<atom', '<expr',
'<expr', '<stat', '>stat', '>expr', '>expr', '>atom', '<atom',
'<expr', '<expr', '<stat', '<block', '<forStat', '<stat',
'<block', '<declaration', '<program'
];
var cstream = new org.antlr.runtime.ANTLRStringStream(xinput),
lexer = new TLexer(cstream),
tstream = new org.antlr.runtime.CommonTokenStream(lexer),
parser = new TParser(tstream);
var r = parser.program();
assertEquals(r.getTree().toStringTree(), xoutput);
var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree());
nodes.setTokenStream(tstream);
var walker = new TWalker(nodes);
walker.program();
assertArrayEquals(walker.traces, traces);
}
function testRuleLabelPropertyRefText() {
var cstream = new org.antlr.runtime.ANTLRStringStream("\nchar c;\n"),
lexer = new TLexer(cstream),
tstream = new org.antlr.runtime.CommonTokenStream(lexer),
parser = new TParser(tstream),
r = parser.variable();
var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree());
nodes.setTokenStream(tstream);
var walker = new TWalker(nodes);
r = walker.variable();
assertEquals(r, 'c');
}
</script>
</head>
<body>
<h1>t047treeparser</h1>
</body>
</html>