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