Mercurial Hosting > luan
annotate core/src/luan/impl/LuanParser.java @ 651:140cc5191b7a
start compiling statements
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Fri, 01 Apr 2016 17:24:44 -0600 |
parents | d658eab7bf4c |
children | 067d9470184d |
rev | line source |
---|---|
166
4eaee12f6c65
move luan/interp to impl
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
165
diff
changeset
|
1 package luan.impl; |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
3 import java.util.Set; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
4 import java.util.HashSet; |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
5 import java.util.Arrays; |
9
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
6 import java.util.List; |
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
7 import java.util.ArrayList; |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
8 import java.util.Scanner; |
48
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
9 import luan.Luan; |
64ecb7a3aad7
rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
46
diff
changeset
|
10 import luan.LuanState; |
503 | 11 import luan.LuanTable; |
186
cf939124461a
don't import modules by default
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
181
diff
changeset
|
12 import luan.modules.PackageLuan; |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
13 |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
14 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
15 final class LuanParser { |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
16 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
17 private static final class Frame { |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
18 final Frame parent; |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
19 final List<String> symbols = new ArrayList<String>(); |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
20 int stackSize = 0; |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
21 int loops = 0; |
24
7ee247560db5
add VarArgs
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
21
diff
changeset
|
22 boolean isVarArg = false; |
32
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
23 final List<String> upValueSymbols = new ArrayList<String>(); |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
24 final List<UpValue.Getter> upValueGetters = new ArrayList<UpValue.Getter>(); |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
25 |
533
8e51d6071b67
restore LuanTable.hasJava
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
26 Frame(LuanTable java) { |
34
0cdc1da466ee
implement _G and _ENV
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
33
diff
changeset
|
27 this.parent = null; |
503 | 28 upValueSymbols.add(JAVA); |
533
8e51d6071b67
restore LuanTable.hasJava
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
29 upValueGetters.add(new UpValue.ValueGetter(java)); |
34
0cdc1da466ee
implement _G and _ENV
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
33
diff
changeset
|
30 } |
0cdc1da466ee
implement _G and _ENV
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
33
diff
changeset
|
31 |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
32 Frame(Frame parent) { |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
33 this.parent = parent; |
503 | 34 if( upValueIndex(JAVA) != 0 ) |
86
6db8f286fa6c
_ENV is per module, not global
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
83
diff
changeset
|
35 throw new RuntimeException(); |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
36 } |
32
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
37 |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
38 int stackIndex(String name) { |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
39 int i = symbols.size(); |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
40 while( --i >= 0 ) { |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
41 if( symbols.get(i).equals(name) ) |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
42 return i; |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
43 } |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
44 return -1; |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
45 } |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
46 |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
47 int upValueIndex(String name) { |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
48 int i = upValueSymbols.size(); |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
49 while( --i >= 0 ) { |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
50 if( upValueSymbols.get(i).equals(name) ) |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
51 return i; |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
52 } |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
53 if( parent==null ) |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
54 return -1; |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
55 i = parent.stackIndex(name); |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
56 if( i != -1 ) { |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
57 upValueGetters.add(new UpValue.StackGetter(i)); |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
58 } else { |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
59 i = parent.upValueIndex(name); |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
60 if( i == -1 ) |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
61 return -1; |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
62 upValueGetters.add(new UpValue.NestedGetter(i)); |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
63 } |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
64 upValueSymbols.add(name); |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
65 return upValueSymbols.size() - 1; |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
66 } |
108
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
67 |
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
68 void addUpValueGetter(String name,UpValue.Getter upValueGetter) { |
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
69 upValueSymbols.add(name); |
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
70 upValueGetters.add(upValueGetter); |
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
71 } |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
72 } |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
73 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
74 private static class In { |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
75 static final In NOTHING = new In(false,false); |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
76 |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
77 final boolean parens; |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
78 final boolean template; |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
79 |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
80 private In(boolean parens,boolean template) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
81 this.parens = parens; |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
82 this.template = template; |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
83 } |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
84 |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
85 In parens() { |
324
b24a35612947
minor parsing improvement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
321
diff
changeset
|
86 return parens ? this : new In(true,false); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
87 } |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
88 |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
89 In template() { |
324
b24a35612947
minor parsing improvement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
321
diff
changeset
|
90 return template ? this : new In(false,true); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
91 } |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
92 } |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
93 |
503 | 94 private static final String JAVA = "-JAVA-"; // inaccessible from Luan |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
95 private static final String _ENV = "_ENV"; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
96 private static final UpValue.Getter[] NO_UP_VALUE_GETTERS = new UpValue.Getter[0]; |
32
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
97 |
645 | 98 // final LuanSource source; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
99 private Frame frame; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
100 private final Parser parser; |
86
6db8f286fa6c
_ENV is per module, not global
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
83
diff
changeset
|
101 |
645 | 102 LuanParser(String sourceName,String sourceText,LuanTable env) { |
103 // this.source = source; | |
533
8e51d6071b67
restore LuanTable.hasJava
Franklin Schmidt <fschmidt@gmail.com>
parents:
503
diff
changeset
|
104 this.frame = new Frame( env!=null ? env : new LuanTable() ); |
645 | 105 this.parser = new Parser(sourceName,sourceText); |
503 | 106 if( env != null ) |
107 addVar(_ENV,env); | |
108
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
108 } |
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
109 |
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
110 void addVar(String name,Object value) { |
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
111 frame.addUpValueGetter(name,new UpValue.ValueGetter(value)); |
86
6db8f286fa6c
_ENV is per module, not global
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
83
diff
changeset
|
112 } |
16
2a30281ef47c
finish number literals;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
15
diff
changeset
|
113 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
114 private List<String> symbols() { |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
115 return frame.symbols; |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
116 } |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
117 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
118 private int symbolsSize() { |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
119 return frame.symbols.size(); |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
120 } |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
121 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
122 private void addSymbol(String name) { |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
123 frame.symbols.add(name); |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
124 if( frame.stackSize < symbolsSize() ) |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
125 frame.stackSize = symbolsSize(); |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
126 } |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
127 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
128 private void addSymbols(List<String> names) { |
28
df923e5835b2
fix local initial assignment
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
26
diff
changeset
|
129 frame.symbols.addAll(names); |
df923e5835b2
fix local initial assignment
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
26
diff
changeset
|
130 if( frame.stackSize < symbolsSize() ) |
df923e5835b2
fix local initial assignment
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
26
diff
changeset
|
131 frame.stackSize = symbolsSize(); |
df923e5835b2
fix local initial assignment
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
26
diff
changeset
|
132 } |
df923e5835b2
fix local initial assignment
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
26
diff
changeset
|
133 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
134 private int stackIndex(String name) { |
32
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
135 return frame.stackIndex(name); |
17
09d41f7490a8
add local variables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
16
diff
changeset
|
136 } |
09d41f7490a8
add local variables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
16
diff
changeset
|
137 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
138 private void popSymbols(int n) { |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
139 List<String> symbols = frame.symbols; |
19
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
18
diff
changeset
|
140 while( n-- > 0 ) { |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
18
diff
changeset
|
141 symbols.remove(symbols.size()-1); |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
18
diff
changeset
|
142 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
18
diff
changeset
|
143 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
18
diff
changeset
|
144 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
145 private int upValueIndex(String name) { |
32
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
146 return frame.upValueIndex(name); |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
147 } |
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
148 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
149 private void incLoops() { |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
150 frame.loops++; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
151 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
152 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
153 private void decLoops() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
154 frame.loops--; |
20
d85510d92eee
add BreakStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
155 } |
d85510d92eee
add BreakStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
156 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
157 private <T> T required(T t) throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
158 if( t==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
159 throw parser.exception(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
160 return t; |
20
d85510d92eee
add BreakStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
161 } |
d85510d92eee
add BreakStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
162 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
163 private <T> T required(T t,String msg) throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
164 if( t==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
165 throw parser.exception(msg); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
166 return t; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
167 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
168 |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
169 private static Expr expr(Expressions exprs) { |
200
9fb218211763
add Package.block();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
195
diff
changeset
|
170 if( exprs==null ) |
9fb218211763
add Package.block();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
195
diff
changeset
|
171 return null; |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
172 if( exprs instanceof Expr ) |
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
173 return (Expr)exprs; |
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
174 return new ExpressionsExpr(exprs); |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
175 } |
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
176 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
177 private FnDef newFnDef(int start,Stmt stmt) { |
645 | 178 return new FnDef( stmt, frame.stackSize, symbolsSize(), frame.isVarArg, frame.upValueGetters.toArray(NO_UP_VALUE_GETTERS) ); |
32
c3eab5a3ce3c
implement closures
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
31
diff
changeset
|
179 } |
20
d85510d92eee
add BreakStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
180 |
158
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
181 FnDef Expression() throws ParseException { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
182 Spaces(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
183 int start = parser.begin(); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
184 Expressions expr = exp(ExprZ(In.NOTHING)); |
158
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
185 if( expr != null && parser.endOfInput() ) { |
645 | 186 Stmt stmt = new ReturnStmt( expr ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
187 return parser.success(newFnDef(start,stmt)); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
188 } |
108
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
189 return parser.failure(null); |
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
190 } |
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
191 |
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
192 FnDef RequiredModule() throws ParseException { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
193 Spaces(In.NOTHING); |
108
3c404a296995
make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
107
diff
changeset
|
194 int start = parser.begin(); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
195 frame.isVarArg = true; |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
196 Stmt stmt = stmt(RequiredBlock()); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
197 if( parser.endOfInput() ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
198 return parser.success(newFnDef(start,stmt)); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
199 throw parser.exception(); |
11
b7d7069fee58
add assignment statement and CmdLine
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
9
diff
changeset
|
200 } |
b7d7069fee58
add assignment statement and CmdLine
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
9
diff
changeset
|
201 |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
202 private StmtString RequiredBlock() throws ParseException { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
203 StringBuilder stmts = new StringBuilder(); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
204 int stackStart = symbolsSize(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
205 Stmt(stmts); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
206 while( StmtSep(stmts) ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
207 Spaces(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
208 Stmt(stmts); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
209 } |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
210 int stackEnd = symbolsSize(); |
19
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
18
diff
changeset
|
211 popSymbols( stackEnd - stackStart ); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
212 if( stmts.length() == 0 ) |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
213 return EMPTY_STMT; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
214 String code = stmts.toString(); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
215 if( stackStart < stackEnd ) |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
216 code = "" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
217 +"try {\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
218 + code |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
219 +"} finally {\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
220 +" $luan.stackClear("+stackStart+","+stackEnd+");\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
221 +"}\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
222 ; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
223 return new StmtString(code); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
224 } |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
225 |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
226 private boolean StmtSep(StringBuilder stmts) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
227 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
228 if( parser.match( ';' ) ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
229 return parser.success(); |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
230 if( EndOfLine() ) |
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
231 return parser.success(); |
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
232 parser.rollback(); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
233 StmtString stmt = stmtStr(TemplateStmt()); |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
234 if( stmt != null ) { |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
235 stmts.append(stmt.code); |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
236 return parser.success(); |
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
237 } |
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
238 return parser.failure(); |
14
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
239 } |
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
240 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
241 private boolean EndOfLine() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
242 return parser.match( "\r\n" ) || parser.match( '\r' ) || parser.match( '\n' ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
243 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
244 |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
245 private void Stmt(StringBuilder stmts) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
246 if( LocalStmt(stmts) ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
247 return; |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
248 StmtString stmt; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
249 if( (stmt=stmtStr(ReturnStmt())) != null |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
250 || (stmt=stmtStr(FunctionStmt())) != null |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
251 || (stmt=stmtStr(LocalFunctionStmt())) != null |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
252 || (stmt=stmtStr(BreakStmt())) != null |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
253 || (stmt=stmtStr(ForStmt())) != null |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
254 || (stmt=DoStmt()) != null |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
255 || (stmt=WhileStmt()) != null |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
256 || (stmt=RepeatStmt()) != null |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
257 || (stmt=stmtStr(IfStmt())) != null |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
258 || (stmt=stmtStr(SetStmt())) != null |
159
0abc9181061a
revert rev 154 but only allow FnCall, AndExpr, or OrExpr in ExpressionsStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
158
diff
changeset
|
259 || (stmt=ExpressionsStmt()) != null |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
260 ) { |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
261 stmts.append(stmt.code); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
262 } |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
263 } |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
264 |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
265 private Stmt TemplateStmt() throws ParseException { |
645 | 266 parser.currentIndex(); |
369
85bf9f0379aa
template statements no longer depend on 'Io' being defined
Franklin Schmidt <fschmidt@gmail.com>
parents:
356
diff
changeset
|
267 Expressions exprs = TemplateExpressions(In.NOTHING); |
85bf9f0379aa
template statements no longer depend on 'Io' being defined
Franklin Schmidt <fschmidt@gmail.com>
parents:
356
diff
changeset
|
268 if( exprs == null ) |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
269 return null; |
645 | 270 FnCall requireCall = new FnCall( new ConstExpr(PackageLuan.requireFn), new ConstExpr("luan:Io") ); |
271 Expr stdoutExp = new IndexExpr( expr(requireCall), new ConstExpr("stdout") ); | |
272 Expr writeExp = new IndexExpr( stdoutExp, new ConstExpr("write") ); | |
273 FnCall writeCall = new FnCall( writeExp, exprs ); | |
369
85bf9f0379aa
template statements no longer depend on 'Io' being defined
Franklin Schmidt <fschmidt@gmail.com>
parents:
356
diff
changeset
|
274 return new ExpressionsStmt(writeCall); |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
275 } |
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
276 |
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
277 private Expressions TemplateExpressions(In in) throws ParseException { |
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
278 if( in.template ) |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
279 return null; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
280 int start = parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
281 if( !parser.match( "%>" ) ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
282 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
283 EndOfLine(); |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
284 In inTemplate = in.template(); |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
285 List<Expressions> builder = new ArrayList<Expressions>(); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
286 while(true) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
287 if( parser.match( "<%=" ) ) { |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
288 Spaces(inTemplate); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
289 builder.add( exp(RequiredExpr(inTemplate)) ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
290 RequiredMatch( "%>" ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
291 } else if( parser.match( "<%" ) ) { |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
292 Spaces(inTemplate); |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
293 return parser.success(ExpList.build(builder)); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
294 } else { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
295 int i = parser.currentIndex(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
296 do { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
297 if( parser.match( "%>" ) ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
298 throw parser.exception("'%>' unexpected"); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
299 if( !parser.anyChar() ) |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
300 throw parser.exception("Unclosed template expression"); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
301 } while( !parser.test( "<%" ) ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
302 String match = parser.textFrom(i); |
645 | 303 builder.add( new ConstExpr(match) ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
304 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
305 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
306 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
307 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
308 private Stmt ReturnStmt() throws ParseException { |
645 | 309 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
310 if( !Keyword("return",In.NOTHING) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
311 return parser.failure(null); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
312 Expressions exprs = ExpList(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
313 if( exprs==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
314 exprs = ExpList.emptyExpList; |
645 | 315 return parser.success( new ReturnStmt(exprs) ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
316 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
317 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
318 private Stmt FunctionStmt() throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
319 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
320 if( !Keyword("function",In.NOTHING) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
321 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
322 |
645 | 323 parser.currentIndex(); |
324 Var var = nameVar(RequiredName(In.NOTHING)); | |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
325 while( parser.match( '.' ) ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
326 Spaces(In.NOTHING); |
636 | 327 Expr exp = NameExpr(In.NOTHING); |
328 if( exp==null ) | |
329 return parser.failure(null); | |
645 | 330 var = indexVar( expr(var.expr()), exp ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
331 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
332 Settable fnName = var.settable(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
333 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
334 FnDef fnDef = RequiredFunction(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
335 return parser.success( new SetStmt(fnName,fnDef) ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
336 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
337 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
338 private Stmt LocalFunctionStmt() throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
339 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
340 if( !(Keyword("local",In.NOTHING) && Keyword("function",In.NOTHING)) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
341 return parser.failure(null); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
342 String name = RequiredName(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
343 addSymbol( name ); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
344 FnDef fnDef = RequiredFunction(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
345 return parser.success( new SetStmt( new SetLocalVar(symbolsSize()-1), fnDef ) ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
346 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
347 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
348 private Stmt BreakStmt() throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
349 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
350 if( !Keyword("break",In.NOTHING) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
351 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
352 if( frame.loops <= 0 ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
353 throw parser.exception("'break' outside of loop"); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
354 return parser.success( new BreakStmt() ); |
17
09d41f7490a8
add local variables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
16
diff
changeset
|
355 } |
09d41f7490a8
add local variables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
16
diff
changeset
|
356 |
127
bcb3a09d0caf
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
124
diff
changeset
|
357 private Stmt ForStmt() throws ParseException { |
645 | 358 parser.begin(); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
359 int stackStart = symbolsSize(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
360 if( !Keyword("for",In.NOTHING) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
361 return parser.failure(null); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
362 List<String> names = RequiredNameList(In.NOTHING); |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
363 if( !Keyword("in",In.NOTHING) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
364 return parser.failure(null); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
365 Expr expr = expr(exp(RequiredExpr(In.NOTHING))); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
366 RequiredKeyword("do",In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
367 addSymbols(names); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
368 Stmt loop = stmt(RequiredLoopBlock()); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
369 RequiredKeyword("end",In.NOTHING); |
645 | 370 Stmt stmt = new ForStmt( stackStart, symbolsSize() - stackStart, expr, loop ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
371 popSymbols( symbolsSize() - stackStart ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
372 return parser.success(stmt); |
54
f5b27ef14d73
add OutputStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
51
diff
changeset
|
373 } |
f5b27ef14d73
add OutputStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
51
diff
changeset
|
374 |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
375 private StmtString DoStmt() throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
376 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
377 if( !Keyword("do",In.NOTHING) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
378 return parser.failure(null); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
379 StmtString stmt = RequiredBlock(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
380 RequiredKeyword("end",In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
381 return parser.success(stmt); |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
382 } |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
383 |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
384 private boolean LocalStmt(StringBuilder stmts) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
385 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
386 if( !Keyword("local",In.NOTHING) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
387 return parser.failure(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
388 List<String> names = NameList(In.NOTHING); |
356
5e34702423a0
better parser error message
Franklin Schmidt <fschmidt@gmail.com>
parents:
326
diff
changeset
|
389 if( names==null ) { |
5e34702423a0
better parser error message
Franklin Schmidt <fschmidt@gmail.com>
parents:
326
diff
changeset
|
390 if( Keyword("function",In.NOTHING) ) |
5e34702423a0
better parser error message
Franklin Schmidt <fschmidt@gmail.com>
parents:
326
diff
changeset
|
391 return parser.failure(); // handled later |
5e34702423a0
better parser error message
Franklin Schmidt <fschmidt@gmail.com>
parents:
326
diff
changeset
|
392 throw parser.exception("Invalid local statement"); |
5e34702423a0
better parser error message
Franklin Schmidt <fschmidt@gmail.com>
parents:
326
diff
changeset
|
393 } |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
394 if( parser.match( '=' ) ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
395 Spaces(In.NOTHING); |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
396 Expressions values = ExpList(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
397 if( values==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
398 throw parser.exception("Expressions expected"); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
399 SetLocalVar[] vars = new SetLocalVar[names.size()]; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
400 int stackStart = symbolsSize(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
401 for( int i=0; i<vars.length; i++ ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
402 vars[i] = new SetLocalVar(stackStart+i); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
403 } |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
404 stmts.append( new StmtString(new SetStmt( vars, values )).code ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
405 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
406 addSymbols(names); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
407 return parser.success(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
408 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
409 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
410 private List<String> RequiredNameList(In in) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
411 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
412 List<String> names = NameList(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
413 if( names==null ) |
139
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
414 throw parser.exception("Name expected"); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
415 return parser.success(names); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
416 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
417 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
418 private List<String> NameList(In in) throws ParseException { |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
419 String name = Name(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
420 if( name==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
421 return null; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
422 List<String> names = new ArrayList<String>(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
423 names.add(name); |
139
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
424 while( (name=anotherName(in)) != null ) { |
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
425 names.add(name); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
426 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
427 return names; |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
428 } |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
429 |
139
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
430 private String anotherName(In in) throws ParseException { |
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
431 parser.begin(); |
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
432 if( !parser.match( ',' ) ) |
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
433 return parser.failure(null); |
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
434 Spaces(in); |
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
435 String name = Name(in); |
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
436 if( name==null ) |
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
437 return parser.failure(null); |
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
438 return parser.success(name); |
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
439 } |
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
440 |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
441 private StmtString WhileStmt() throws ParseException { |
645 | 442 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
443 if( !Keyword("while",In.NOTHING) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
444 return parser.failure(null); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
445 ExpString cnd = RequiredExpr(In.NOTHING).expr(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
446 RequiredKeyword("do",In.NOTHING); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
447 StmtString loop = RequiredLoopBlock(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
448 RequiredKeyword("end",In.NOTHING); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
449 String code = "" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
450 +"try {\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
451 +" while( $Luan.checkBoolean(" + cnd.code + ") ) {\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
452 + loop.code |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
453 +" }\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
454 +"} catch(BreakException e) {}\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
455 ; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
456 return parser.success( new StmtString(code) ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
457 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
458 |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
459 private StmtString RepeatStmt() throws ParseException { |
645 | 460 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
461 if( !Keyword("repeat",In.NOTHING) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
462 return parser.failure(null); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
463 StmtString loop =RequiredLoopBlock(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
464 RequiredKeyword("until",In.NOTHING); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
465 ExpString cnd = RequiredExpr(In.NOTHING).expr(); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
466 String code = "" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
467 +"try {\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
468 +" do {\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
469 + loop.code |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
470 +" } while( !$Luan.checkBoolean(" + cnd.code + ") );\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
471 +"} catch(BreakException e) {}\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
472 ; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
473 return parser.success( new StmtString(code) ); |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
474 } |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
475 |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
476 private StmtString RequiredLoopBlock() throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
477 incLoops(); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
478 StmtString stmt = RequiredBlock(); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
479 decLoops(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
480 return stmt; |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
481 } |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
482 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
483 private Stmt IfStmt() throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
484 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
485 if( !Keyword("if",In.NOTHING) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
486 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
487 return parser.success( IfStmt2() ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
488 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
489 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
490 private Stmt IfStmt2() throws ParseException { |
645 | 491 parser.currentIndex(); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
492 Expr cnd = expr(exp(RequiredExpr(In.NOTHING))); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
493 RequiredKeyword("then",In.NOTHING); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
494 Stmt thenBlock = stmt(RequiredBlock()); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
495 Stmt elseBlock; |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
496 if( Keyword("elseif",In.NOTHING) ) { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
497 elseBlock = IfStmt2(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
498 } else { |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
499 elseBlock = Keyword("else",In.NOTHING) ? stmt(RequiredBlock()) : Stmt.EMPTY; |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
500 RequiredKeyword("end",In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
501 } |
645 | 502 return new IfStmt(cnd,thenBlock,elseBlock); |
20
d85510d92eee
add BreakStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
503 } |
d85510d92eee
add BreakStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
504 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
505 private Stmt SetStmt() throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
506 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
507 List<Settable> vars = new ArrayList<Settable>(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
508 Settable s = SettableVar(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
509 if( s == null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
510 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
511 vars.add(s); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
512 while( parser.match( ',' ) ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
513 Spaces(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
514 s = SettableVar(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
515 if( s == null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
516 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
517 vars.add(s); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
518 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
519 if( !parser.match( '=' ) ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
520 return parser.failure(null); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
521 Spaces(In.NOTHING); |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
522 Expressions values = ExpList(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
523 if( values==null ) |
274
8afe9f2fdfec
AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
271
diff
changeset
|
524 // throw parser.exception("Expressions expected"); |
8afe9f2fdfec
AB testing, not fully tested
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
271
diff
changeset
|
525 return parser.failure(null); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
526 return parser.success( new SetStmt( vars.toArray(new Settable[0]), values ) ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
527 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
528 |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
529 private StmtString ExpressionsStmt() throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
530 parser.begin(); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
531 ExpString exp = ExprZ(In.NOTHING); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
532 if( exp != null && exp.isStmt ) { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
533 String code = exp.code; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
534 if( exp.isExpr ) |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
535 code = "$Luan.nop(" + code + ")"; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
536 code += ";\n"; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
537 return parser.success( new StmtString(code) ); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
538 } |
159
0abc9181061a
revert rev 154 but only allow FnCall, AndExpr, or OrExpr in ExpressionsStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
158
diff
changeset
|
539 return parser.failure(null); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
540 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
541 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
542 private Settable SettableVar() throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
543 int start = parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
544 Var var = VarZ(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
545 if( var==null ) |
155
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
546 return parser.failure(null); |
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
547 return parser.success( var.settable() ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
548 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
549 |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
550 private ExpString RequiredExpr(In in) throws ParseException { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
551 parser.begin(); |
211
284eddd599b1
fix parsing bug
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
209
diff
changeset
|
552 return parser.success(required(ExprZ(in),"Bad expression")); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
553 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
554 |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
555 private ExpString ExprZ(In in) throws ParseException { |
449 | 556 return OrExpr(in); |
19
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
18
diff
changeset
|
557 } |
a7c13c6017f7
add GenericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
18
diff
changeset
|
558 |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
559 private ExpString OrExpr(In in) throws ParseException { |
645 | 560 parser.begin(); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
561 ExpString exp = AndExpr(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
562 if( exp==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
563 return parser.failure(null); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
564 while( Keyword("or",in) ) { |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
565 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
566 ExpString exp2 = required(RelExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
567 String code = "($Luan.cnd($cnd = " + exp.code + ") ? $cnd : (" + exp2.code + "))"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
568 exp = new ExpString(code,true,true); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
569 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
570 return parser.success(exp); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
571 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
572 |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
573 private ExpString AndExpr(In in) throws ParseException { |
645 | 574 parser.begin(); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
575 ExpString exp = RelExpr(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
576 if( exp==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
577 return parser.failure(null); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
578 while( Keyword("and",in) ) { |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
579 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
580 ExpString exp2 = required(RelExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
581 String code = "($Luan.cnd($cnd = " + exp.code + ") ? (" + exp2.code + ") : $cnd)"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
582 exp = new ExpString(code,true,true); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
583 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
584 return parser.success(exp); |
18
3971113699b8
add NumericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
17
diff
changeset
|
585 } |
3971113699b8
add NumericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
17
diff
changeset
|
586 |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
587 private ExpString RelExpr(In in) throws ParseException { |
645 | 588 parser.begin(); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
589 ExpString exp = ConcatExpr(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
590 if( exp==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
591 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
592 while(true) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
593 if( parser.match("==") ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
594 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
595 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
596 ExpString exp2 = required(ConcatExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
597 String code = "$Luan.eq($luan," + exp.code + "," + exp2.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
598 exp = new ExpString(code,true,false); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
599 } else if( parser.match("~=") ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
600 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
601 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
602 ExpString exp2 = required(ConcatExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
603 String code = "!$Luan.eq($luan," + exp.code + "," + exp2.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
604 exp = new ExpString(code,true,false); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
605 } else if( parser.match("<=") ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
606 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
607 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
608 ExpString exp2 = required(ConcatExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
609 String code = "$Luan.le($luan," + exp.code + "," + exp2.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
610 exp = new ExpString(code,true,false); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
611 } else if( parser.match(">=") ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
612 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
613 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
614 ExpString exp2 = required(ConcatExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
615 String code = "$Luan.le($luan," + exp2.code + "," + exp.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
616 exp = new ExpString(code,true,false); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
617 } else if( parser.match("<") ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
618 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
619 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
620 ExpString exp2 = required(ConcatExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
621 String code = "$Luan.lt($luan," + exp.code + "," + exp2.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
622 exp = new ExpString(code,true,false); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
623 } else if( parser.match(">") ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
624 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
625 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
626 ExpString exp2 = required(ConcatExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
627 String code = "$Luan.lt($luan," + exp2.code + "," + exp.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
628 exp = new ExpString(code,true,false); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
629 } else |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
630 break; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
631 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
632 return parser.success(exp); |
42
786699c78837
implement try-catch
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
633 } |
786699c78837
implement try-catch
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
40
diff
changeset
|
634 |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
635 private ExpString ConcatExpr(In in) throws ParseException { |
645 | 636 parser.begin(); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
637 ExpString exp = SumExpr(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
638 if( exp==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
639 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
640 if( parser.match("..") ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
641 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
642 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
643 ExpString exp2 = required(ConcatExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
644 String code = "$Luan.concat($luan," + exp.code + "," + exp2.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
645 exp = new ExpString(code,true,false); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
646 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
647 return parser.success(exp); |
28
df923e5835b2
fix local initial assignment
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
26
diff
changeset
|
648 } |
df923e5835b2
fix local initial assignment
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
26
diff
changeset
|
649 |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
650 private ExpString SumExpr(In in) throws ParseException { |
645 | 651 parser.begin(); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
652 ExpString exp = TermExpr(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
653 if( exp==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
654 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
655 while(true) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
656 if( parser.match('+') ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
657 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
658 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
659 ExpString exp2 = required(TermExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
660 String code = "$Luan.add($luan," + exp.code + "," + exp2.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
661 exp = new ExpString(code,true,false); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
662 } else if( Minus() ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
663 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
664 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
665 ExpString exp2 = required(TermExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
666 String code = "$Luan.sub($luan," + exp.code + "," + exp2.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
667 exp = new ExpString(code,true,false); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
668 } else |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
669 break; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
670 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
671 return parser.success(exp); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
672 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
673 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
674 private boolean Minus() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
675 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
676 return parser.match('-') && !parser.match('-') ? parser.success() : parser.failure(); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
677 } |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
678 |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
679 private ExpString TermExpr(In in) throws ParseException { |
645 | 680 parser.begin(); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
681 ExpString exp = UnaryExpr(in); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
682 if( exp==null ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
683 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
684 while(true) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
685 if( parser.match('*') ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
686 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
687 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
688 ExpString exp2 = required(UnaryExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
689 String code = "$Luan.mul($luan," + exp.code + "," + exp2.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
690 exp = new ExpString(code,true,false); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
691 } else if( parser.match('/') ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
692 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
693 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
694 ExpString exp2 = required(UnaryExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
695 String code = "$Luan.div($luan," + exp.code + "," + exp2.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
696 exp = new ExpString(code,true,false); |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
697 } else if( Mod() ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
698 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
699 exp = exp.expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
700 ExpString exp2 = required(UnaryExpr(in)).expr(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
701 String code = "$Luan.mod($luan," + exp.code + "," + exp2.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
702 exp = new ExpString(code,true,false); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
703 } else |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
704 break; |
17
09d41f7490a8
add local variables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
16
diff
changeset
|
705 } |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
706 return parser.success(exp); |
17
09d41f7490a8
add local variables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
16
diff
changeset
|
707 } |
09d41f7490a8
add local variables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
16
diff
changeset
|
708 |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
709 private boolean Mod() { |
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
710 parser.begin(); |
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
711 return parser.match('%') && !parser.match('>') ? parser.success() : parser.failure(); |
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
712 } |
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
713 |
649
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
714 private ExpString UnaryExpr(In in) throws ParseException { |
645 | 715 parser.begin(); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
716 if( parser.match('#') ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
717 Spaces(in); |
649
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
718 ExpString exp = required(UnaryExpr(in)).expr(); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
719 String code = "$Luan.len($luan," + exp.code + ")"; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
720 exp = new ExpString(code,true,false); |
648
e387e4021afe
start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
721 return parser.success(exp); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
722 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
723 if( Minus() ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
724 Spaces(in); |
649
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
725 ExpString exp = required(UnaryExpr(in)).expr(); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
726 String code = "$Luan.unm($luan," + exp.code + ")"; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
727 exp = new ExpString(code,true,false); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
728 return parser.success(exp); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
729 } |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
730 if( Keyword("not",in) ) { |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
731 Spaces(in); |
649
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
732 ExpString exp = required(UnaryExpr(in)).expr(); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
733 String code = "$Luan.not(" + exp.code + ")"; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
734 exp = new ExpString(code,true,false); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
735 return parser.success(exp); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
736 } |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
737 ExpString exp = PowExpr(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
738 if( exp==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
739 return parser.failure(null); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
740 return parser.success(exp); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
741 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
742 |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
743 private ExpString PowExpr(In in) throws ParseException { |
645 | 744 parser.begin(); |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
745 Expressions exp = SingleExpr(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
746 if( exp==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
747 return parser.failure(null); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
748 ExpString exp1 = new ExpString(exp); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
749 if( parser.match('^') ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
750 Spaces(in); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
751 ExpString exp2 = required(PowExpr(in)); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
752 String code = "$Luan.pow($luan," + exp1.code + "," + exp2.code + ")"; |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
753 exp1 = new ExpString(code,true,false); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
754 } |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
755 return parser.success(exp1); |
14
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
756 } |
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
757 |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
758 private Expressions SingleExpr(In in) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
759 parser.begin(); |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
760 Expressions exp; |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
761 exp = FunctionExpr(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
762 if( exp != null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
763 return parser.success(exp); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
764 exp = VarExp(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
765 if( exp != null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
766 return parser.success(exp); |
449 | 767 exp = VarArgs(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
768 if( exp != null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
769 return parser.success(exp); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
770 return parser.failure(null); |
14
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
771 } |
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
772 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
773 private Expr FunctionExpr(In in) throws ParseException { |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
774 if( !Keyword("function",in) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
775 return null; |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
776 return RequiredFunction(in); |
20
d85510d92eee
add BreakStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
777 } |
d85510d92eee
add BreakStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
19
diff
changeset
|
778 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
779 private FnDef RequiredFunction(In in) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
780 int start = parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
781 RequiredMatch('('); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
782 In inParens = in.parens(); |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
783 Spaces(inParens); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
784 frame = new Frame(frame); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
785 List<String> names = NameList(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
786 if( names != null ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
787 addSymbols(names); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
788 if( parser.match(',') ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
789 Spaces(inParens); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
790 if( !parser.match("...") ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
791 throw parser.exception(); |
254
e0fb8a49e031
add Time.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
247
diff
changeset
|
792 Spaces(inParens); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
793 frame.isVarArg = true; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
794 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
795 } else if( parser.match("...") ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
796 Spaces(inParens); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
797 frame.isVarArg = true; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
798 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
799 RequiredMatch(')'); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
800 Spaces(in); |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
801 Stmt block = stmt(RequiredBlock()); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
802 RequiredKeyword("end",in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
803 FnDef fnDef = newFnDef(start,block); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
804 frame = frame.parent; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
805 return parser.success(fnDef); |
11
b7d7069fee58
add assignment statement and CmdLine
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
9
diff
changeset
|
806 } |
b7d7069fee58
add assignment statement and CmdLine
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
9
diff
changeset
|
807 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
808 private VarArgs VarArgs(In in) throws ParseException { |
645 | 809 parser.begin(); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
810 if( !frame.isVarArg || !parser.match("...") ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
811 return parser.failure(null); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
812 Spaces(in); |
645 | 813 return parser.success( new VarArgs() ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
814 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
815 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
816 private Expr TableExpr(In in) throws ParseException { |
645 | 817 parser.begin(); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
818 if( !parser.match('{') ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
819 return parser.failure(null); |
604
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
820 Spaces(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
821 List<TableExpr.Field> fields = new ArrayList<TableExpr.Field>(); |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
822 List<Expressions> builder = new ArrayList<Expressions>(); |
604
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
823 Field(fields,builder); |
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
824 while( FieldSep() ) { |
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
825 Spaces(In.NOTHING); |
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
826 Field(fields,builder); |
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
827 } |
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
828 Expressions exp = TemplateExpressions(In.NOTHING); |
245
2ed8465a9d62
allow TemplateExpressions at end of table constructor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
211
diff
changeset
|
829 if( exp != null ) |
2ed8465a9d62
allow TemplateExpressions at end of table constructor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
211
diff
changeset
|
830 builder.add(exp); |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
831 if( !parser.match('}') ) |
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
832 throw parser.exception("Expected table element or '}'"); |
203
99eef1d0e706
IO security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
200
diff
changeset
|
833 Spaces(in); |
645 | 834 return parser.success( new TableExpr( fields.toArray(new TableExpr.Field[0]), ExpList.build(builder) ) ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
835 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
836 |
604
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
837 private boolean FieldSep() throws ParseException { |
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
838 return parser.anyOf(",;") || EndOfLine(); |
14
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
839 } |
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
840 |
604
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
841 private boolean Field(List<TableExpr.Field> fields,List<Expressions> builder) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
842 parser.begin(); |
604
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
843 Expr exp = SubExpr(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
844 if( exp==null ) |
604
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
845 exp = NameExpr(In.NOTHING); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
846 if( exp!=null && parser.match('=') ) { |
604
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
847 Spaces(In.NOTHING); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
848 fields.add( new TableExpr.Field( exp, required(expr(exp(ExprZ(In.NOTHING)))) ) ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
849 return parser.success(); |
17
09d41f7490a8
add local variables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
16
diff
changeset
|
850 } |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
851 parser.rollback(); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
852 Expressions exprs = exp(ExprZ(In.NOTHING)); |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
853 if( exprs != null ) { |
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
854 builder.add(exprs); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
855 return parser.success(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
856 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
857 return parser.failure(); |
7
bca8fc5d928b
work on expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
6
diff
changeset
|
858 } |
bca8fc5d928b
work on expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
6
diff
changeset
|
859 |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
860 private Expressions VarExp(In in) throws ParseException { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
861 Var var = VarZ(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
862 return var==null ? null : var.expr(); |
8
8896068e0a4b
finish operators
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
7
diff
changeset
|
863 } |
8896068e0a4b
finish operators
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
7
diff
changeset
|
864 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
865 private Var VarZ(In in) throws ParseException { |
645 | 866 parser.begin(); |
867 Var var = VarStart(in); | |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
868 if( var==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
869 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
870 Var var2; |
645 | 871 while( (var2=Var2(in,var.expr())) != null ) { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
872 var = var2; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
873 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
874 return parser.success(var); |
7
bca8fc5d928b
work on expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
6
diff
changeset
|
875 } |
bca8fc5d928b
work on expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
6
diff
changeset
|
876 |
645 | 877 private Var VarStart(In in) throws ParseException { |
206
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
878 if( parser.match('(') ) { |
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
879 In inParens = in.parens(); |
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
880 Spaces(inParens); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
881 Expr exp = expr(exp(RequiredExpr(inParens))); |
206
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
882 RequiredMatch(')'); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
883 Spaces(in); |
206
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
884 return exprVar(exp); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
885 } |
206
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
886 String name = Name(in); |
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
887 if( name != null ) |
645 | 888 return nameVar(name); |
206
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
889 Expressions exp; |
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
890 exp = TableExpr(in); |
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
891 if( exp != null ) |
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
892 return exprVar(exp); |
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
893 exp = Literal(in); |
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
894 if( exp != null ) |
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
895 return exprVar(exp); |
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
896 return null; |
21
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
897 } |
c93d8c781853
add functions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
20
diff
changeset
|
898 |
645 | 899 private Var Var2(In in,Expressions exp1) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
900 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
901 Expr exp2 = SubExpr(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
902 if( exp2 != null ) |
645 | 903 return parser.success(indexVar(expr(exp1),exp2)); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
904 if( parser.match('.') ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
905 Spaces(in); |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
906 exp2 = NameExpr(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
907 if( exp2!=null ) |
645 | 908 return parser.success(indexVar(expr(exp1),exp2)); |
636 | 909 return parser.failure(null); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
910 } |
645 | 911 FnCall fnCall = Args( in, expr(exp1), new ArrayList<Expressions>() ); |
206
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
912 if( fnCall != null ) |
77365c9fdfe4
remove -> operator
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
203
diff
changeset
|
913 return parser.success(exprVar(fnCall)); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
914 return parser.failure(null); |
9
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
915 } |
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
916 |
503 | 917 private interface Var { |
918 public Expressions expr() throws ParseException; | |
919 public Settable settable() throws ParseException; | |
920 } | |
921 | |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
922 private Expr env() { |
34
0cdc1da466ee
implement _G and _ENV
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
33
diff
changeset
|
923 int index = stackIndex(_ENV); |
0cdc1da466ee
implement _G and _ENV
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
33
diff
changeset
|
924 if( index != -1 ) |
645 | 925 return new GetLocalVar(index); |
34
0cdc1da466ee
implement _G and _ENV
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
33
diff
changeset
|
926 index = upValueIndex(_ENV); |
0cdc1da466ee
implement _G and _ENV
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
33
diff
changeset
|
927 if( index != -1 ) |
645 | 928 return new GetUpVar(index); |
503 | 929 return null; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
930 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
931 |
645 | 932 private Var nameVar(final String name) { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
933 return new Var() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
934 |
503 | 935 public Expr expr() throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
936 int index = stackIndex(name); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
937 if( index != -1 ) |
645 | 938 return new GetLocalVar(index); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
939 index = upValueIndex(name); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
940 if( index != -1 ) |
645 | 941 return new GetUpVar(index); |
503 | 942 Expr envExpr = env(); |
943 if( envExpr != null ) | |
645 | 944 return new IndexExpr( envExpr, new ConstExpr(name) ); |
503 | 945 parser.failure(null); |
946 throw parser.exception("name '"+name+"' not defined"); | |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
947 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
948 |
503 | 949 public Settable settable() throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
950 int index = stackIndex(name); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
951 if( index != -1 ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
952 return new SetLocalVar(index); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
953 index = upValueIndex(name); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
954 if( index != -1 ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
955 return new SetUpVar(index); |
503 | 956 Expr envExpr = env(); |
957 if( envExpr != null ) | |
645 | 958 return new SetTableEntry( envExpr, new ConstExpr(name) ); |
503 | 959 parser.failure(null); |
960 throw parser.exception("name '"+name+"' not defined"); | |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
961 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
962 }; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
963 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
964 |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
965 private Var exprVar(final Expressions expr) { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
966 return new Var() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
967 |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
968 public Expressions expr() { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
969 return expr; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
970 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
971 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
972 public Settable settable() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
973 return null; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
974 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
975 }; |
11
b7d7069fee58
add assignment statement and CmdLine
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
9
diff
changeset
|
976 } |
b7d7069fee58
add assignment statement and CmdLine
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
9
diff
changeset
|
977 |
645 | 978 private Var indexVar(final Expr table,final Expr key) { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
979 return new Var() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
980 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
981 public Expr expr() { |
645 | 982 return new IndexExpr( table, key ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
983 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
984 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
985 public Settable settable() { |
645 | 986 return new SetTableEntry(table,key); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
987 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
988 }; |
9
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
989 } |
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
990 |
645 | 991 private FnCall Args(In in,Expr fn,List<Expressions> builder) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
992 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
993 return args(in,builder) |
645 | 994 ? parser.success( new FnCall( fn, ExpList.build(builder) ) ) |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
995 : parser.failure((FnCall)null); |
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
996 } |
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
997 |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
998 private boolean args(In in,List<Expressions> builder) throws ParseException { |
645 | 999 parser.begin(); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1000 if( parser.match('(') ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1001 In inParens = in.parens(); |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1002 Spaces(inParens); |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1003 ExpList(inParens,builder); // optional |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
1004 if( !parser.match(')') ) |
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
1005 throw parser.exception("Expression or ')' expected"); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1006 Spaces(in); |
195
24ede40ee0aa
make MetatableGetter DeepCloneable, scoped, and secure
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
193
diff
changeset
|
1007 return parser.success(); |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
1008 } |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1009 Expr exp = TableExpr(in); |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
1010 if( exp != null ) { |
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
1011 builder.add(exp); |
195
24ede40ee0aa
make MetatableGetter DeepCloneable, scoped, and secure
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
193
diff
changeset
|
1012 return parser.success(); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1013 } |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1014 String s = StringLiteral(in); |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
1015 if( s != null ) { |
645 | 1016 builder.add( new ConstExpr(s) ); |
195
24ede40ee0aa
make MetatableGetter DeepCloneable, scoped, and secure
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
193
diff
changeset
|
1017 return parser.success(); |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
1018 } |
181
5d2cb8c1f844
add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
180
diff
changeset
|
1019 /* |
157
1de3e4a6e82d
remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
155
diff
changeset
|
1020 Expressions exps = TemplateExpressions(in); |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
1021 if( exps != null ) { |
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
1022 builder.add(exps); |
195
24ede40ee0aa
make MetatableGetter DeepCloneable, scoped, and secure
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
193
diff
changeset
|
1023 return parser.success(); |
107
dbf459397217
change OutputStatement to JspExpressions;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
106
diff
changeset
|
1024 } |
181
5d2cb8c1f844
add web logging
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
180
diff
changeset
|
1025 */ |
195
24ede40ee0aa
make MetatableGetter DeepCloneable, scoped, and secure
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
193
diff
changeset
|
1026 return parser.failure(); |
11
b7d7069fee58
add assignment statement and CmdLine
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
9
diff
changeset
|
1027 } |
b7d7069fee58
add assignment statement and CmdLine
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
9
diff
changeset
|
1028 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1029 private Expressions ExpList(In in) throws ParseException { |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
1030 List<Expressions> builder = new ArrayList<Expressions>(); |
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
1031 return ExpList(in,builder) ? ExpList.build(builder) : null; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1032 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1033 |
154
c2e5101682ae
Expr extends Expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
153
diff
changeset
|
1034 private boolean ExpList(In in,List<Expressions> builder) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1035 parser.begin(); |
158
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
1036 Expressions exp = TemplateExpressions(in); |
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
1037 if( exp != null ) { |
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
1038 builder.add(exp); |
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
1039 return parser.success(); |
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
1040 } |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
1041 exp = exp(ExprZ(in)); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1042 if( exp==null ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1043 return parser.failure(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1044 builder.add(exp); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1045 while( parser.match(',') ) { |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1046 Spaces(in); |
158
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
1047 exp = TemplateExpressions(in); |
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
1048 if( exp != null ) { |
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
1049 builder.add(exp); |
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
1050 return parser.success(); |
cced1c4d3575
only allow TemplateExpressions at end of expr list;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
157
diff
changeset
|
1051 } |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
1052 builder.add( exp(RequiredExpr(in)) ); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1053 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1054 return parser.success(); |
9
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
1055 } |
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
1056 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1057 private Expr SubExpr(In in) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1058 parser.begin(); |
209
239c8d650028
convert returned arrays to tables for java methods
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
206
diff
changeset
|
1059 if( !parser.match('[') || parser.test("[") || parser.test("=") ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1060 return parser.failure(null); |
604
b73f005f3735
table constructor now uses end_of_line as a delimiter
Franklin Schmidt <fschmidt@gmail.com>
parents:
584
diff
changeset
|
1061 Spaces(In.NOTHING); |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
1062 Expr exp = expr(exp(RequiredExpr(In.NOTHING))); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1063 RequiredMatch(']'); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1064 Spaces(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1065 return parser.success(exp); |
11
b7d7069fee58
add assignment statement and CmdLine
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
9
diff
changeset
|
1066 } |
b7d7069fee58
add assignment statement and CmdLine
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
9
diff
changeset
|
1067 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1068 private Expr NameExpr(In in) throws ParseException { |
645 | 1069 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1070 String name = Name(in); |
195
24ede40ee0aa
make MetatableGetter DeepCloneable, scoped, and secure
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
193
diff
changeset
|
1071 if( name==null ) |
24ede40ee0aa
make MetatableGetter DeepCloneable, scoped, and secure
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
193
diff
changeset
|
1072 return parser.failure(null); |
645 | 1073 return parser.success(new ConstExpr(name)); |
54
f5b27ef14d73
add OutputStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
51
diff
changeset
|
1074 } |
f5b27ef14d73
add OutputStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
51
diff
changeset
|
1075 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1076 private String RequiredName(In in) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1077 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1078 String name = Name(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1079 if( name==null ) |
139
3b384dc5ca91
replace WebShell.java with web_shell.luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
137
diff
changeset
|
1080 throw parser.exception("Name expected"); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1081 return parser.success(name); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1082 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1083 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1084 private String Name(In in) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1085 int start = parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1086 if( !NameFirstChar() ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1087 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1088 while( NameChar() ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1089 String match = parser.textFrom(start); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1090 if( keywords.contains(match) ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1091 return parser.failure(null); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1092 Spaces(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1093 return parser.success(match); |
17
09d41f7490a8
add local variables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
16
diff
changeset
|
1094 } |
09d41f7490a8
add local variables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
16
diff
changeset
|
1095 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1096 private boolean NameChar() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1097 return NameFirstChar() || Digit(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1098 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1099 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1100 private boolean NameFirstChar() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1101 return parser.inCharRange('a', 'z') || parser.inCharRange('A', 'Z') || parser.match('_'); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1102 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1103 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1104 private void RequiredMatch(char c) throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1105 if( !parser.match(c) ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1106 throw parser.exception("'"+c+"' expected"); |
9
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
1107 } |
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
1108 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1109 private void RequiredMatch(String s) throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1110 if( !parser.match(s) ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1111 throw parser.exception("'"+s+"' expected"); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1112 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1113 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1114 private void RequiredKeyword(String keyword,In in) throws ParseException { |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1115 if( !Keyword(keyword,in) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1116 throw parser.exception("'"+keyword+"' expected"); |
9
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
1117 } |
600676034a1a
add variables and tables
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
8
diff
changeset
|
1118 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1119 private boolean Keyword(String keyword,In in) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1120 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1121 if( !parser.match(keyword) || NameChar() ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1122 return parser.failure(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1123 Spaces(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1124 return parser.success(); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1125 } |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1126 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1127 private static final Set<String> keywords = new HashSet<String>(Arrays.asList( |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1128 "and", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1129 "break", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1130 "do", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1131 "else", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1132 "elseif", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1133 "end", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1134 "false", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1135 "for", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1136 "function", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1137 "goto", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1138 "if", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1139 "in", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1140 "local", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1141 "nil", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1142 "not", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1143 "or", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1144 "repeat", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1145 "return", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1146 "then", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1147 "true", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1148 "until", |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1149 "while" |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1150 )); |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1151 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1152 private Expr Literal(In in) throws ParseException { |
645 | 1153 parser.begin(); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1154 if( NilLiteral(in) ) |
645 | 1155 return parser.success(new ConstExpr(null)); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1156 Boolean b = BooleanLiteral(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1157 if( b != null ) |
645 | 1158 return parser.success(new ConstExpr(b)); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1159 Number n = NumberLiteral(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1160 if( n != null ) |
645 | 1161 return parser.success(new ConstExpr(n)); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1162 String s = StringLiteral(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1163 if( s != null ) |
645 | 1164 return parser.success(new ConstExpr(s)); |
195
24ede40ee0aa
make MetatableGetter DeepCloneable, scoped, and secure
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
193
diff
changeset
|
1165 return parser.failure(null); |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1166 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1167 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1168 private boolean NilLiteral(In in) throws ParseException { |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1169 return Keyword("nil",in); |
65
1ff53a88579a
multi-line statements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
60
diff
changeset
|
1170 } |
1ff53a88579a
multi-line statements
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
60
diff
changeset
|
1171 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1172 private Boolean BooleanLiteral(In in) throws ParseException { |
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1173 if( Keyword("true",in) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1174 return true; |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1175 if( Keyword("false",in) ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1176 return false; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1177 return null; |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1178 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1179 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1180 private Number NumberLiteral(In in) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1181 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1182 Number n; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1183 if( parser.matchIgnoreCase("0x") ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1184 n = HexNumber(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1185 } else { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1186 n = DecNumber(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1187 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1188 if( n==null || NameChar() ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1189 return parser.failure(null); |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1190 Spaces(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1191 return parser.success(n); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1192 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1193 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1194 private Number DecNumber() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1195 int start = parser.begin(); |
535
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1196 boolean isInt = true; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1197 if( Int() ) { |
535
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1198 if( parser.match('.') ) { |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1199 isInt = false; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1200 Int(); // optional |
535
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1201 } |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1202 } else if( parser.match('.') && Int() ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1203 // ok |
535
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1204 isInt = false; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1205 } else |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1206 return parser.failure(null); |
535
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1207 if( Exponent() ) // optional |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1208 isInt = false; |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1209 String s = parser.textFrom(start); |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1210 if( isInt ) { |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1211 try { |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1212 return parser.success(Integer.valueOf(s)); |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1213 } catch(NumberFormatException e) {} |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1214 try { |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1215 return parser.success(Long.valueOf(s)); |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1216 } catch(NumberFormatException e) {} |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1217 } |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1218 return parser.success(Double.valueOf(s)); |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1219 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1220 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1221 private boolean Exponent() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1222 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1223 if( !parser.matchIgnoreCase("e") ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1224 return parser.failure(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1225 parser.anyOf("+-"); // optional |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1226 if( !Int() ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1227 return parser.failure(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1228 return parser.success(); |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1229 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1230 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1231 private boolean Int() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1232 if( !Digit() ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1233 return false; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1234 while( Digit() ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1235 return true; |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1236 } |
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1237 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1238 private boolean Digit() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1239 return parser.inCharRange('0', '9'); |
16
2a30281ef47c
finish number literals;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
15
diff
changeset
|
1240 } |
2a30281ef47c
finish number literals;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
15
diff
changeset
|
1241 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1242 private Number HexNumber() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1243 int start = parser.begin(); |
535
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1244 long nLong = 0; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1245 double n; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1246 if( HexInt() ) { |
535
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1247 nLong = Long.parseLong(parser.textFrom(start),16); |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1248 n = (double)nLong; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1249 if( parser.match('.') ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1250 start = parser.currentIndex(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1251 if( HexInt() ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1252 String dec = parser.textFrom(start); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1253 n += (double)Long.parseLong(dec,16) / Math.pow(16,dec.length()); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1254 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1255 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1256 } else if( parser.match('.') && HexInt() ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1257 String dec = parser.textFrom(start+1); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1258 n = (double)Long.parseLong(dec,16) / Math.pow(16,dec.length()); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1259 } else { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1260 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1261 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1262 if( parser.matchIgnoreCase("p") ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1263 parser.anyOf("+-"); // optional |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1264 start = parser.currentIndex(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1265 if( !HexInt() ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1266 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1267 n *= Math.pow(2,(double)Long.parseLong(parser.textFrom(start))); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1268 } |
535
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1269 if( nLong == n ) { |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1270 int nInt = (int)nLong; |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1271 if( nInt == nLong ) |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1272 return parser.success(Integer.valueOf(nInt)); |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1273 return parser.success(Long.valueOf(nLong)); |
289908469e02
parse numeric constants to ints or longs if possible
Franklin Schmidt <fschmidt@gmail.com>
parents:
534
diff
changeset
|
1274 } |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1275 return parser.success(Double.valueOf(n)); |
16
2a30281ef47c
finish number literals;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
15
diff
changeset
|
1276 } |
2a30281ef47c
finish number literals;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
15
diff
changeset
|
1277 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1278 private boolean HexInt() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1279 if( !HexDigit() ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1280 return false; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1281 while( HexDigit() ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1282 return true; |
16
2a30281ef47c
finish number literals;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
15
diff
changeset
|
1283 } |
2a30281ef47c
finish number literals;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
15
diff
changeset
|
1284 |
2a30281ef47c
finish number literals;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
15
diff
changeset
|
1285 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1286 private boolean HexDigit() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1287 return Digit() || parser.anyOf("abcdefABCDEF"); |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
1288 } |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
1289 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1290 private String StringLiteral(In in) throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1291 String s; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1292 if( (s=QuotedString('"'))==null |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1293 && (s=QuotedString('\''))==null |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1294 && (s=LongString())==null |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1295 ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1296 return null; |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1297 Spaces(in); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1298 return s; |
16
2a30281ef47c
finish number literals;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
15
diff
changeset
|
1299 } |
2a30281ef47c
finish number literals;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
15
diff
changeset
|
1300 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1301 private String LongString() throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1302 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1303 if( !parser.match('[') ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1304 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1305 int start = parser.currentIndex(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1306 while( parser.match('=') ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1307 int nEquals = parser.currentIndex() - start; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1308 if( !parser.match('[') ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1309 return parser.failure(null); |
120
8d7730a5e3b4
move standalone logic from Java to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
118
diff
changeset
|
1310 EndOfLine(); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1311 start = parser.currentIndex(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1312 while( !LongBracketsEnd(nEquals) ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1313 if( !parser.anyChar() ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1314 throw parser.exception("Unclosed long string"); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1315 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1316 String s = parser.text.substring( start, parser.currentIndex() - nEquals - 2 ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1317 return parser.success(s); |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
1318 } |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
1319 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1320 private String QuotedString(char quote) throws ParseException { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1321 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1322 if( !parser.match(quote) ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1323 return parser.failure(null); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1324 StringBuilder buf = new StringBuilder(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1325 while( !parser.match(quote) ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1326 Character c = EscSeq(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1327 if( c != null ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1328 buf.append(c); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1329 } else { |
271
82a3ebcfbafa
add internal tests
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
1330 if( parser.test('\r') || parser.test('\n') || !parser.anyChar() ) |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1331 throw parser.exception("Unclosed string"); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1332 buf.append(parser.lastChar()); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1333 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1334 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1335 return parser.success(buf.toString()); |
6
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
1336 } |
a315783c9524
more parsing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
5
diff
changeset
|
1337 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1338 private Character EscSeq() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1339 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1340 if( !parser.match('\\') ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1341 return parser.failure(null); |
155
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1342 if( parser.match('a') ) return parser.success('\u0007'); |
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1343 if( parser.match('b') ) return parser.success('\b'); |
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1344 if( parser.match('f') ) return parser.success('\f'); |
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1345 if( parser.match('n') ) return parser.success('\n'); |
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1346 if( parser.match('r') ) return parser.success('\r'); |
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1347 if( parser.match('t') ) return parser.success('\t'); |
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1348 if( parser.match('v') ) return parser.success('\u000b'); |
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1349 if( parser.match('\\') ) return parser.success('\\'); |
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1350 if( parser.match('"') ) return parser.success('"'); |
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1351 if( parser.match('\'') ) return parser.success('\''); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1352 int start = parser.currentIndex(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1353 if( parser.match('x') && HexDigit() && HexDigit() ) |
155
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1354 return parser.success((char)Integer.parseInt(parser.textFrom(start+1),16)); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1355 if( Digit() ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1356 if( Digit() ) Digit(); // optional |
155
db7b3902e01c
fix parsing problems
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
154
diff
changeset
|
1357 return parser.success((char)Integer.parseInt(parser.textFrom(start))); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1358 } |
271
82a3ebcfbafa
add internal tests
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
1359 if( EndOfLine() ) |
82a3ebcfbafa
add internal tests
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
260
diff
changeset
|
1360 return parser.success('\n'); |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1361 return parser.failure(null); |
14
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
1362 } |
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
1363 |
129
486a0641bca4
add pickle client/server;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
128
diff
changeset
|
1364 private void Spaces(In in) throws ParseException { |
247
b5995d77878a
fix parsing of comments
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
245
diff
changeset
|
1365 while( parser.anyOf(" \t") || Comment() || ContinueOnNextLine() || in.parens && EndOfLine() ); |
14
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
1366 } |
2ddf85634d20
whitespace handling;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
12
diff
changeset
|
1367 |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1368 private boolean ContinueOnNextLine() { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1369 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1370 return parser.match('\\') && EndOfLine() ? parser.success() : parser.failure(); |
7
bca8fc5d928b
work on expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
6
diff
changeset
|
1371 } |
bca8fc5d928b
work on expressions
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
6
diff
changeset
|
1372 |
247
b5995d77878a
fix parsing of comments
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
245
diff
changeset
|
1373 private boolean Comment() throws ParseException { |
b5995d77878a
fix parsing of comments
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
245
diff
changeset
|
1374 if( LongComment() ) |
b5995d77878a
fix parsing of comments
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
245
diff
changeset
|
1375 return true; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1376 if( parser.match("--") ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1377 while( parser.noneOf("\r\n") ); |
247
b5995d77878a
fix parsing of comments
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
245
diff
changeset
|
1378 return true; |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1379 } |
247
b5995d77878a
fix parsing of comments
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
245
diff
changeset
|
1380 return false; |
18
3971113699b8
add NumericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
17
diff
changeset
|
1381 } |
3971113699b8
add NumericForStmt
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
17
diff
changeset
|
1382 |
247
b5995d77878a
fix parsing of comments
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
245
diff
changeset
|
1383 private boolean LongComment() throws ParseException { |
104
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1384 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1385 if( !parser.match("--[") ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1386 return parser.failure(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1387 int start = parser.currentIndex(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1388 while( parser.match('=') ); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1389 int nEquals = parser.currentIndex() - start; |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1390 if( !parser.match('[') ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1391 return parser.failure(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1392 while( !LongBracketsEnd(nEquals) ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1393 if( !parser.anyChar() ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1394 throw parser.exception("Unclosed comment"); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1395 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1396 return parser.success(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1397 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1398 |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1399 private boolean LongBracketsEnd(int nEquals) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1400 parser.begin(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1401 if( !parser.match(']') ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1402 return parser.failure(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1403 while( nEquals-- > 0 ) { |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1404 if( !parser.match('=') ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1405 return parser.failure(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1406 } |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1407 if( !parser.match(']') ) |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1408 return parser.failure(); |
754e6030c029
remove parboiled and rewrite parser;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
99
diff
changeset
|
1409 return parser.success(); |
12
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1410 } |
9cea1aea5eef
CmdLine can run files
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
11
diff
changeset
|
1411 |
648
e387e4021afe
start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
1412 |
e387e4021afe
start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
1413 |
e387e4021afe
start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
1414 |
e387e4021afe
start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
1415 private static int classCounter = 0; |
e387e4021afe
start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
1416 |
649
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1417 private class ExpString { |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1418 final String code; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1419 final boolean isExpr; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1420 final boolean isStmt; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1421 |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1422 ExpString(Expressions exp) { |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1423 if( exp==null ) throw new NullPointerException(); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1424 int i = $Luan.addExpressions(exp); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1425 code = "$Luan.getExpressions(" + i + ").eval($luan)"; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1426 isExpr = exp instanceof Expr; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1427 isStmt = exp instanceof StmtExp; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1428 } |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1429 |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1430 ExpString(String code,boolean isExpr,boolean isStmt) { |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1431 this.code = code; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1432 this.isExpr = isExpr; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1433 this.isStmt = isStmt; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1434 } |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1435 |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1436 ExpString expr() { |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
1437 return isExpr ? this : new ExpString( "$Luan.first(" + code + ")", true, isStmt ); |
649
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1438 } |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1439 |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1440 Expressions toExpressions() { |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1441 String superClass = isStmt ? "StmtExp" : "Expressions"; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1442 String className = "EXP" + ++classCounter; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1443 String classCode = "" |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1444 +"package luan.impl;\n" |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1445 +"import luan.LuanException;\n" |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1446 +"\n" |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1447 +"public class " + className +" implements " + superClass + " {\n" |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1448 +" @Override public Object eval(LuanStateImpl $luan) throws LuanException {\n" |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
1449 +" Object $cnd;\n" |
649
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1450 +" return " + code + ";\n" |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1451 +" }\n" |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1452 +"}\n" |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1453 ; |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1454 //System.out.println(code); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1455 try { |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1456 Class cls = LuanJavaCompiler.compile("luan.impl."+className,code,classCode); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1457 return (Expressions)cls.newInstance(); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1458 } catch(ClassNotFoundException e) { |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1459 throw new RuntimeException(e); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1460 } catch(InstantiationException e) { |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1461 throw new RuntimeException(e); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1462 } catch(IllegalAccessException e) { |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1463 throw new RuntimeException(e); |
37f0cf43f191
UnaryExpr now compiled
Franklin Schmidt <fschmidt@gmail.com>
parents:
648
diff
changeset
|
1464 } |
648
e387e4021afe
start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
1465 } |
e387e4021afe
start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
1466 } |
e387e4021afe
start compiler with len operator
Franklin Schmidt <fschmidt@gmail.com>
parents:
645
diff
changeset
|
1467 |
650
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
1468 private static Expressions exp(ExpString expStr) { |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
1469 return expStr==null ? null : expStr.toExpressions(); |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
1470 } |
d658eab7bf4c
finish compiling operators
Franklin Schmidt <fschmidt@gmail.com>
parents:
649
diff
changeset
|
1471 |
651
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1472 |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1473 private static class StmtString { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1474 final String code; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1475 |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1476 StmtString(Stmt stmt) { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1477 if( stmt==null ) throw new NullPointerException(); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1478 int i = $Luan.addStmt(stmt); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1479 code = "$Luan.getStmt(" + i + ").eval($luan);\n"; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1480 } |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1481 |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1482 StmtString(String code) { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1483 this.code = code; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1484 } |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1485 |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1486 Stmt toStmt() { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1487 String className = "EXP" + ++classCounter; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1488 String classCode = "" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1489 +"package luan.impl;\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1490 +"import luan.LuanException;\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1491 +"\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1492 +"public class " + className +" implements Stmt {\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1493 +" @Override public void eval(LuanStateImpl $luan) throws LuanException {\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1494 +" Object $cnd;\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1495 +" " + code |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1496 +" }\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1497 +"}\n" |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1498 ; |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1499 //System.out.println(code); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1500 try { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1501 Class cls = LuanJavaCompiler.compile("luan.impl."+className,code,classCode); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1502 return (Stmt)cls.newInstance(); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1503 } catch(ClassNotFoundException e) { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1504 throw new RuntimeException(e); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1505 } catch(InstantiationException e) { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1506 throw new RuntimeException(e); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1507 } catch(IllegalAccessException e) { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1508 throw new RuntimeException(e); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1509 } |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1510 } |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1511 } |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1512 |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1513 private static StmtString EMPTY_STMT = new StmtString(""); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1514 |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1515 private static Stmt stmt(StmtString stmtStr) { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1516 return stmtStr==null ? null : stmtStr.toStmt(); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1517 } |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1518 |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1519 private static StmtString stmtStr(Stmt stmt) { |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1520 return stmt==null ? null : new StmtString(stmt); |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1521 } |
140cc5191b7a
start compiling statements
Franklin Schmidt <fschmidt@gmail.com>
parents:
650
diff
changeset
|
1522 |
5
9ef0fd711101
start LuaParser
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1523 } |