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