1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3<head>
4<meta http-equiv="content-type" content="text/html;charset=utf-8" />
5<title>t047treeparser</title>
6
7<!-- ANTLR includes -->
8<script type="text/javascript" src="../../lib/antlr3-all.js"></script>
9<script type="text/javascript" src="t047treeparserLexer.js"></script>
10<script type="text/javascript" src="t047treeparserParser.js"></script>
11<script type="text/javascript" src="t047treeparserWalker.js"></script>
12
13<!-- JsUnit include -->
14<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
15
16<!-- Test Code -->
17<script type="text/javascript">
18    var TLexer = function() {
19        TLexer.superclass.constructor.apply(this, arguments);
20    };
21    org.antlr.lang.extend(TLexer, t047treeparserLexer, {
22        reportError: function(re) {
23            throw re;
24        }
25    });
26
27    var TParser = function() {
28        TParser.superclass.constructor.apply(this, arguments);
29    };
30    org.antlr.lang.extend(TParser, t047treeparserParser, {
31        recover: function(re) {
32        throw new PrivateError(re);
33        }
34    });
35
36    var TWalker = function() {
37        TWalker.superclass.constructor.apply(this, arguments);
38        this.traces = [];
39    };
40    org.antlr.lang.extend(TWalker, t047treeparserWalker, {
41        recover: function(re) {
42            throw new PrivateError(re);
43        },
44        traceIn: function(ruleName, ruleIndex) {
45            this.traces.push(">"+ruleName);
46        },
47        traceOut: function(ruleName, ruleIndex) {
48            this.traces.push("<"+ruleName);
49        }
50    });
51
52    function testWalker() {
53        var xinput = [
54                        "char c;",
55                        "int x;",
56                        "",
57                        "void bar(int x);",
58                        "",
59                        "int foo(int y, char d) {",
60                        "  int i;",
61                        "  for (i=0; i<3; i=i+1) {",
62                        "    x=3;",
63                        "    y=5;",
64                        "  }",
65                        "}"
66                     ].join("\n"),
67            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)))))",
68            traces = [
69              '>program', '>declaration', '>variable', '>type', '<type',
70              '>declarator', '<declarator', '<variable', '<declaration',
71              '>declaration', '>variable', '>type', '<type', '>declarator',
72              '<declarator', '<variable', '<declaration', '>declaration',
73              '>functionHeader', '>type', '<type', '>formalParameter',
74              '>type', '<type', '>declarator', '<declarator',
75              '<formalParameter', '<functionHeader', '<declaration',
76              '>declaration', '>functionHeader', '>type', '<type',
77              '>formalParameter', '>type', '<type', '>declarator',
78              '<declarator', '<formalParameter', '>formalParameter', '>type',
79              '<type', '>declarator', '<declarator', '<formalParameter',
80              '<functionHeader', '>block', '>variable', '>type', '<type',
81              '>declarator', '<declarator', '<variable', '>stat', '>forStat',
82              '>expr', '>expr', '>atom', '<atom', '<expr', '<expr', '>expr',
83              '>expr', '>atom', '<atom', '<expr', '>expr', '>atom', '<atom',
84              '<expr', '<expr', '>expr', '>expr', '>expr', '>atom', '<atom',
85              '<expr', '>expr', '>atom', '<atom', '<expr', '<expr', '<expr',
86              '>block', '>stat', '>expr', '>expr', '>atom', '<atom', '<expr',
87              '<expr', '<stat', '>stat', '>expr', '>expr', '>atom', '<atom',
88              '<expr', '<expr', '<stat', '<block', '<forStat', '<stat',
89              '<block', '<declaration', '<program'
90            ];
91
92
93        var cstream = new org.antlr.runtime.ANTLRStringStream(xinput),
94            lexer = new TLexer(cstream),
95            tstream = new org.antlr.runtime.CommonTokenStream(lexer),
96            parser = new TParser(tstream);
97        var r = parser.program();
98
99        assertEquals(r.getTree().toStringTree(), xoutput);
100
101        var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree());
102        nodes.setTokenStream(tstream);
103        var walker = new TWalker(nodes);
104        walker.program();
105
106        assertArrayEquals(walker.traces, traces);
107    }
108
109    function testRuleLabelPropertyRefText() {
110        var cstream = new org.antlr.runtime.ANTLRStringStream("\nchar c;\n"),
111            lexer = new TLexer(cstream),
112            tstream = new org.antlr.runtime.CommonTokenStream(lexer),
113            parser = new TParser(tstream),
114            r = parser.variable();
115
116        var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree());
117        nodes.setTokenStream(tstream);
118        var walker = new TWalker(nodes);
119        r = walker.variable();
120
121        assertEquals(r, 'c');
122    }
123</script>
124
125</head>
126<body>
127    <h1>t047treeparser</h1>
128</body>
129</html>
130