xref: /aosp_15_r20/external/antlr/runtime/JavaScript/tests/functional/t053hetero.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>t053hetero</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
10*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT1Lexer.js"></script>
11*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT1Parser.js"></script>
12*16467b97STreehugger Robot
13*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT2Lexer.js"></script>
14*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT2Parser.js"></script>
15*16467b97STreehugger Robot
16*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT3Lexer.js"></script>
17*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT3Parser.js"></script>
18*16467b97STreehugger Robot
19*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT4Lexer.js"></script>
20*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT4Parser.js"></script>
21*16467b97STreehugger Robot
22*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT5Lexer.js"></script>
23*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT5Parser.js"></script>
24*16467b97STreehugger Robot
25*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT6Lexer.js"></script>
26*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT6Parser.js"></script>
27*16467b97STreehugger Robot
28*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT7Lexer.js"></script>
29*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT7Parser.js"></script>
30*16467b97STreehugger Robot
31*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT8Lexer.js"></script>
32*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT8Parser.js"></script>
33*16467b97STreehugger Robot
34*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT9Lexer.js"></script>
35*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT9Parser.js"></script>
36*16467b97STreehugger Robot
37*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT10Lexer.js"></script>
38*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT10Parser.js"></script>
39*16467b97STreehugger Robot
40*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT11Lexer.js"></script>
41*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT11Parser.js"></script>
42*16467b97STreehugger Robot
43*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT12Lexer.js"></script>
44*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT12Parser.js"></script>
45*16467b97STreehugger Robot
46*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT13Lexer.js"></script>
47*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT13Parser.js"></script>
48*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP13Parser.js"></script>
49*16467b97STreehugger Robot
50*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT14Lexer.js"></script>
51*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT14Parser.js"></script>
52*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP14Parser.js"></script>
53*16467b97STreehugger Robot
54*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT15Lexer.js"></script>
55*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT15Parser.js"></script>
56*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP15Parser.js"></script>
57*16467b97STreehugger Robot
58*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT16Lexer.js"></script>
59*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT16Parser.js"></script>
60*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP16Parser.js"></script>
61*16467b97STreehugger Robot
62*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT17Lexer.js"></script>
63*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT17Parser.js"></script>
64*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP17Parser.js"></script>
65*16467b97STreehugger Robot
66*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT18Lexer.js"></script>
67*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT18Parser.js"></script>
68*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP18Parser.js"></script>
69*16467b97STreehugger Robot
70*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT18Lexer.js"></script>
71*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroT18Parser.js"></script>
72*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTP18Parser.js"></script>
73*16467b97STreehugger Robot
74*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTLexer.js"></script>
75*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTParser.js"></script>
76*16467b97STreehugger Robot<script type="text/javascript" src="t053heteroTPParser.js"></script>
77*16467b97STreehugger Robot
78*16467b97STreehugger Robot<!-- JsUnit include -->
79*16467b97STreehugger Robot<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
80*16467b97STreehugger Robot
81*16467b97STreehugger Robot<!-- Test Code -->
82*16467b97STreehugger Robot<script type="text/javascript">
83*16467b97STreehugger Robot    // Parser Tests
84*16467b97STreehugger Robot
85*16467b97STreehugger Robot    function execParser(lexerCls, parserCls, grammarEntry, xinput) {
86*16467b97STreehugger Robot        var cstream = new org.antlr.runtime.ANTLRStringStream(xinput),
87*16467b97STreehugger Robot            lexer = new (EnhancedParser(lexerCls))(cstream),
88*16467b97STreehugger Robot            tstream = new org.antlr.runtime.CommonTokenStream(lexer),
89*16467b97STreehugger Robot            parser = new (EnhancedParser(parserCls))(tstream);
90*16467b97STreehugger Robot        var r = parser[grammarEntry]();
91*16467b97STreehugger Robot
92*16467b97STreehugger Robot        if (r) {
93*16467b97STreehugger Robot            return r.getTree().toStringTree();
94*16467b97STreehugger Robot        }
95*16467b97STreehugger Robot        return "";
96*16467b97STreehugger Robot    }
97*16467b97STreehugger Robot
98*16467b97STreehugger Robot    function execTreeParser(lexerCls, parserCls, grammarEntry, walkerCls, treeEntry, xinput)
99*16467b97STreehugger Robot    {
100*16467b97STreehugger Robot        var cstream = new org.antlr.runtime.ANTLRStringStream(xinput),
101*16467b97STreehugger Robot            lexer = new (EnhancedParser(lexerCls))(cstream),
102*16467b97STreehugger Robot            tstream = new org.antlr.runtime.CommonTokenStream(lexer),
103*16467b97STreehugger Robot            parser = new (EnhancedParser(parserCls))(tstream);
104*16467b97STreehugger Robot        var r = parser[grammarEntry]();
105*16467b97STreehugger Robot
106*16467b97STreehugger Robot        var nodes = new org.antlr.runtime.tree.CommonTreeNodeStream(r.getTree());
107*16467b97STreehugger Robot        nodes.setTokenStream(tstream);
108*16467b97STreehugger Robot        var walker = new walkerCls(nodes);
109*16467b97STreehugger Robot        r = walker[treeEntry]();
110*16467b97STreehugger Robot
111*16467b97STreehugger Robot        if (r) {
112*16467b97STreehugger Robot            return r.getTree().toStringTree();
113*16467b97STreehugger Robot        }
114*16467b97STreehugger Robot        return "";
115*16467b97STreehugger Robot    }
116*16467b97STreehugger Robot
117*16467b97STreehugger Robot
118*16467b97STreehugger Robot    function EnhancedParser(base) {
119*16467b97STreehugger Robot        var T = function() {
120*16467b97STreehugger Robot            T.superclass.constructor.apply(this, arguments);
121*16467b97STreehugger Robot            this.traces = [];
122*16467b97STreehugger Robot            this.buf = "";
123*16467b97STreehugger Robot        };
124*16467b97STreehugger Robot
125*16467b97STreehugger Robot        org.antlr.lang.extend(T, base, {
126*16467b97STreehugger Robot            capture: function(t) {
127*16467b97STreehugger Robot                this.buf += t;
128*16467b97STreehugger Robot            },
129*16467b97STreehugger Robot            traceIn: function(ruleName, ruleIndex) {
130*16467b97STreehugger Robot                this.traces.push(">"+ruleName);
131*16467b97STreehugger Robot            },
132*16467b97STreehugger Robot            traceOut: function(ruleName, ruleIndex) {
133*16467b97STreehugger Robot                this.traces.push("<"+ruleName);
134*16467b97STreehugger Robot            },
135*16467b97STreehugger Robot            reportError: function(input, re) {
136*16467b97STreehugger Robot                throw re;
137*16467b97STreehugger Robot            }
138*16467b97STreehugger Robot        });
139*16467b97STreehugger Robot
140*16467b97STreehugger Robot        return T;
141*16467b97STreehugger Robot    }
142*16467b97STreehugger Robot
143*16467b97STreehugger Robot    // PARSERS -- AUTO AST
144*16467b97STreehugger Robot
145*16467b97STreehugger Robot    function testToken() {
146*16467b97STreehugger Robot        var found = execParser(
147*16467b97STreehugger Robot                t053heteroT1Lexer,
148*16467b97STreehugger Robot                t053heteroT1Parser,
149*16467b97STreehugger Robot                "a",
150*16467b97STreehugger Robot                "a");
151*16467b97STreehugger Robot        assertEquals("a<V>", found);
152*16467b97STreehugger Robot    }
153*16467b97STreehugger Robot
154*16467b97STreehugger Robot    function testTokenWithLabel() {
155*16467b97STreehugger Robot        var found = execParser(
156*16467b97STreehugger Robot                t053heteroT2Lexer,
157*16467b97STreehugger Robot                t053heteroT2Parser,
158*16467b97STreehugger Robot                "a",
159*16467b97STreehugger Robot                "a");
160*16467b97STreehugger Robot        assertEquals("a<V>", found);
161*16467b97STreehugger Robot    }
162*16467b97STreehugger Robot
163*16467b97STreehugger Robot    function testTokenWithListLabel() {
164*16467b97STreehugger Robot        var found = execParser(
165*16467b97STreehugger Robot                t053heteroT3Lexer,
166*16467b97STreehugger Robot                t053heteroT3Parser,
167*16467b97STreehugger Robot                "a",
168*16467b97STreehugger Robot                "a");
169*16467b97STreehugger Robot        assertEquals("a<V>", found);
170*16467b97STreehugger Robot    }
171*16467b97STreehugger Robot
172*16467b97STreehugger Robot    function testTokenRoot() {
173*16467b97STreehugger Robot        var found = execParser(
174*16467b97STreehugger Robot                t053heteroT4Lexer,
175*16467b97STreehugger Robot                t053heteroT4Parser,
176*16467b97STreehugger Robot                "a",
177*16467b97STreehugger Robot                "a");
178*16467b97STreehugger Robot        assertEquals("a<V>", found);
179*16467b97STreehugger Robot    }
180*16467b97STreehugger Robot
181*16467b97STreehugger Robot    function testTokenRootWithListLabel() {
182*16467b97STreehugger Robot        var found = execParser(
183*16467b97STreehugger Robot                t053heteroT5Lexer,
184*16467b97STreehugger Robot                t053heteroT5Parser,
185*16467b97STreehugger Robot                "a",
186*16467b97STreehugger Robot                "a");
187*16467b97STreehugger Robot        assertEquals("a<V>", found);
188*16467b97STreehugger Robot    }
189*16467b97STreehugger Robot
190*16467b97STreehugger Robot    function testString() {
191*16467b97STreehugger Robot        var found = execParser(
192*16467b97STreehugger Robot                t053heteroT6Lexer,
193*16467b97STreehugger Robot                t053heteroT6Parser,
194*16467b97STreehugger Robot                "a",
195*16467b97STreehugger Robot                "begin");
196*16467b97STreehugger Robot        assertEquals("begin<V>", found);
197*16467b97STreehugger Robot    }
198*16467b97STreehugger Robot
199*16467b97STreehugger Robot    function testStringRoot() {
200*16467b97STreehugger Robot        var found = execParser(
201*16467b97STreehugger Robot                t053heteroT7Lexer,
202*16467b97STreehugger Robot                t053heteroT7Parser,
203*16467b97STreehugger Robot                "a",
204*16467b97STreehugger Robot                "begin");
205*16467b97STreehugger Robot        assertEquals("begin<V>", found);
206*16467b97STreehugger Robot    }
207*16467b97STreehugger Robot
208*16467b97STreehugger Robot    // PARSERS -- REWRITE AST
209*16467b97STreehugger Robot
210*16467b97STreehugger Robot    function testRewriteToken() {
211*16467b97STreehugger Robot        var found = execParser(
212*16467b97STreehugger Robot                t053heteroT8Lexer,
213*16467b97STreehugger Robot                t053heteroT8Parser,
214*16467b97STreehugger Robot                "a",
215*16467b97STreehugger Robot                "a");
216*16467b97STreehugger Robot        assertEquals("a<V>", found);
217*16467b97STreehugger Robot    }
218*16467b97STreehugger Robot
219*16467b97STreehugger Robot    function testrewritetokenwithargs() {
220*16467b97STreehugger Robot        var found = execParser(
221*16467b97STreehugger Robot                t053heteroT9Lexer,
222*16467b97STreehugger Robot                t053heteroT9Parser,
223*16467b97STreehugger Robot                "a",
224*16467b97STreehugger Robot                "a");
225*16467b97STreehugger Robot        assertEquals("<V>;421930 a<V>;9900", found);
226*16467b97STreehugger Robot    }
227*16467b97STreehugger Robot
228*16467b97STreehugger Robot    function testRewriteTokenRoot() {
229*16467b97STreehugger Robot        var found = execParser(
230*16467b97STreehugger Robot                t053heteroT10Lexer,
231*16467b97STreehugger Robot                t053heteroT10Parser,
232*16467b97STreehugger Robot                "a",
233*16467b97STreehugger Robot                "a 2");
234*16467b97STreehugger Robot        assertEquals("(a<V> 2)", found);
235*16467b97STreehugger Robot    }
236*16467b97STreehugger Robot
237*16467b97STreehugger Robot    function testRewriteString() {
238*16467b97STreehugger Robot        var found = execParser(
239*16467b97STreehugger Robot                t053heteroT11Lexer,
240*16467b97STreehugger Robot                t053heteroT11Parser,
241*16467b97STreehugger Robot                "a",
242*16467b97STreehugger Robot                "begin");
243*16467b97STreehugger Robot        assertEquals("begin<V>", found);
244*16467b97STreehugger Robot    }
245*16467b97STreehugger Robot
246*16467b97STreehugger Robot    function testRewriteStringRoot() {
247*16467b97STreehugger Robot        var found = execParser(
248*16467b97STreehugger Robot                t053heteroT12Lexer,
249*16467b97STreehugger Robot                t053heteroT12Parser,
250*16467b97STreehugger Robot                "a",
251*16467b97STreehugger Robot                "begin 2");
252*16467b97STreehugger Robot        assertEquals("(begin<V> 2)", found);
253*16467b97STreehugger Robot    }
254*16467b97STreehugger Robot
255*16467b97STreehugger Robot    // TREE PARSERS -- REWRITE AST
256*16467b97STreehugger Robot
257*16467b97STreehugger Robot    function testTreeParserRewriteFlatList() {
258*16467b97STreehugger Robot        var found = execTreeParser(
259*16467b97STreehugger Robot                t053heteroT13Lexer,
260*16467b97STreehugger Robot                t053heteroT13Parser,
261*16467b97STreehugger Robot                "a",
262*16467b97STreehugger Robot                t053heteroTP13Parser,
263*16467b97STreehugger Robot                "a",
264*16467b97STreehugger Robot                "abc 34");
265*16467b97STreehugger Robot        assertEquals("34<V> abc<W>", found);
266*16467b97STreehugger Robot    }
267*16467b97STreehugger Robot
268*16467b97STreehugger Robot    function testTreeParserRewriteTree() {
269*16467b97STreehugger Robot        var found = execTreeParser(
270*16467b97STreehugger Robot                t053heteroT14Lexer,
271*16467b97STreehugger Robot                t053heteroT14Parser,
272*16467b97STreehugger Robot                "a",
273*16467b97STreehugger Robot                t053heteroTP14Parser,
274*16467b97STreehugger Robot                "a",
275*16467b97STreehugger Robot                "abc 34");
276*16467b97STreehugger Robot        assertEquals("(34<V> abc<W>)", found);
277*16467b97STreehugger Robot    }
278*16467b97STreehugger Robot
279*16467b97STreehugger Robot    function testTreeParserRewriteImaginary() {
280*16467b97STreehugger Robot        var found = execTreeParser(
281*16467b97STreehugger Robot                t053heteroT15Lexer,
282*16467b97STreehugger Robot                t053heteroT15Parser,
283*16467b97STreehugger Robot                "a",
284*16467b97STreehugger Robot                t053heteroTP15Parser,
285*16467b97STreehugger Robot                "a",
286*16467b97STreehugger Robot                "abc");
287*16467b97STreehugger Robot        assertEquals("ROOT<V> abc", found);
288*16467b97STreehugger Robot    }
289*16467b97STreehugger Robot
290*16467b97STreehugger Robot    function testTreeParserRewriteImaginaryWithArgs() {
291*16467b97STreehugger Robot        var found = execTreeParser(
292*16467b97STreehugger Robot                t053heteroT16Lexer,
293*16467b97STreehugger Robot                t053heteroT16Parser,
294*16467b97STreehugger Robot                "a",
295*16467b97STreehugger Robot                t053heteroTP16Parser,
296*16467b97STreehugger Robot                "a",
297*16467b97STreehugger Robot                "abc");
298*16467b97STreehugger Robot        assertEquals("ROOT<V>;42 abc", found);
299*16467b97STreehugger Robot    }
300*16467b97STreehugger Robot
301*16467b97STreehugger Robot    function testTreeParserRewriteImaginaryRoot() {
302*16467b97STreehugger Robot        var found = execTreeParser(
303*16467b97STreehugger Robot                t053heteroT17Lexer,
304*16467b97STreehugger Robot                t053heteroT17Parser,
305*16467b97STreehugger Robot                "a",
306*16467b97STreehugger Robot                t053heteroTP17Parser,
307*16467b97STreehugger Robot                "a",
308*16467b97STreehugger Robot                "abc");
309*16467b97STreehugger Robot        assertEquals("(ROOT<V> abc)", found);
310*16467b97STreehugger Robot    }
311*16467b97STreehugger Robot
312*16467b97STreehugger Robot    function testTreeParserRewriteImaginaryFromReal() {
313*16467b97STreehugger Robot        var found = execTreeParser(
314*16467b97STreehugger Robot                t053heteroT18Lexer,
315*16467b97STreehugger Robot                t053heteroT18Parser,
316*16467b97STreehugger Robot                "a",
317*16467b97STreehugger Robot                t053heteroTP18Parser,
318*16467b97STreehugger Robot                "a",
319*16467b97STreehugger Robot                "abc");
320*16467b97STreehugger Robot        assertEquals("ROOT<V>@1", found);
321*16467b97STreehugger Robot    }
322*16467b97STreehugger Robot
323*16467b97STreehugger Robot    function testTreeParserAutoHeteroAST() {
324*16467b97STreehugger Robot        var found = execTreeParser(
325*16467b97STreehugger Robot                t053heteroTLexer,
326*16467b97STreehugger Robot                t053heteroTParser,
327*16467b97STreehugger Robot                "a",
328*16467b97STreehugger Robot                t053heteroTPParser,
329*16467b97STreehugger Robot                "a",
330*16467b97STreehugger Robot                "abc;");
331*16467b97STreehugger Robot        assertEquals("abc<V> ;<V>", found);
332*16467b97STreehugger Robot    }
333*16467b97STreehugger Robot</script>
334*16467b97STreehugger Robot
335*16467b97STreehugger Robot</head>
336*16467b97STreehugger Robot<body>
337*16467b97STreehugger Robot    <h1>t053hetero</h1>
338*16467b97STreehugger Robot</body>
339*16467b97STreehugger Robot</html>
340