xref: /aosp_15_r20/external/antlr/runtime/JavaScript/tests/functional/t057autoAST.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>t057autoAST</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="t057autoAST1Lexer.js"></script>
11*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST1Parser.js"></script>
12*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST2Lexer.js"></script>
13*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST2Parser.js"></script>
14*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST3Lexer.js"></script>
15*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST3Parser.js"></script>
16*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST4Lexer.js"></script>
17*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST4Parser.js"></script>
18*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST5Lexer.js"></script>
19*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST5Parser.js"></script>
20*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST6Lexer.js"></script>
21*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST6Parser.js"></script>
22*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST7Lexer.js"></script>
23*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST7Parser.js"></script>
24*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST8Lexer.js"></script>
25*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST8Parser.js"></script>
26*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST9Lexer.js"></script>
27*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST9Parser.js"></script>
28*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST10Lexer.js"></script>
29*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST10Parser.js"></script>
30*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST11Lexer.js"></script>
31*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST11Parser.js"></script>
32*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST12Lexer.js"></script>
33*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST12Parser.js"></script>
34*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST13Lexer.js"></script>
35*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST13Parser.js"></script>
36*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST14Lexer.js"></script>
37*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST14Parser.js"></script>
38*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST15Lexer.js"></script>
39*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST15Parser.js"></script>
40*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST16Lexer.js"></script>
41*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST16Parser.js"></script>
42*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST17Lexer.js"></script>
43*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST17Parser.js"></script>
44*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST18Lexer.js"></script>
45*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST18Parser.js"></script>
46*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST19Lexer.js"></script>
47*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST19Parser.js"></script>
48*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST20Lexer.js"></script>
49*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST20Parser.js"></script>
50*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST21Lexer.js"></script>
51*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST21Parser.js"></script>
52*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST22Lexer.js"></script>
53*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST22Parser.js"></script>
54*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST23Lexer.js"></script>
55*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST23Parser.js"></script>
56*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST24Lexer.js"></script>
57*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST24Parser.js"></script>
58*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST25Lexer.js"></script>
59*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST25Parser.js"></script>
60*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST26Lexer.js"></script>
61*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST26Parser.js"></script>
62*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST27Lexer.js"></script>
63*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST27Parser.js"></script>
64*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST28Lexer.js"></script>
65*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST28Parser.js"></script>
66*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST29Lexer.js"></script>
67*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST29Parser.js"></script>
68*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST30Lexer.js"></script>
69*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST30Parser.js"></script>
70*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST31Lexer.js"></script>
71*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST31Parser.js"></script>
72*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST32Lexer.js"></script>
73*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST32Parser.js"></script>
74*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST33Lexer.js"></script>
75*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST33Parser.js"></script>
76*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST34Lexer.js"></script>
77*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST34Parser.js"></script>
78*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST35Lexer.js"></script>
79*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST35Parser.js"></script>
80*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST36Lexer.js"></script>
81*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST36Parser.js"></script>
82*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST37Lexer.js"></script>
83*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST37Parser.js"></script>
84*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST38Lexer.js"></script>
85*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST38Parser.js"></script>
86*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST39Lexer.js"></script>
87*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST39Parser.js"></script>
88*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST40Lexer.js"></script>
89*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST40Parser.js"></script>
90*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST41Lexer.js"></script>
91*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST41Parser.js"></script>
92*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST42Lexer.js"></script>
93*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST42Parser.js"></script>
94*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST43Lexer.js"></script>
95*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST43Parser.js"></script>
96*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST44Lexer.js"></script>
97*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST44Parser.js"></script>
98*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST45Lexer.js"></script>
99*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST45Parser.js"></script>
100*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST46Lexer.js"></script>
101*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST46Parser.js"></script>
102*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST47Lexer.js"></script>
103*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST47Parser.js"></script>
104*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST48Lexer.js"></script>
105*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST48Parser.js"></script>
106*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST49Lexer.js"></script>
107*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST49Parser.js"></script>
108*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST50Lexer.js"></script>
109*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST50Parser.js"></script>
110*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST51Lexer.js"></script>
111*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST51Parser.js"></script>
112*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST52Lexer.js"></script>
113*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST52Parser.js"></script>
114*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST53Lexer.js"></script>
115*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST53Parser.js"></script>
116*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST54Lexer.js"></script>
117*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST54Parser.js"></script>
118*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST55Lexer.js"></script>
119*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST55Parser.js"></script>
120*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST56Lexer.js"></script>
121*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST56Parser.js"></script>
122*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST57Lexer.js"></script>
123*16467b97STreehugger Robot<script type="text/javascript" src="t057autoAST57Parser.js"></script>
124*16467b97STreehugger Robot
125*16467b97STreehugger Robot<!-- JsUnit include -->
126*16467b97STreehugger Robot<script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
127*16467b97STreehugger Robot
128*16467b97STreehugger Robot<!-- Test Code -->
129*16467b97STreehugger Robot<script type="text/javascript">
130*16467b97STreehugger Robot    // Parser Tests
131*16467b97STreehugger Robot
132*16467b97STreehugger Robot    function execParser(lexerCls, parserCls, grammarEntry, xinput, expectErrors) {
133*16467b97STreehugger Robot        var cstream = new org.antlr.runtime.ANTLRStringStream(xinput),
134*16467b97STreehugger Robot            lexer = new (EnhancedParser(lexerCls))(cstream),
135*16467b97STreehugger Robot            tstream = new org.antlr.runtime.CommonTokenStream(lexer),
136*16467b97STreehugger Robot            parser = new (EnhancedParser(parserCls))(tstream);
137*16467b97STreehugger Robot        var r = parser[grammarEntry]();
138*16467b97STreehugger Robot
139*16467b97STreehugger Robot        if (!expectErrors) {
140*16467b97STreehugger Robot            assertEquals(parser._errors.length, 0);
141*16467b97STreehugger Robot        }
142*16467b97STreehugger Robot
143*16467b97STreehugger Robot        var result = "";
144*16467b97STreehugger Robot        if (r) {
145*16467b97STreehugger Robot            if (r.result) {
146*16467b97STreehugger Robot                result += r.result
147*16467b97STreehugger Robot            }
148*16467b97STreehugger Robot            if (r.getTree()) {
149*16467b97STreehugger Robot                result += r.getTree().toStringTree();
150*16467b97STreehugger Robot            }
151*16467b97STreehugger Robot        }
152*16467b97STreehugger Robot
153*16467b97STreehugger Robot        if (!expectErrors) {
154*16467b97STreehugger Robot            return result;
155*16467b97STreehugger Robot        } else {
156*16467b97STreehugger Robot            return [result, parser._errors];
157*16467b97STreehugger Robot        }
158*16467b97STreehugger Robot    }
159*16467b97STreehugger Robot
160*16467b97STreehugger Robot    function EnhancedParser(base) {
161*16467b97STreehugger Robot        var T = function() {
162*16467b97STreehugger Robot            T.superclass.constructor.apply(this, arguments);
163*16467b97STreehugger Robot            this.traces = [];
164*16467b97STreehugger Robot            this.buf = "";
165*16467b97STreehugger Robot            this._errors = [];
166*16467b97STreehugger Robot        };
167*16467b97STreehugger Robot
168*16467b97STreehugger Robot        org.antlr.lang.extend(T, base, {
169*16467b97STreehugger Robot            capture: function(t) {
170*16467b97STreehugger Robot                this.buf += t;
171*16467b97STreehugger Robot            },
172*16467b97STreehugger Robot            traceIn: function(ruleName, ruleIndex) {
173*16467b97STreehugger Robot                this.traces.push(">"+ruleName);
174*16467b97STreehugger Robot            },
175*16467b97STreehugger Robot            traceOut: function(ruleName, ruleIndex) {
176*16467b97STreehugger Robot                this.traces.push("<"+ruleName);
177*16467b97STreehugger Robot            },
178*16467b97STreehugger Robot            emitErrorMessage: function(msg) {
179*16467b97STreehugger Robot                this._errors.push(msg);
180*16467b97STreehugger Robot            }
181*16467b97STreehugger Robot        });
182*16467b97STreehugger Robot
183*16467b97STreehugger Robot        return T;
184*16467b97STreehugger Robot    }
185*16467b97STreehugger Robot
186*16467b97STreehugger Robotfunction testTokenList() {
187*16467b97STreehugger Robot    var found = execParser(t057autoAST1Lexer, t057autoAST1Parser, "a", "abc 34");
188*16467b97STreehugger Robot    assertEquals("abc 34", found);
189*16467b97STreehugger Robot}
190*16467b97STreehugger Robot
191*16467b97STreehugger Robotfunction testTokenListInSingleAltBlock() {
192*16467b97STreehugger Robot    var found = execParser(t057autoAST2Lexer, t057autoAST2Parser,"a", "abc 34");
193*16467b97STreehugger Robot    assertEquals("abc 34", found);
194*16467b97STreehugger Robot}
195*16467b97STreehugger Robot
196*16467b97STreehugger Robotfunction testSimpleRootAtOuterLevel() {
197*16467b97STreehugger Robot    var found = execParser(t057autoAST3Lexer, t057autoAST3Parser, "a", "abc 34");
198*16467b97STreehugger Robot    assertEquals("(abc 34)", found);
199*16467b97STreehugger Robot}
200*16467b97STreehugger Robot
201*16467b97STreehugger Robotfunction testSimpleRootAtOuterLevelReverse() {
202*16467b97STreehugger Robot    var found = execParser(t057autoAST4Lexer, t057autoAST4Parser, "a", "34 abc");
203*16467b97STreehugger Robot    assertEquals("(abc 34)", found);
204*16467b97STreehugger Robot}
205*16467b97STreehugger Robot
206*16467b97STreehugger Robotfunction testBang() {
207*16467b97STreehugger Robot    var found = execParser(t057autoAST5Lexer, t057autoAST5Parser, "a", "abc 34 dag 4532");
208*16467b97STreehugger Robot    assertEquals("abc 4532", found);
209*16467b97STreehugger Robot}
210*16467b97STreehugger Robot
211*16467b97STreehugger Robotfunction testOptionalThenRoot() {
212*16467b97STreehugger Robot    var found = execParser(t057autoAST6Lexer, t057autoAST6Parser, "a", "a 1 b");
213*16467b97STreehugger Robot    assertEquals("(b a 1)", found);
214*16467b97STreehugger Robot}
215*16467b97STreehugger Robot
216*16467b97STreehugger Robotfunction testLabeledStringRoot() {
217*16467b97STreehugger Robot    var found = execParser(t057autoAST7Lexer, t057autoAST7Parser, "a", "void foo;");
218*16467b97STreehugger Robot    assertEquals("(void foo ;)", found);
219*16467b97STreehugger Robot}
220*16467b97STreehugger Robot
221*16467b97STreehugger Robotfunction testWildcard() {
222*16467b97STreehugger Robot    var found = execParser(t057autoAST8Lexer, t057autoAST8Parser, "a", "void foo;");
223*16467b97STreehugger Robot    assertEquals("(void foo ;)", found);
224*16467b97STreehugger Robot}
225*16467b97STreehugger Robot
226*16467b97STreehugger Robotfunction testWildcardRoot() {
227*16467b97STreehugger Robot    var found = execParser(t057autoAST9Lexer, t057autoAST9Parser, "a", "void foo;");
228*16467b97STreehugger Robot    assertEquals("(foo void ;)", found);
229*16467b97STreehugger Robot}
230*16467b97STreehugger Robot
231*16467b97STreehugger Robotfunction testWildcardRootWithLabel() {
232*16467b97STreehugger Robot    var found = execParser(t057autoAST10Lexer, t057autoAST10Parser, "a", "void foo;");
233*16467b97STreehugger Robot    assertEquals("(foo void ;)", found);
234*16467b97STreehugger Robot}
235*16467b97STreehugger Robot
236*16467b97STreehugger Robotfunction testWildcardRootWithListLabel() {
237*16467b97STreehugger Robot    var found = execParser(t057autoAST11Lexer, t057autoAST11Parser, "a", "void foo;");
238*16467b97STreehugger Robot    assertEquals("(foo void ;)", found);
239*16467b97STreehugger Robot}
240*16467b97STreehugger Robot
241*16467b97STreehugger Robotfunction testRootRoot() {
242*16467b97STreehugger Robot    var found = execParser(t057autoAST12Lexer, t057autoAST12Parser, "a", "a 34 c");
243*16467b97STreehugger Robot    assertEquals("(34 a c)", found);
244*16467b97STreehugger Robot}
245*16467b97STreehugger Robot
246*16467b97STreehugger Robotfunction testRootRoot2() {
247*16467b97STreehugger Robot    var found = execParser(t057autoAST13Lexer, t057autoAST13Parser, "a", "a 34 c");
248*16467b97STreehugger Robot    assertEquals("(c (34 a))", found);
249*16467b97STreehugger Robot}
250*16467b97STreehugger Robot
251*16467b97STreehugger Robotfunction testRootThenRootInLoop() {
252*16467b97STreehugger Robot    var found = execParser(t057autoAST14Lexer, t057autoAST14Parser, "a", "a 34 * b 9 * c");
253*16467b97STreehugger Robot    assertEquals("(* (* (a 34) b 9) c)", found);
254*16467b97STreehugger Robot}
255*16467b97STreehugger Robot
256*16467b97STreehugger Robotfunction testNestedSubrule() {
257*16467b97STreehugger Robot    var found = execParser(t057autoAST15Lexer, t057autoAST15Parser, "a", "void a b;");
258*16467b97STreehugger Robot    assertEquals("void a b ;", found);
259*16467b97STreehugger Robot}
260*16467b97STreehugger Robot
261*16467b97STreehugger Robotfunction testInvokeRule() {
262*16467b97STreehugger Robot    var found = execParser(t057autoAST16Lexer, t057autoAST16Parser, "a", "int a");
263*16467b97STreehugger Robot    assertEquals("int a", found);
264*16467b97STreehugger Robot}
265*16467b97STreehugger Robot
266*16467b97STreehugger Robotfunction testInvokeRuleAsRoot() {
267*16467b97STreehugger Robot    var found = execParser(t057autoAST17Lexer, t057autoAST17Parser, "a", "int a");
268*16467b97STreehugger Robot    assertEquals("(int a)", found);
269*16467b97STreehugger Robot}
270*16467b97STreehugger Robot
271*16467b97STreehugger Robotfunction testInvokeRuleAsRootWithLabel() {
272*16467b97STreehugger Robot    var found = execParser(t057autoAST18Lexer, t057autoAST18Parser, "a", "int a");
273*16467b97STreehugger Robot    assertEquals("(int a)", found);
274*16467b97STreehugger Robot}
275*16467b97STreehugger Robot
276*16467b97STreehugger Robotfunction testInvokeRuleAsRootWithListLabel() {
277*16467b97STreehugger Robot    var found = execParser(t057autoAST19Lexer, t057autoAST19Parser, "a", "int a");
278*16467b97STreehugger Robot    assertEquals("(int a)", found);
279*16467b97STreehugger Robot}
280*16467b97STreehugger Robot
281*16467b97STreehugger Robotfunction testRuleRootInLoop() {
282*16467b97STreehugger Robot    var found = execParser(t057autoAST20Lexer, t057autoAST20Parser, "a", "a+b+c+d");
283*16467b97STreehugger Robot    assertEquals("(+ (+ (+ a b) c) d)", found);
284*16467b97STreehugger Robot}
285*16467b97STreehugger Robot
286*16467b97STreehugger Robotfunction testRuleInvocationRuleRootInLoop() {
287*16467b97STreehugger Robot    var found = execParser(t057autoAST21Lexer, t057autoAST21Parser, "a", "a+b+c-d");
288*16467b97STreehugger Robot    assertEquals("(- (+ (+ a b) c) d)", found);
289*16467b97STreehugger Robot}
290*16467b97STreehugger Robot
291*16467b97STreehugger Robotfunction testTailRecursion() {
292*16467b97STreehugger Robot    var found = execParser(t057autoAST22Lexer, t057autoAST22Parser, "s", "3 exp 4 exp 5");
293*16467b97STreehugger Robot    assertEquals("(exp 3 (exp 4 5))", found);
294*16467b97STreehugger Robot}
295*16467b97STreehugger Robot
296*16467b97STreehugger Robotfunction testSet() {
297*16467b97STreehugger Robot    var found = execParser(t057autoAST23Lexer, t057autoAST23Parser, "a", "abc");
298*16467b97STreehugger Robot    assertEquals("abc", found);
299*16467b97STreehugger Robot}
300*16467b97STreehugger Robot
301*16467b97STreehugger Robotfunction testSetRoot() {
302*16467b97STreehugger Robot    var found = execParser(t057autoAST24Lexer, t057autoAST24Parser, "a", "+abc");
303*16467b97STreehugger Robot    assertEquals("(+ abc)", found);
304*16467b97STreehugger Robot}
305*16467b97STreehugger Robot
306*16467b97STreehugger Robot//@testbase.broken("FAILS until antlr.g rebuilt in v3", RuntimeError);
307*16467b97STreehugger Robotfunction testSetRootWithLabel() {
308*16467b97STreehugger Robot    var found = execParser(t057autoAST25Lexer, t057autoAST25Parser, "a", "+abc");
309*16467b97STreehugger Robot    assertEquals("(+ abc)", found);
310*16467b97STreehugger Robot}
311*16467b97STreehugger Robot
312*16467b97STreehugger Robotfunction testSetAsRuleRootInLoop() {
313*16467b97STreehugger Robot    var found = execParser(t057autoAST26Lexer, t057autoAST26Parser, "a", "a+b-c");
314*16467b97STreehugger Robot    assertEquals("(- (+ a b) c)", found);
315*16467b97STreehugger Robot}
316*16467b97STreehugger Robot
317*16467b97STreehugger Robotfunction testNotSet() {
318*16467b97STreehugger Robot    var found = execParser(t057autoAST27Lexer, t057autoAST27Parser, "a", "34+2");
319*16467b97STreehugger Robot    assertEquals("34 + 2", found);
320*16467b97STreehugger Robot}
321*16467b97STreehugger Robot
322*16467b97STreehugger Robotfunction testNotSetWithLabel() {
323*16467b97STreehugger Robot    var found = execParser(t057autoAST28Lexer, t057autoAST28Parser, "a", "34+2");
324*16467b97STreehugger Robot    assertEquals("34 + 2", found);
325*16467b97STreehugger Robot}
326*16467b97STreehugger Robot
327*16467b97STreehugger Robotfunction testNotSetWithListLabel() {
328*16467b97STreehugger Robot    var found = execParser(t057autoAST29Lexer, t057autoAST29Parser, "a", "34+2");
329*16467b97STreehugger Robot    assertEquals("34 + 2", found);
330*16467b97STreehugger Robot}
331*16467b97STreehugger Robot
332*16467b97STreehugger Robotfunction testNotSetRoot() {
333*16467b97STreehugger Robot    var found = execParser(t057autoAST30Lexer, t057autoAST30Parser, "a", "34 55");
334*16467b97STreehugger Robot    assertEquals("(34 55)", found);
335*16467b97STreehugger Robot}
336*16467b97STreehugger Robot
337*16467b97STreehugger Robotfunction testNotSetRootWithLabel() {
338*16467b97STreehugger Robot    var found = execParser(t057autoAST31Lexer, t057autoAST31Parser, "a", "34 55");
339*16467b97STreehugger Robot    assertEquals("(34 55)", found);
340*16467b97STreehugger Robot}
341*16467b97STreehugger Robot
342*16467b97STreehugger Robotfunction testNotSetRootWithListLabel() {
343*16467b97STreehugger Robot    var found = execParser(t057autoAST32Lexer, t057autoAST32Parser, "a", "34 55");
344*16467b97STreehugger Robot    assertEquals("(34 55)", found);
345*16467b97STreehugger Robot}
346*16467b97STreehugger Robot
347*16467b97STreehugger Robotfunction testNotSetRuleRootInLoop() {
348*16467b97STreehugger Robot    var found = execParser(t057autoAST33Lexer, t057autoAST33Parser, "a", "3+4+5");
349*16467b97STreehugger Robot    assertEquals("(+ (+ 3 4) 5)", found);
350*16467b97STreehugger Robot}
351*16467b97STreehugger Robot
352*16467b97STreehugger Robot//@testbase.broken("FIXME: What happened to the semicolon?", AssertionError);
353*16467b97STreehugger Robotfunction testTokenLabelReuse() {
354*16467b97STreehugger Robot// check for compilation problem due to multiple defines
355*16467b97STreehugger Robot    var found = execParser(t057autoAST34Lexer, t057autoAST34Parser, "a", "a b");
356*16467b97STreehugger Robot    assertEquals("2nd id=b;a b", found);
357*16467b97STreehugger Robot}
358*16467b97STreehugger Robot
359*16467b97STreehugger Robotfunction testTokenLabelReuse2() {
360*16467b97STreehugger Robot// check for compilation problem due to multiple defines
361*16467b97STreehugger Robot    var found = execParser(t057autoAST35Lexer, t057autoAST35Parser, "a", "a b");
362*16467b97STreehugger Robot    assertEquals("2nd id=b,(b a)", found);
363*16467b97STreehugger Robot}
364*16467b97STreehugger Robot
365*16467b97STreehugger Robotfunction testTokenListLabelReuse() {
366*16467b97STreehugger Robot// check for compilation problem due to multiple defines
367*16467b97STreehugger Robot// make sure ids has both ID tokens
368*16467b97STreehugger Robot    var found = execParser(t057autoAST36Lexer, t057autoAST36Parser, "a", "a b");
369*16467b97STreehugger Robot    expecting = "id list=[a,b],a b"
370*16467b97STreehugger Robot        assertEquals(expecting, found);
371*16467b97STreehugger Robot}
372*16467b97STreehugger Robot
373*16467b97STreehugger Robotfunction testTokenListLabelReuse2() {
374*16467b97STreehugger Robot// check for compilation problem due to multiple defines
375*16467b97STreehugger Robot// make sure ids has both ID tokens
376*16467b97STreehugger Robot    var found = execParser(t057autoAST37Lexer, t057autoAST37Parser, "a", "a b");
377*16467b97STreehugger Robot    expecting = "id list=[a,b],(a b)"
378*16467b97STreehugger Robot        assertEquals(expecting, found);
379*16467b97STreehugger Robot}
380*16467b97STreehugger Robot
381*16467b97STreehugger Robotfunction testTokenListLabelRuleRoot() {
382*16467b97STreehugger Robot    var found = execParser(t057autoAST38Lexer, t057autoAST38Parser, "a", "a");
383*16467b97STreehugger Robot    assertEquals("a", found);
384*16467b97STreehugger Robot}
385*16467b97STreehugger Robot
386*16467b97STreehugger Robotfunction testTokenListLabelBang() {
387*16467b97STreehugger Robot    var found = execParser(t057autoAST39Lexer, t057autoAST39Parser, "a", "a");
388*16467b97STreehugger Robot    assertEquals("", found);
389*16467b97STreehugger Robot}
390*16467b97STreehugger Robot
391*16467b97STreehugger Robotfunction testRuleListLabel() {
392*16467b97STreehugger Robot    var found = execParser(t057autoAST40Lexer, t057autoAST40Parser, "a", "a b");
393*16467b97STreehugger Robot    assertEquals("2nd x=b,a b", found);
394*16467b97STreehugger Robot}
395*16467b97STreehugger Robot
396*16467b97STreehugger Robotfunction testRuleListLabelRuleRoot() {
397*16467b97STreehugger Robot    var found = execParser(t057autoAST41Lexer, t057autoAST41Parser, "a", "a b");
398*16467b97STreehugger Robot    assertEquals("x=(b a),(b a)", found);
399*16467b97STreehugger Robot}
400*16467b97STreehugger Robot
401*16467b97STreehugger Robotfunction testRuleListLabelBang() {
402*16467b97STreehugger Robot    var found = execParser(t057autoAST42Lexer, t057autoAST42Parser, "a", "a b");
403*16467b97STreehugger Robot    assertEquals("1st x=a,b", found);
404*16467b97STreehugger Robot}
405*16467b97STreehugger Robot
406*16467b97STreehugger Robotfunction testComplicatedMelange() {
407*16467b97STreehugger Robot// check for compilation problem
408*16467b97STreehugger Robot    var found = execParser(t057autoAST43Lexer, t057autoAST43Parser, "a", "a b b c c d");
409*16467b97STreehugger Robot    assertEquals("a b b c c d", found);
410*16467b97STreehugger Robot}
411*16467b97STreehugger Robot
412*16467b97STreehugger Robotfunction testReturnValueWithAST() {
413*16467b97STreehugger Robot    var found = execParser(t057autoAST44Lexer, t057autoAST44Parser, "a", "abc 34");
414*16467b97STreehugger Robot    assertEquals("34\nabc 34", found);
415*16467b97STreehugger Robot}
416*16467b97STreehugger Robot
417*16467b97STreehugger Robotfunction testSetLoop() {
418*16467b97STreehugger Robot    var found = execParser(t057autoAST45Lexer, t057autoAST45Parser, "r", "abc 34 d");
419*16467b97STreehugger Robot    assertEquals("abc 34 d", found);
420*16467b97STreehugger Robot}
421*16467b97STreehugger Robot
422*16467b97STreehugger Robotfunction testExtraTokenInSimpleDecl() {
423*16467b97STreehugger Robot    found, errors = execParser(t057autoAST46Lexer, t057autoAST46Parser, "decl", "int 34 x=1;",
424*16467b97STreehugger Robot            true);
425*16467b97STreehugger Robot    assertEquals(["line 1:4 extraneous input u'34' expecting ID"],
426*16467b97STreehugger Robot            errors);
427*16467b97STreehugger Robot    assertEquals("(int x 1)", found); // tree gets correct x and 1 tokens
428*16467b97STreehugger Robot}
429*16467b97STreehugger Robot
430*16467b97STreehugger Robotfunction testMissingIDInSimpleDecl() {
431*16467b97STreehugger Robot    found, errors = execParser(t057autoAST47Lexer, t057autoAST47Parser, "decl", "int =1;",
432*16467b97STreehugger Robot            true);
433*16467b97STreehugger Robot    assertEquals(["line 1:4 missing ID at u'='"], errors);
434*16467b97STreehugger Robot    assertEquals("(int <missing ID> 1)", found); // tree gets invented ID token
435*16467b97STreehugger Robot}
436*16467b97STreehugger Robot
437*16467b97STreehugger Robotfunction testMissingSetInSimpleDecl() {
438*16467b97STreehugger Robot    found, errors = execParser(t057autoAST48Lexer, t057autoAST48Parser, "decl", "x=1;",
439*16467b97STreehugger Robot            true);
440*16467b97STreehugger Robot    assertEquals(["line 1:0 mismatched input u'x' expecting set None"], errors);
441*16467b97STreehugger Robot    assertEquals("(<error: x> x 1)", found); // tree gets invented ID token
442*16467b97STreehugger Robot}
443*16467b97STreehugger Robot
444*16467b97STreehugger Robotfunction testMissingTokenGivesErrorNode() {
445*16467b97STreehugger Robot    found, errors = execParser(t057autoAST49Lexer, t057autoAST49Parser, "a", "abc", true);
446*16467b97STreehugger Robot    assertEquals(["line 0:-1 missing INT at '<EOF>'"], errors);
447*16467b97STreehugger Robot    assertEquals("abc <missing INT>", found);
448*16467b97STreehugger Robot}
449*16467b97STreehugger Robot
450*16467b97STreehugger Robotfunction testMissingTokenGivesErrorNodeInInvokedRule() {
451*16467b97STreehugger Robot    found, errors = execParser(t057autoAST50Lexer, t057autoAST50Parser, "a", "abc", true);
452*16467b97STreehugger Robot    assertEquals(["line 0:-1 missing INT at '<EOF>'"], errors);
453*16467b97STreehugger Robot    assertEquals("abc <missing INT>", found);
454*16467b97STreehugger Robot}
455*16467b97STreehugger Robot
456*16467b97STreehugger Robotfunction testExtraTokenGivesErrorNode() {
457*16467b97STreehugger Robot    found, errors = execParser(t057autoAST51Lexer, t057autoAST51Parser, "a", "abc ick 34",
458*16467b97STreehugger Robot            true);
459*16467b97STreehugger Robot    assertEquals(["line 1:4 extraneous input u'ick' expecting INT"],
460*16467b97STreehugger Robot            errors);
461*16467b97STreehugger Robot    assertEquals("abc 34", found);
462*16467b97STreehugger Robot}
463*16467b97STreehugger Robot
464*16467b97STreehugger Robotfunction testMissingFirstTokenGivesErrorNode() {
465*16467b97STreehugger Robot    found, errors = execParser(t057autoAST52Lexer, t057autoAST52Parser, "a", "34", true);
466*16467b97STreehugger Robot    assertEquals(["line 1:0 missing ID at u'34'"], errors);
467*16467b97STreehugger Robot    assertEquals("<missing ID> 34", found);
468*16467b97STreehugger Robot}
469*16467b97STreehugger Robot
470*16467b97STreehugger Robotfunction testMissingFirstTokenGivesErrorNode2() {
471*16467b97STreehugger Robot    found, errors = execParser(t057autoAST53Lexer, t057autoAST53Parser, "a", "34", true);
472*16467b97STreehugger Robot// finds an error at the first token, 34, and re-syncs.
473*16467b97STreehugger Robot// re-synchronizing does not consume a token because 34 follows
474*16467b97STreehugger Robot// ref to rule b (start of c). It then matches 34 in c.
475*16467b97STreehugger Robot    assertEquals(["line 1:0 missing ID at u'34'"], errors);
476*16467b97STreehugger Robot    assertEquals("<missing ID> 34", found);
477*16467b97STreehugger Robot}
478*16467b97STreehugger Robot
479*16467b97STreehugger Robotfunction testNoViableAltGivesErrorNode() {
480*16467b97STreehugger Robot    found, errors = execParser(t057autoAST54Lexer, t057autoAST54Parser, "a", "*", true);
481*16467b97STreehugger Robot    assertEquals(["line 1:0 no viable alternative at input u'*'"],
482*16467b97STreehugger Robot            errors);
483*16467b97STreehugger Robot    assertEquals("<unexpected: [@0,0:0=u'*',<6>,1:0], resync=*>",
484*16467b97STreehugger Robot            found);
485*16467b97STreehugger Robot}
486*16467b97STreehugger Robot
487*16467b97STreehugger Robot</script>
488*16467b97STreehugger Robot
489*16467b97STreehugger Robot</head>
490*16467b97STreehugger Robot<body>
491*16467b97STreehugger Robot    <h1>t057autoAST</h1>
492*16467b97STreehugger Robot</body>
493*16467b97STreehugger Robot</html>
494*16467b97STreehugger Robot
495*16467b97STreehugger Robot
496