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>t049treeparser</title>
6
7<!-- ANTLR includes -->
8<script type="text/javascript" src="../../lib/antlr3-all.js"></script>
9<script type="text/javascript" src="t049treeparseraLexer.js"></script>
10<script type="text/javascript" src="t049treeparseraParser.js"></script>
11<script type="text/javascript" src="t049treeparseraWalker.js"></script>
12<script type="text/javascript" src="t049treeparserbLexer.js"></script>
13<script type="text/javascript" src="t049treeparserbParser.js"></script>
14<script type="text/javascript" src="t049treeparserbWalker.js"></script>
15<script type="text/javascript" src="t049treeparsercLexer.js"></script>
16<script type="text/javascript" src="t049treeparsercParser.js"></script>
17<script type="text/javascript" src="t049treeparsercWalker.js"></script>
18<script type="text/javascript" src="t049treeparserdLexer.js"></script>
19<script type="text/javascript" src="t049treeparserdParser.js"></script>
20<script type="text/javascript" src="t049treeparserdWalker.js"></script>
21<script type="text/javascript" src="t049treeparsereLexer.js"></script>
22<script type="text/javascript" src="t049treeparsereParser.js"></script>
23<script type="text/javascript" src="t049treeparsereWalker.js"></script>
24<script type="text/javascript" src="t049treeparserfLexer.js"></script>
25<script type="text/javascript" src="t049treeparserfParser.js"></script>
26<script type="text/javascript" src="t049treeparserfWalker.js"></script>
27<script type="text/javascript" src="t049treeparsergLexer.js"></script>
28<script type="text/javascript" src="t049treeparsergParser.js"></script>
29<script type="text/javascript" src="t049treeparsergWalker.js"></script>
30<script type="text/javascript" src="t049treeparserhLexer.js"></script>
31<script type="text/javascript" src="t049treeparserhParser.js"></script>
32<script type="text/javascript" src="t049treeparserhWalker.js"></script>
33<script type="text/javascript" src="t049treeparseriLexer.js"></script>
34<script type="text/javascript" src="t049treeparseriParser.js"></script>
35<script type="text/javascript" src="t049treeparseriWalker.js"></script>
36
37
38
39<!-- JsUnit include -->
40<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
41
42<!-- Test Code -->
43<script type="text/javascript">
44    function execTreeParser(lexerCls, parserCls, grammarEntry, walkerCls, treeEntry, xinput)
45    {
46        var cstream = new org.antlr.runtime.ANTLRStringStream(xinput),
47            lexer = new lexerCls(cstream),
48            tstream = new org.antlr.runtime.CommonTokenStream(lexer),
49            parser = new parserCls(tstream);
50        var r = parser[grammarEntry]();
51
52        var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree());
53        nodes.setTokenStream(tstream);
54        var walker = new (walkerClass(walkerCls))(nodes);
55        walker[treeEntry]();
56
57        return walker._output;
58    }
59
60    function walkerClass(base) {
61        var TWalker = function() {
62            TWalker.superclass.constructor.apply(this, arguments);
63            this._output = "";
64            this.traces = [];
65        };
66
67        org.antlr.lang.extend(TWalker, base, {
68            capture: function(t) {
69                this._output += t;
70            },
71            traceIn: function(ruleName, ruleIndex) {
72                this.traces.push(">"+ruleName);
73            },
74            traceOut: function(ruleName, ruleIndex) {
75                this.traces.push("<"+ruleName);
76            },
77            recover: function(input, re) {
78                throw re;
79            }
80        });
81
82        return TWalker;
83    }
84
85    function testFlatList() {
86        var found = execTreeParser(t049treeparseraLexer,
87                t049treeparseraParser,
88                "a",
89                t049treeparseraWalker,
90                "a",
91                "abc 34");
92        assertEquals(found, "abc, 34");
93    }
94
95    function testSimpleTree() {
96        var found = execTreeParser(t049treeparserbLexer,
97                t049treeparserbParser,
98                "a",
99                t049treeparserbWalker,
100                "a",
101                "abc 34");
102        assertEquals(found, "abc, 34");
103    }
104
105    function testFlatVsTreeDecision() {
106        var found = execTreeParser(t049treeparsercLexer,
107                t049treeparsercParser,
108                "a",
109                t049treeparsercWalker,
110                "a",
111                "a 1 b 2");
112        assertEquals(found, "^(a 1)b 2\n");
113    }
114
115    function testFlatVsTreeDecision2() {
116        var found = execTreeParser(t049treeparserdLexer,
117                t049treeparserdParser,
118                "a",
119                t049treeparserdWalker,
120                "a",
121                "a 1 2 3 b 4 5");
122        assertEquals(found, "^(a 3)b 5\n");
123    }
124
125    function testCyclicDFALookahead() {
126        var found = execTreeParser(t049treeparsereLexer,
127                t049treeparsereParser,
128                "a",
129                t049treeparsereWalker,
130                "a",
131                "a 1 2 3.");
132        assertEquals(found, "alt 1");
133    }
134
135    function testNullableChildList() {
136        var found = execTreeParser(t049treeparserfLexer,
137                t049treeparserfParser,
138                "a",
139                t049treeparserfWalker,
140                "a",
141                "abc");
142        assertEquals(found, "abc");
143    }
144
145    function testNullableChildList2() {
146        var found = execTreeParser(t049treeparsergLexer,
147                t049treeparsergParser,
148                "a",
149                t049treeparsergWalker,
150                "a",
151                "abc 3;");
152        assertEquals(found, "abc");
153    }
154
155    function testNullableChildList3() {
156        var found = execTreeParser(t049treeparserhLexer,
157                t049treeparserhParser,
158                "a",
159                t049treeparserhWalker,
160                "a",
161                "abc 3 def;");
162        assertEquals(found, "abc, def");
163    }
164
165    function testActionsAfterRoot() {
166        var found = execTreeParser(t049treeparseriLexer,
167                t049treeparseriParser,
168                "a",
169                t049treeparseriWalker,
170                "a",
171                "abc;");
172        assertEquals(found, "abc, 2");
173    }
174
175
176</script>
177
178</head>
179<body>
180    <h1>t049treeparser</h1>
181</body>
182</html>
183