annotate truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/Parser.java @ 22157:dc83cc1f94f2

Using fully qualified imports
author Jaroslav Tulach <jaroslav.tulach@oracle.com>
date Wed, 16 Sep 2015 11:33:22 +0200
parents 503529c65456
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
1 /*
13821
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
2 * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
4 *
21997
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
5 * The Universal Permissive License (UPL), Version 1.0
22065
503529c65456 Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21997
diff changeset
6 *
21997
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
7 * Subject to the condition set forth below, permission is hereby granted to any
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
8 * person obtaining a copy of this software, associated documentation and/or
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
9 * data (collectively the "Software"), free of charge and under any and all
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
10 * copyright rights in the Software, and any and all patent rights owned or
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
11 * freely licensable by each licensor hereunder covering either (i) the
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
12 * unmodified Software as contributed to or provided by such licensor, or (ii)
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
13 * the Larger Works (as defined below), to deal in both
22065
503529c65456 Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21997
diff changeset
14 *
21997
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
15 * (a) the Software, and
22065
503529c65456 Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21997
diff changeset
16 *
21997
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
17 * (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
18 * one is included with the Software each a "Larger Work" to which the Software
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
19 * is contributed by such licensors),
22065
503529c65456 Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21997
diff changeset
20 *
21997
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
21 * without restriction, including without limitation the rights to copy, create
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
22 * derivative works of, display, perform, and distribute the Software and make,
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
23 * use, sell, offer for sale, import, export, have made, and have sold the
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
24 * Software and the Larger Work(s), and to sublicense the foregoing rights on
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
25 * either these or other terms.
22065
503529c65456 Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21997
diff changeset
26 *
21997
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
27 * This license is subject to the following condition:
22065
503529c65456 Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21997
diff changeset
28 *
21997
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
29 * The above copyright notice and either this complete permission notice or at a
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
30 * minimum a reference to the UPL must be included in all copies or substantial
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
31 * portions of the Software.
22065
503529c65456 Remove trailing whitespace from UPL license
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 21997
diff changeset
32 *
21997
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
33 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
34 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
35 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
36 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
37 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
38 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
c07e64ecb528 Update SL copyright headers to use UPL
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents: 21951
diff changeset
39 * SOFTWARE.
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
40 */
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
41
13763
cad8bed1a1ac Fix Eclipse formatter issues
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13761
diff changeset
42 // The content of this file is automatically generated. DO NOT EDIT.
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
43
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
44 package com.oracle.truffle.sl.parser;
12503
d7f8dd4fe876 minor reformatting based on 'mx eclipseformat'
Doug Simon <doug.simon@oracle.com>
parents: 11610
diff changeset
45
22157
dc83cc1f94f2 Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22065
diff changeset
46 import com.oracle.truffle.api.source.Source;
dc83cc1f94f2 Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22065
diff changeset
47 import com.oracle.truffle.sl.SLException;
dc83cc1f94f2 Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22065
diff changeset
48 import com.oracle.truffle.sl.nodes.SLExpressionNode;
dc83cc1f94f2 Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22065
diff changeset
49 import com.oracle.truffle.sl.nodes.SLStatementNode;
dc83cc1f94f2 Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22065
diff changeset
50 import com.oracle.truffle.sl.runtime.SLContext;
dc83cc1f94f2 Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22065
diff changeset
51 import java.util.ArrayList;
dc83cc1f94f2 Using fully qualified imports
Jaroslav Tulach <jaroslav.tulach@oracle.com>
parents: 22065
diff changeset
52 import java.util.List;
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
53
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
54 // Checkstyle: stop
7517
b6743d7eb8d4 disabled auto-formatting of generated code
Doug Simon <doug.simon@oracle.com>
parents: 7503
diff changeset
55 // @formatter:off
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
56 public class Parser {
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
57 public static final int _EOF = 0;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
58 public static final int _identifier = 1;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
59 public static final int _stringLiteral = 2;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
60 public static final int _numericLiteral = 3;
18411
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
61 public static final int maxT = 31;
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
62
18962
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
63 static final boolean _T = true;
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
64 static final boolean _x = false;
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
65 static final int minErrDist = 2;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
66
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
67 public Token t; // last recognized token
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
68 public Token la; // lookahead token
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
69 int errDist = minErrDist;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
70
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
71 public final Scanner scanner;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
72 public final Errors errors;
12752
71991b7a0f14 SL: Enhanced SimpleLanguage with support for if statements, function calls, function caching + inlining and builtins.
Christian Humer <christian.humer@gmail.com>
parents: 12503
diff changeset
73 private final SLNodeFactory factory;
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
74
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
75 public Parser(SLContext context, Source source) {
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
76 this.scanner = new Scanner(source.getInputStream());
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
77 this.factory = new SLNodeFactory(context, source);
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
78 errors = new Errors();
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
79 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
80
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
81 void SynErr(int n) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
82 if (errDist >= minErrDist)
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
83 errors.SynErr(la.line, la.col, n);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
84 errDist = 0;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
85 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
86
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
87 public void SemErr(String msg) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
88 if (errDist >= minErrDist)
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
89 errors.SemErr(t.line, t.col, msg);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
90 errDist = 0;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
91 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
92
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
93 void Get() {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
94 for (;;) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
95 t = la;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
96 la = scanner.Scan();
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
97 if (la.kind <= maxT) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
98 ++errDist;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
99 break;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
100 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
101
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
102 la = t;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
103 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
104 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
105
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
106 void Expect(int n) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
107 if (la.kind == n)
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
108 Get();
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
109 else {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
110 SynErr(n);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
111 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
112 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
113
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
114 boolean StartOf(int s) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
115 return set[s][la.kind];
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
116 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
117
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
118 void ExpectWeak(int n, int follow) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
119 if (la.kind == n)
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
120 Get();
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
121 else {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
122 SynErr(n);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
123 while (!StartOf(follow))
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
124 Get();
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
125 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
126 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
127
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
128 boolean WeakSeparator(int n, int syFol, int repFol) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
129 int kind = la.kind;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
130 if (kind == n) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
131 Get();
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
132 return true;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
133 } else if (StartOf(repFol))
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
134 return false;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
135 else {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
136 SynErr(n);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
137 while (!(set[syFol][kind] || set[repFol][kind] || set[0][kind])) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
138 Get();
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
139 kind = la.kind;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
140 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
141 return StartOf(syFol);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
142 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
143 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
144
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
145 void SimpleLanguage() {
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
146 Function();
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
147 while (la.kind == 4) {
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
148 Function();
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
149 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
150 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
151
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
152 void Function() {
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
153 Expect(4);
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
154 Expect(1);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
155 Token identifierToken = t;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
156 Expect(5);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
157 int bodyStartPos = t.charPos;
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
158 factory.startFunction(identifierToken, bodyStartPos);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
159 if (la.kind == 1) {
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
160 Get();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
161 factory.addFormalParameter(t);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
162 while (la.kind == 6) {
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
163 Get();
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
164 Expect(1);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
165 factory.addFormalParameter(t);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
166 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
167 }
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
168 Expect(7);
13836
64c77f0577bb More documentation and improvements of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13821
diff changeset
169 SLStatementNode body = Block(false);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
170 factory.finishFunction(body);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
171 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
172
13836
64c77f0577bb More documentation and improvements of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13821
diff changeset
173 SLStatementNode Block(boolean inLoop) {
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
174 SLStatementNode result;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
175 factory.startBlock();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
176 List<SLStatementNode> body = new ArrayList<>();
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
177 Expect(8);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
178 int start = t.charPos;
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
179 while (StartOf(1)) {
13836
64c77f0577bb More documentation and improvements of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13821
diff changeset
180 SLStatementNode s = Statement(inLoop);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
181 body.add(s);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
182 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
183 Expect(9);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
184 int length = (t.charPos + t.val.length()) - start;
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
185 result = factory.finishBlock(body, start, length);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
186 return result;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
187 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
188
13836
64c77f0577bb More documentation and improvements of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13821
diff changeset
189 SLStatementNode Statement(boolean inLoop) {
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
190 SLStatementNode result;
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
191 result = null;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
192 switch (la.kind) {
13821
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
193 case 13: {
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
194 result = WhileStatement();
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
195 break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
196 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
197 case 10: {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
198 Get();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
199 if (inLoop) { result = factory.createBreak(t); } else { SemErr("break used outside of loop"); }
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
200 Expect(11);
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
201 break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
202 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
203 case 12: {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
204 Get();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
205 if (inLoop) { result = factory.createContinue(t); } else { SemErr("continue used outside of loop"); }
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
206 Expect(11);
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
207 break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
208 }
13821
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
209 case 14: {
13836
64c77f0577bb More documentation and improvements of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13821
diff changeset
210 result = IfStatement(inLoop);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
211 break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
212 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
213 case 16: {
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
214 result = ReturnStatement();
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
215 break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
216 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
217 case 1: case 2: case 3: case 5: {
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
218 result = Expression();
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
219 Expect(11);
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
220 break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
221 }
18411
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
222 default: SynErr(32); break;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
223 }
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
224 return result;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
225 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
226
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
227 SLStatementNode WhileStatement() {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
228 SLStatementNode result;
13821
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
229 Expect(13);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
230 Token whileToken = t;
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
231 Expect(5);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
232 SLExpressionNode condition = Expression();
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
233 Expect(7);
13836
64c77f0577bb More documentation and improvements of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13821
diff changeset
234 SLStatementNode body = Block(true);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
235 result = factory.createWhile(whileToken, condition, body);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
236 return result;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
237 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
238
13836
64c77f0577bb More documentation and improvements of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13821
diff changeset
239 SLStatementNode IfStatement(boolean inLoop) {
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
240 SLStatementNode result;
13821
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
241 Expect(14);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
242 Token ifToken = t;
16685
888907296590 Backed out changeset: d654cd5ed05a
Michael Van De Vanter <michael.van.de.vanter@oracle.com>
parents: 16684
diff changeset
243 Expect(5);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
244 SLExpressionNode condition = Expression();
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
245 Expect(7);
13836
64c77f0577bb More documentation and improvements of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13821
diff changeset
246 SLStatementNode thenPart = Block(inLoop);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
247 SLStatementNode elsePart = null;
13821
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
248 if (la.kind == 15) {
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
249 Get();
13836
64c77f0577bb More documentation and improvements of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13821
diff changeset
250 elsePart = Block(inLoop);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
251 }
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
252 result = factory.createIf(ifToken, condition, thenPart, elsePart);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
253 return result;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
254 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
255
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
256 SLStatementNode ReturnStatement() {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
257 SLStatementNode result;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
258 Expect(16);
13821
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
259 Token returnToken = t;
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
260 SLExpressionNode value = null;
13821
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
261 if (StartOf(2)) {
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
262 value = Expression();
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
263 }
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
264 result = factory.createReturn(returnToken, value);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
265 Expect(11);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
266 return result;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
267 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
268
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
269 SLExpressionNode Expression() {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
270 SLExpressionNode result;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
271 result = LogicTerm();
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
272 while (la.kind == 17) {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
273 Get();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
274 Token op = t;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
275 SLExpressionNode right = LogicTerm();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
276 result = factory.createBinary(op, result, right);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
277 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
278 return result;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
279 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
280
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
281 SLExpressionNode LogicTerm() {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
282 SLExpressionNode result;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
283 result = LogicFactor();
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
284 while (la.kind == 18) {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
285 Get();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
286 Token op = t;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
287 SLExpressionNode right = LogicFactor();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
288 result = factory.createBinary(op, result, right);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
289 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
290 return result;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
291 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
292
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
293 SLExpressionNode LogicFactor() {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
294 SLExpressionNode result;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
295 result = Arithmetic();
13821
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
296 if (StartOf(3)) {
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
297 switch (la.kind) {
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
298 case 19: {
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
299 Get();
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
300 break;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
301 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
302 case 20: {
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
303 Get();
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
304 break;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
305 }
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
306 case 21: {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
307 Get();
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
308 break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
309 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
310 case 22: {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
311 Get();
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
312 break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
313 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
314 case 23: {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
315 Get();
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
316 break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
317 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
318 case 24: {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
319 Get();
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
320 break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
321 }
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
322 }
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
323 Token op = t;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
324 SLExpressionNode right = Arithmetic();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
325 result = factory.createBinary(op, result, right);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
326 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
327 return result;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
328 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
329
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
330 SLExpressionNode Arithmetic() {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
331 SLExpressionNode result;
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
332 result = Term();
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
333 while (la.kind == 25 || la.kind == 26) {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
334 if (la.kind == 25) {
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
335 Get();
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
336 } else {
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
337 Get();
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
338 }
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
339 Token op = t;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
340 SLExpressionNode right = Term();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
341 result = factory.createBinary(op, result, right);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
342 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
343 return result;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
344 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
345
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
346 SLExpressionNode Term() {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
347 SLExpressionNode result;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
348 result = Factor();
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
349 while (la.kind == 27 || la.kind == 28) {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
350 if (la.kind == 27) {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
351 Get();
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
352 } else {
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
353 Get();
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
354 }
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
355 Token op = t;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
356 SLExpressionNode right = Factor();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
357 result = factory.createBinary(op, result, right);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
358 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
359 return result;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
360 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
361
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
362 SLExpressionNode Factor() {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
363 SLExpressionNode result;
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
364 result = null;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
365 if (la.kind == 1) {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
366 Get();
18411
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
367 if (la.kind == 5 || la.kind == 29 || la.kind == 30) {
18962
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
368 result = MemberExpression(null, null, t);
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
369 } else if (StartOf(4)) {
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
370 result = factory.createRead(t);
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
371 } else SynErr(33);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
372 } else if (la.kind == 2) {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
373 Get();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
374 result = factory.createStringLiteral(t);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
375 } else if (la.kind == 3) {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
376 Get();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
377 result = factory.createNumericLiteral(t);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
378 } else if (la.kind == 5) {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
379 Get();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
380 int start = t.charPos;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
381 result = Expression();
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
382 SLExpressionNode expr = result;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
383 Expect(7);
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
384 int length = (t.charPos + t.val.length()) - start;
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
385 result = factory.createParenExpression(expr, start, length);
18962
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
386 } else SynErr(34);
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
387 return result;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
388 }
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
389
18962
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
390 SLExpressionNode MemberExpression(SLExpressionNode r, SLExpressionNode assignmentReceiver, Token assignmentName) {
18411
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
391 SLExpressionNode result;
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
392 result = null;
18962
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
393 SLExpressionNode receiver = r;
18411
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
394 Token nestedAssignmentName = null;
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
395 if (la.kind == 5) {
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
396 Get();
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
397 List<SLExpressionNode> parameters = new ArrayList<>();
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
398 SLExpressionNode parameter;
18962
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
399 if (receiver == null) {
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
400 receiver = factory.createRead(assignmentName);
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
401 }
18411
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
402 if (StartOf(2)) {
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
403 parameter = Expression();
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
404 parameters.add(parameter);
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
405 while (la.kind == 6) {
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
406 Get();
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
407 parameter = Expression();
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
408 parameters.add(parameter);
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
409 }
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
410 }
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
411 Expect(7);
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
412 Token finalToken = t;
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
413 result = factory.createCall(receiver, parameters, finalToken);
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
414 } else if (la.kind == 29) {
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
415 Get();
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
416 SLExpressionNode value = Expression();
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
417 if (assignmentName == null) {
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
418 SemErr("invalid assignment target");
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
419 } else if (assignmentReceiver == null) {
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
420 result = factory.createAssignment(assignmentName, value);
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
421 } else {
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
422 result = factory.createWriteProperty(assignmentReceiver, assignmentName, value);
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
423 }
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
424 } else if (la.kind == 30) {
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
425 Get();
18962
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
426 if (receiver == null) {
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
427 receiver = factory.createRead(assignmentName);
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
428 }
18411
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
429 Expect(1);
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
430 result = factory.createReadProperty(receiver, t);
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
431 nestedAssignmentName = t;
18962
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
432 } else SynErr(35);
18411
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
433 if (la.kind == 5 || la.kind == 29 || la.kind == 30) {
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
434 result = MemberExpression(result, receiver, nestedAssignmentName);
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
435 }
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
436 return result;
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
437 }
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
438
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
439
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
440
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
441 public void Parse() {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
442 la = new Token();
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
443 la.val = "";
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
444 Get();
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
445 SimpleLanguage();
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
446 Expect(0);
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
447
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
448 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
449
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
450 private static final boolean[][] set = {
18962
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
451 {_T,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x},
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
452 {_x,_T,_T,_T, _x,_T,_x,_x, _x,_x,_T,_x, _T,_T,_T,_x, _T,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x},
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
453 {_x,_T,_T,_T, _x,_T,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x},
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
454 {_x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_x, _x,_x,_x,_T, _T,_T,_T,_T, _T,_x,_x,_x, _x,_x,_x,_x, _x},
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
455 {_x,_x,_x,_x, _x,_T,_T,_T, _x,_x,_x,_T, _x,_x,_x,_x, _x,_T,_T,_T, _T,_T,_T,_T, _T,_T,_T,_T, _T,_T,_T,_x, _x}
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
456
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
457 };
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
458
16880
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
459 public static void parseSL(SLContext context, Source source) {
7661cc464239 Truffle/Instrumentation: Added Instrumentable interface and LineLocationToSourceSections map
David Piorkowski <david.piorkowski@oracle.com>
parents: 16687
diff changeset
460 Parser parser = new Parser(context, source);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
461 parser.Parse();
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
462 if (parser.errors.errors.size() > 0) {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
463 StringBuilder msg = new StringBuilder("Error(s) parsing script:\n");
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
464 for (String error : parser.errors.errors) {
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
465 msg.append(error).append("\n");
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
466 }
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
467 throw new SLException(msg.toString());
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
468 }
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
469 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
470 } // end Parser
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
471
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
472 class Errors {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
473
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
474 protected final List<String> errors = new ArrayList<>();
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
475 public String errMsgFormat = "-- line {0} col {1}: {2}"; // 0=line, 1=column, 2=text
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
476
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
477 protected void printMsg(int line, int column, String msg) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
478 StringBuffer b = new StringBuffer(errMsgFormat);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
479 int pos = b.indexOf("{0}");
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
480 if (pos >= 0) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
481 b.delete(pos, pos + 3);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
482 b.insert(pos, line);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
483 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
484 pos = b.indexOf("{1}");
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
485 if (pos >= 0) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
486 b.delete(pos, pos + 3);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
487 b.insert(pos, column);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
488 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
489 pos = b.indexOf("{2}");
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
490 if (pos >= 0)
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
491 b.replace(pos, pos + 3, msg);
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
492 errors.add(b.toString());
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
493 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
494
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
495 public void SynErr(int line, int col, int n) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
496 String s;
12754
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
497 switch (n) {
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
498 case 0: s = "EOF expected"; break;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
499 case 1: s = "identifier expected"; break;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
500 case 2: s = "stringLiteral expected"; break;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
501 case 3: s = "numericLiteral expected"; break;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
502 case 4: s = "\"function\" expected"; break;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
503 case 5: s = "\"(\" expected"; break;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
504 case 6: s = "\",\" expected"; break;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
505 case 7: s = "\")\" expected"; break;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
506 case 8: s = "\"{\" expected"; break;
7311354f5bf8 SL: fixed eclipse formatter problems.
Christian Humer <christian.humer@gmail.com>
parents: 12752
diff changeset
507 case 9: s = "\"}\" expected"; break;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
508 case 10: s = "\"break\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
509 case 11: s = "\";\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
510 case 12: s = "\"continue\" expected"; break;
13821
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
511 case 13: s = "\"while\" expected"; break;
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
512 case 14: s = "\"if\" expected"; break;
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
513 case 15: s = "\"else\" expected"; break;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
514 case 16: s = "\"return\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
515 case 17: s = "\"||\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
516 case 18: s = "\"&&\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
517 case 19: s = "\"<\" expected"; break;
13821
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
518 case 20: s = "\"<=\" expected"; break;
b16ec83edc73 Documentation and more refactoring of Simple Language
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13763
diff changeset
519 case 21: s = "\">\" expected"; break;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
520 case 22: s = "\">=\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
521 case 23: s = "\"==\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
522 case 24: s = "\"!=\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
523 case 25: s = "\"+\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
524 case 26: s = "\"-\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
525 case 27: s = "\"*\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
526 case 28: s = "\"/\" expected"; break;
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
527 case 29: s = "\"=\" expected"; break;
18411
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
528 case 30: s = "\".\" expected"; break;
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
529 case 31: s = "??? expected"; break;
dc2e000bed40 SL: add basic support for creating objects and accessing properties
Andreas Woess <andreas.woess@jku.at>
parents: 16880
diff changeset
530 case 32: s = "invalid Statement"; break;
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
531 case 33: s = "invalid Factor"; break;
18962
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
532 case 34: s = "invalid Factor"; break;
cfb85e1f4ca5 Prevent polluting SLFunctionRegistry (via SLNodeFactory.createRead()) with LHS names of assignment
Paul Woegerer <paul.woegerer@oracle.com>
parents: 18411
diff changeset
533 case 35: s = "invalid MemberExpression"; break;
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
534 default:
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
535 s = "error " + n;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
536 break;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
537 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
538 printMsg(line, col, s);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
539 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
540
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
541 public void SemErr(int line, int col, String s) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
542 printMsg(line, col, s);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
543 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
544
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
545 public void SemErr(String s) {
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
546 errors.add(s);
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
547 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
548
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
549 public void Warning(int line, int col, String s) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
550 printMsg(line, col, s);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
551 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
552
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
553 public void Warning(String s) {
13761
7c418666c6c9 Refactoring and cleanup of Simple Language (more to come soon)
Christian Wimmer <christian.wimmer@oracle.com>
parents: 12754
diff changeset
554 errors.add(s);
7292
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
555 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
556 } // Errors
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
557
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
558 class FatalError extends RuntimeException {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
559
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
560 public static final long serialVersionUID = 1L;
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
561
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
562 public FatalError(String s) {
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
563 super(s);
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
564 }
213c1297a814 Simple Language: A simple dynamic programming language to demonstrate Truffle features
Christian Wimmer <christian.wimmer@oracle.com>
parents:
diff changeset
565 }