Mercurial > repos > rhope
annotate parse.rhope @ 160:f97a7d499182
Optimize _Partition@Pattern using a byte iterator
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 07 Jan 2011 03:18:33 -0500 |
parents | 386f4a874821 |
children | 47ab97730865 |
rev | line source |
---|---|
2 | 1 |
2 Blueprint Error | |
3 { | |
4 Message | |
5 Line | |
6 Column | |
7 } | |
8 | |
9 Error[msg,text:out] | |
10 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
11 out <- [[[Build[Error()]]Message <<[msg]]Line << [ [[text]Line >>]+[1] ]]Column << [ [[text]Column >>]+[1] ] |
2 | 12 } |
13 | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
14 String@Error[error:out] |
2 | 15 { |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
16 out <- [[[[[error]Message >>]Append[" on line "]]Append[String[[error]Line >>]]]Append[" at column "]]Append[String[[error]Column >>]] |
2 | 17 } |
18 | |
19 Blueprint PImport Node | |
20 { | |
21 File | |
22 } | |
23 | |
24 PImport Node[file:out] | |
25 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
26 out <- [Build[PImport Node()]]File <<[file] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
27 } |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
28 |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
29 String@PImport Node[node:out] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
30 { |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
31 out <- ["Import: "]Append[[node]File >>] |
2 | 32 } |
33 | |
34 Blueprint Worker Node | |
35 { | |
36 Name | |
37 Blueprint | |
38 Inputs | |
39 Outputs | |
40 Tree | |
41 } | |
42 | |
43 Add Node Input@Worker Node[node,input:out] | |
44 { | |
45 Print["Add Node Input"] | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
46 Print[["Input: "]Append[String[input]]] |
2 | 47 out <- [node]Inputs <<[[[node]Inputs >>]Append[input]] |
48 } | |
49 | |
50 Add Node Output@Worker Node[node,output:out] | |
51 { | |
52 out <- [node]Outputs <<[[[node]Outputs >>]Append[output]] | |
53 } | |
54 | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
55 String@Worker Node[node:out] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
56 { |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
57 out <- [[[[["Worker: "]Append[[node]Name >>] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
58 ]Append[ ["\n\tBlueprint:\t"]Append[String[[node]Blueprint >>]] ] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
59 ]Append[ ["\n\tInputs: \t"]Append[[[node]Inputs >>]Join[", "]] ] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
60 ]Append[ ["\n\tOutputs:\t"]Append[[[node]Outputs >>]Join[", "]] ] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
61 ]Append[ ["\n\tTree: \t"]Append[ [[String[[node]Tree >>]]Split["\n"]]Join["\n\t"] ] ] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
62 } |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
63 |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
64 Blueprint Statement |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
65 { |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
66 Expression |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
67 Assignments |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
68 Blocks |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
69 } |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
70 |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
71 Statement[expression,assignments:out] |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
72 { |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
73 out <- [[[Build[Statement()]]Expression <<[expression]]Assignments <<[assignments]]Blocks <<[()] |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
74 } |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
75 |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
76 Add Block@Statement[statement,block:out] |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
77 { |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
78 out <- [statement]Blocks <<[ [[statement]Blocks >>]Append[block] ] |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
79 } |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
80 |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
81 String@Statement[statement:out] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
82 { |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
83 out <- [[["Statement\n\tExpression:\t" |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
84 ]Append[ [[String[[statement]Expression >>]]Split["\n"]]Join["\n\t"] ] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
85 ]Append[ ["\n\tAssignments:\t"]Append[[[statement]Assignments >>]Join[", "]] ] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
86 ]Append[ ["\n\tBlocks:\t"]Append[ [[String[[statement]Blocks >>]]Split["\n"]]Join["\n\t"] ] ] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
87 } |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
88 |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
89 Blueprint Worker Call |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
90 { |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
91 Worker |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
92 Blueprint |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
93 Arguments |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
94 } |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
95 |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
96 Worker Call[worker,blueprint:out] |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
97 { |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
98 out <- [[[Build[Worker Call()]]Worker <<[worker]]Blueprint <<[blueprint]]Arguments <<[()] |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
99 } |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
100 |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
101 String@Worker Call[exp:out] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
102 { |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
103 out <- ["Worker Call\n\tWorker:\t"]Append[[exp]Worker >>] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
104 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
105 |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
106 Blueprint Global Reference |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
107 { |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
108 Store |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
109 Variable |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
110 } |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
111 |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
112 Blueprint Pipe Value |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
113 { |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
114 Name |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
115 } |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
116 |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
117 Pipe Value[name:out] |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
118 { |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
119 out <- [Build[Pipe Value()]]Name <<[name] |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
120 } |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
121 |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
122 String@Pipe Value[pipe:out] |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
123 { |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
124 out <- ["Pipe Value\n\tName:\t"]Append[[pipe]Name >>] |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
125 } |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
126 |
134 | 127 Blueprint Literal |
128 { | |
129 Value | |
130 } | |
131 | |
132 Literal[val:out] | |
133 { | |
134 out <- [Build[Literal()]]Value <<[val] | |
135 } | |
136 | |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
137 Blueprint Block |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
138 { |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
139 Tree |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
140 } |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
141 |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
142 Block[:out] |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
143 { |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
144 out <- [Build[Block()]]Tree <<[()] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
145 } |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
146 |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
147 String@Block[block:out] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
148 { |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
149 out <- Fold[_String Seq[?], "Block", [block]Tree >>] |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
150 } |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
151 |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
152 Blueprint Field Call |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
153 { |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
154 Name |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
155 Set? |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
156 Arguments |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
157 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
158 |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
159 Field Call[name,set?:out] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
160 { |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
161 out <- [[[Build[Field Call()]]Name <<[name]]Set? <<[set?]]Arguments <<[()] |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
162 } |
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
163 |
134 | 164 After Literal[tokens,current,literal:out,out index] |
165 { | |
166 next index <- [tokens]Next[current] | |
167 { | |
168 after <- [tokens]Index[~] | |
169 [after]Type Match["Call Separator"] | |
170 { | |
171 out,out index <- To Call[tokens,next index,[()]Append[literal]] | |
172 }{ | |
173 [after]Type Match[("Newline","Block End","List End")] | |
174 { | |
175 out <- literal | |
176 out index <- current | |
177 } | |
178 } | |
179 }{ | |
180 out <- literal | |
181 out index <- current | |
182 } | |
183 } | |
184 | |
185 Parse Hex[text:out,error] | |
186 { | |
187 | |
188 } | |
189 | |
190 Parse Number[text:out,error] | |
191 { | |
192 [text]Starts With["0x"] | |
193 { | |
194 [text]Slice[2] {} | |
195 { out,error <- Parse Hex[~] } | |
196 }{ | |
197 [text]Contains["."] | |
198 { | |
199 | |
200 }{ | |
201 val,sign,size <-[text]Partition[("u","i")] {} {} {} | |
202 { | |
203 //TODO: Produce "bigint" instead of Int32 | |
204 out <- Int32[text] | |
205 } | |
206 } | |
207 } | |
208 } | |
209 | |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
210 Expression[tokens,current:out,out index,none] |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
211 { |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
212 token <- [tokens]Index[current] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
213 [token]Type Match["Symbol"] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
214 { |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
215 ,end stream <- [tokens]Next[current] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
216 { |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
217 after <- [tokens]Index[~] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
218 [after]Type Match["Args Begin"] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
219 { |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
220 |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
221 }{ |
134 | 222 [after]Type Match["Call Separator"] |
223 { | |
224 | |
225 }{ | |
226 [after]Type Match["Newline"] | |
227 { | |
228 | |
229 }{ | |
230 | |
231 } | |
232 } | |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
233 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
234 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
235 }{ |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
236 [token]Type Match[("Field Get","Field Set")] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
237 { |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
238 [token]Type Match["Field Set"] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
239 { set? <- Yes } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
240 { set? <- No } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
241 Field Call[[token]Text >>, set?] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
242 }{ |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
243 [token]Type Match["Args Begin"] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
244 { |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
245 |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
246 }{ |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
247 [token]Type Match["List Begin"] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
248 { |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
249 |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
250 }{ |
134 | 251 [token]Type Match["String Literal"] |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
252 { |
134 | 253 lit <- [token]Text >> |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
254 }{ |
134 | 255 [token]Type Match["Numeric Literal"] |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
256 { |
134 | 257 lit <- Parse Number[[token]Text >>] |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
258 }{ |
134 | 259 [token]Type Match["Newline"] |
260 { | |
261 ,none <- [tokens]Next[current] | |
262 { out, out index <- Expression[tokens, ~] } | |
263 }{ | |
264 none, unexpected token <- [token]Type Match["Block End"] | |
265 } | |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
266 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
267 } |
134 | 268 out,out index <- After Literal[tokens,current,Literal[lit]] |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
269 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
270 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
271 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
272 } |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
273 } |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
274 |
5
a4d2d633a356
Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents:
4
diff
changeset
|
275 |
2 | 276 Body[node,tokens,current,depth:out,out index, done] |
277 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
278 Print[["Body: Depth="]Append[String[depth]]] |
2 | 279 If[[depth] > [0]] |
280 { | |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
281 //symbol list = Symbol [List Separator symbol list] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
282 //value = String Literal | Number Literal | List Literal | Symbol | Block Reference | expression |
134 | 283 //call = [Args Begin arg list Args End]Symbol[Args Begin arg list Args End] | (value | Arg Placeholder) Call Separator Symbol |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
284 //arg list = value | Arg Placeholder [List Separator arg list] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
285 //block = Block Begin [expressions] Block End |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
286 //blocks = block [blocks] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
287 //expressions = expression [expressions] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
288 //expression = [symbol list Assignment] call | value blocks | Newline |
2 | 289 token <- [tokens]Index[current] |
290 [token]Type Match["Block Begin"] | |
291 { | |
292 ,end stream <- [tokens]Next[current] | |
293 { | |
294 out,out index, done <- Body[node,tokens,~,[depth]+[1]] | |
295 } | |
296 }{ | |
297 [token]Type Match["Block End"] | |
298 { | |
299 [tokens]Next[current] | |
300 { | |
301 out,out index, done <- Body[node,tokens,~,[depth]-[1]] | |
302 }{ | |
303 ,end stream <- If[[depth] = [1]] | |
304 { | |
305 Print["done"] | |
306 out <- Val[node] | |
307 done <- Yes | |
308 } | |
309 } | |
310 }{ | |
311 ,end stream <- [tokens]Next[current] | |
312 { | |
313 out,out index, done <- Body[node,tokens,~,depth] | |
314 } | |
315 } | |
316 } | |
317 }{ | |
318 out <- node | |
319 out index <- current | |
320 } | |
321 Val[end stream] | |
322 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
323 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 324 } |
325 } | |
326 | |
327 Before Body[node,tokens,current:out,out index, done] | |
328 { | |
329 Print["Before body"] | |
330 token <- [tokens]Index[current] | |
331 next,end stream <- [tokens]Next[current] | |
332 { | |
333 [token]Type Match["Block Begin"] | |
334 { | |
335 out,out index, done <- Body[node,tokens,next,1] | |
336 }{ | |
337 out,out index, done <- Before Body[node,tokens,next] | |
338 } | |
339 } | |
340 Val[end stream] | |
341 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
342 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 343 } |
344 } | |
345 | |
346 Outputs[node,tokens,current:out,out index, done] | |
347 { | |
348 Print["outputs"] | |
349 token <- [tokens]Index[current] | |
350 next,end stream <- [tokens]Next[current] | |
351 { | |
352 [token]Type Match["Symbol"] | |
353 { | |
354 out,out index, done <- Outputs[[node]Add Node Output[[token]Text >>], tokens, next] | |
355 }{ | |
356 [token]Type Match["Args End"] | |
357 { | |
358 out,out index, done <- Before Body[node, tokens, next] | |
359 }{ | |
360 [token]Type Match[("List Separator","Block Comment","Line Comment","Newline")] | |
361 { | |
362 out,out index, done <- Outputs[node, tokens, next] | |
363 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
364 Print[String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 365 } |
366 } | |
367 } | |
368 } | |
369 Val[end stream] | |
370 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
371 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 372 } |
373 } | |
374 | |
375 Inputs[node,tokens,current:out,out index, done] | |
376 { | |
377 Print["Inputs"] | |
378 token <- [tokens]Index[current] | |
379 next,end stream <- [tokens]Next[current] | |
380 { | |
381 [token]Type Match["Symbol"] | |
382 { | |
383 | |
384 out,out index, done <- Inputs[[node]Add Node Input[[token]Text >>], tokens, next] | |
385 }{ | |
386 [token]Type Match["Name Separator"] | |
387 { | |
388 Print["in out sep"] | |
389 out,out index, done <- Outputs[node, tokens, next] | |
390 }{ | |
391 [token]Type Match["Args End"] | |
392 { | |
393 out,out index, done <- Before Body[node, tokens, next] | |
394 }{ | |
395 [token]Type Match[("List Separator","Block Comment","Line Comment","Newline")] | |
396 { | |
397 out,out index,done <- Inputs[node, tokens, next] | |
398 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
399 Print[String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 400 } |
401 } | |
402 } | |
403 } | |
404 } | |
405 Val[end stream] | |
406 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
407 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 408 } |
409 } | |
410 | |
411 Method[node,tokens,current:out,out index,done] | |
412 { | |
413 token <- [tokens]Index[current] | |
414 next <- [tokens]Next[current] | |
415 { | |
416 [token]Type Match["Symbol"] | |
417 { | |
418 out,out index,done <- Before Inputs[[node]Blueprint <<[[token]Text >>], tokens, next] | |
419 }{ | |
420 [token]Type Match[("List Separator","Block Comment","Line Comment","Newline")] | |
421 { | |
422 out,out index,done <- Method[node, tokens, next] | |
423 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
424 Print[String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 425 } |
426 } | |
427 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
428 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 429 } |
430 } | |
431 | |
432 //TODO: support method declarations | |
433 Before Inputs[node, tokens, current:out, out index, done] | |
434 { | |
435 Print["Before Inputs"] | |
436 token <- [tokens]Index[current] | |
437 [token]Type Match["Args Begin"] | |
438 { | |
439 [tokens]Next[current] | |
440 { | |
441 out,out index, done <- Inputs[node, tokens, ~] | |
442 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
443 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 444 } |
445 }{ | |
446 [token]Type Match["Method Separator"] | |
447 { | |
448 [tokens]Next[current] | |
449 { | |
450 out,out index,done <- Method[node, tokens, ~] | |
451 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
452 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 453 } |
454 }{ | |
455 [token]Type Match[("Line Comment","Block Comment","Newline")] | |
456 { | |
457 continue <- Yes | |
458 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
459 Print[String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 460 } |
461 Val[continue] | |
462 { | |
463 [tokens]Next[current] | |
464 { | |
465 out,out index, done <- Before Inputs[node, tokens, ~] | |
466 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
467 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 468 } |
469 } | |
470 } | |
471 } | |
472 } | |
473 | |
474 Worker Node[name, tokens, current:out,out index, done] | |
475 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
476 Print[["Worker: "]Append[String[name]]] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
477 out,out index, done <- Before Inputs[[[[[[Build[Worker Node()]]Name <<[name]]Inputs <<[()]]Outputs <<[()]]Blueprint <<[No]]Tree <<[()], tokens, current] |
2 | 478 } |
479 | |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
480 Skip Nodes[toskip, stop, tokens, current:out] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
481 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
482 token <- [tokens]Index[current] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
483 next <- [tokens]Next[current] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
484 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
485 [token]Type Match[stop] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
486 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
487 out <- Val[next] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
488 }{ |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
489 [token]Type Match[toskip] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
490 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
491 out <- Skip Nodes[toskip, stop, tokens, next] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
492 }{ |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
493 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
494 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
495 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
496 }{ |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
497 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
498 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
499 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
500 |
2 | 501 Blueprint PBlueprint Node |
502 { | |
503 Name | |
504 Fields | |
505 } | |
506 | |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
507 Fields[node,tokens,current:out,out index,done] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
508 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
509 token <- [tokens]Index[current] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
510 next <- [tokens]Next[current] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
511 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
512 [token]Type Match["Symbol"] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
513 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
514 out,out index,done <- Fields[[node]Add BField[[token]Text >>], tokens, next] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
515 }{ |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
516 [token]Type Match["Block End"] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
517 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
518 out <- Val[node] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
519 out index <- Val[next] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
520 }{ |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
521 [token]Type Match[("Newline","Line Comment","Block Comment")] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
522 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
523 out,out index,done <- Fields[node, tokens, next] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
524 }{ |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
525 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
526 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
527 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
528 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
529 }{ |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
530 [token]Type Match["Block End"] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
531 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
532 out <- Val[node] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
533 done <- Yes |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
534 }{ |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
535 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
536 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
537 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
538 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
539 |
2 | 540 PBlueprint Node[name, tokens, current:out,out index,done] |
541 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
542 node <- [[Build[PBlueprint Node()]]Name <<[name]]Fields <<[()] |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
543 next <- Skip Nodes[("Newline","Block Comment","Comment"), "Block Begin", tokens, current] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
544 out,out index,done <- Fields[node, tokens, next] |
2 | 545 } |
546 | |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
547 Add BField@PBlueprint Node[node,field:out] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
548 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
549 out <- [node]Fields <<[[[node]Fields >>]Append[field]] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
550 } |
2 | 551 |
552 Top Level[tokens, current, nodes:out] | |
553 { | |
554 token <- [tokens]Index[current] | |
555 Print[[token]Type >>] | |
556 [token]Type Match["Symbol"] | |
557 { | |
558 [[token]Text >>]After["Import "] | |
559 { | |
560 next nodes <- [nodes]Append[PImport Node[~]] | |
561 next index <- Val[current] | |
562 }{ | |
563 blueprint name,worker name <- [~]After["Blueprint "] | |
564 { | |
565 [tokens]Next[current] | |
566 { | |
567 , next index <- PBlueprint Node[blueprint name, tokens, ~] | |
568 { | |
569 next nodes <- [nodes]Append[~] | |
570 } {} { | |
571 Print["done!"] | |
572 out <- Val[next nodes] | |
573 } | |
574 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
575 Print[String[Error[["Unexpected end of stream after symbol "]Append[[token]Text >>], [token]Raw Text >>]]] |
2 | 576 } |
577 }{ | |
578 [tokens]Next[current] | |
579 { | |
580 , next index <- Worker Node[worker name, tokens, ~] | |
581 { | |
582 next nodes <- [nodes]Append[~] | |
583 } {} { | |
584 Print["done!"] | |
585 out <- Val[next nodes] | |
586 } | |
587 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
588 Print[String[Error[["Unexpected end of stream after symbol "]Append[[token]Text >>], [token]Raw Text >>]]] |
2 | 589 } |
590 } | |
591 } | |
592 | |
593 }{ | |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
594 [token]Type Match["Newline"] |
2 | 595 { |
596 next nodes <- Val[nodes] | |
597 next index <- Val[current] | |
598 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
599 Print[String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 600 } |
601 } | |
602 [tokens]Next[next index] | |
603 { | |
604 out <- Top Level[tokens, ~, next nodes] | |
605 }{ | |
606 out <- Val[next nodes] | |
607 } | |
608 } | |
609 | |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
610 NotComment[token:out] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
611 { |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
612 [token]Type Match[("Block Comment","Line Comment")] |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
613 { |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
614 out <- No |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
615 }{ |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
616 out <- Yes |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
617 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
618 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
619 |
2 | 620 Parse[tokens:out] |
621 { | |
622 [tokens]First | |
623 { | |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
624 out <- Top Level[Filter[tokens, NotComment[?]], ~, ()] |
2 | 625 }{ |
626 out <- () | |
627 } | |
628 } | |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
629 |