Mercurial > repos > rhope
annotate parse.rhope @ 184:c6ba9fe45910
Strip _c from filenames of current compiler
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 27 Jul 2011 21:28:43 -0700 |
parents | db30bda91aad |
children |
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 { | |
182
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
281 /* |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
282 symbol list = Symbol [List Separator symbol list] |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
283 value = String Literal | Number Literal | List Literal | Symbol | Block Reference | expression |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
284 call = |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
285 Args Begin arg list Args End Symbol[Args Begin [arg list] Args End] |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
286 | Symbol Args Begin [arg list] Args End |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
287 | (value | Arg Placeholder) Call Separator Symbol[Args Begin [arg list] Args End] |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
288 arg list = value | Arg Placeholder [List Separator arg list] |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
289 block = Block Begin [expressions] Block End |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
290 blocks = block [blocks] |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
291 expressions = expression [expressions] |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
292 expression = [symbol list Assignment] (call | value) blocks |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
293 |
db30bda91aad
Cleanup grammar comment in new parser
Mike Pavone <pavone@retrodev.com>
parents:
165
diff
changeset
|
294 */ |
2 | 295 token <- [tokens]Index[current] |
296 [token]Type Match["Block Begin"] | |
297 { | |
298 ,end stream <- [tokens]Next[current] | |
299 { | |
300 out,out index, done <- Body[node,tokens,~,[depth]+[1]] | |
301 } | |
302 }{ | |
303 [token]Type Match["Block End"] | |
304 { | |
305 [tokens]Next[current] | |
306 { | |
307 out,out index, done <- Body[node,tokens,~,[depth]-[1]] | |
308 }{ | |
309 ,end stream <- If[[depth] = [1]] | |
310 { | |
311 Print["done"] | |
312 out <- Val[node] | |
313 done <- Yes | |
314 } | |
315 } | |
316 }{ | |
317 ,end stream <- [tokens]Next[current] | |
318 { | |
319 out,out index, done <- Body[node,tokens,~,depth] | |
320 } | |
321 } | |
322 } | |
323 }{ | |
324 out <- node | |
325 out index <- current | |
326 } | |
327 Val[end stream] | |
328 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
329 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 330 } |
331 } | |
332 | |
333 Before Body[node,tokens,current:out,out index, done] | |
334 { | |
335 Print["Before body"] | |
336 token <- [tokens]Index[current] | |
337 next,end stream <- [tokens]Next[current] | |
338 { | |
339 [token]Type Match["Block Begin"] | |
340 { | |
341 out,out index, done <- Body[node,tokens,next,1] | |
342 }{ | |
343 out,out index, done <- Before Body[node,tokens,next] | |
344 } | |
345 } | |
346 Val[end stream] | |
347 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
348 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 349 } |
350 } | |
351 | |
352 Outputs[node,tokens,current:out,out index, done] | |
353 { | |
354 Print["outputs"] | |
355 token <- [tokens]Index[current] | |
356 next,end stream <- [tokens]Next[current] | |
357 { | |
358 [token]Type Match["Symbol"] | |
359 { | |
360 out,out index, done <- Outputs[[node]Add Node Output[[token]Text >>], tokens, next] | |
361 }{ | |
362 [token]Type Match["Args End"] | |
363 { | |
364 out,out index, done <- Before Body[node, tokens, next] | |
365 }{ | |
366 [token]Type Match[("List Separator","Block Comment","Line Comment","Newline")] | |
367 { | |
368 out,out index, done <- Outputs[node, tokens, next] | |
369 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
370 Print[String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 371 } |
372 } | |
373 } | |
374 } | |
375 Val[end stream] | |
376 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
377 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 378 } |
379 } | |
380 | |
381 Inputs[node,tokens,current:out,out index, done] | |
382 { | |
383 Print["Inputs"] | |
384 token <- [tokens]Index[current] | |
385 next,end stream <- [tokens]Next[current] | |
386 { | |
387 [token]Type Match["Symbol"] | |
388 { | |
389 | |
390 out,out index, done <- Inputs[[node]Add Node Input[[token]Text >>], tokens, next] | |
391 }{ | |
392 [token]Type Match["Name Separator"] | |
393 { | |
394 Print["in out sep"] | |
395 out,out index, done <- Outputs[node, tokens, next] | |
396 }{ | |
397 [token]Type Match["Args End"] | |
398 { | |
399 out,out index, done <- Before Body[node, tokens, next] | |
400 }{ | |
401 [token]Type Match[("List Separator","Block Comment","Line Comment","Newline")] | |
402 { | |
403 out,out index,done <- Inputs[node, tokens, next] | |
404 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
405 Print[String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 406 } |
407 } | |
408 } | |
409 } | |
410 } | |
411 Val[end stream] | |
412 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
413 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 414 } |
415 } | |
416 | |
417 Method[node,tokens,current:out,out index,done] | |
418 { | |
419 token <- [tokens]Index[current] | |
420 next <- [tokens]Next[current] | |
421 { | |
422 [token]Type Match["Symbol"] | |
423 { | |
424 out,out index,done <- Before Inputs[[node]Blueprint <<[[token]Text >>], tokens, next] | |
425 }{ | |
426 [token]Type Match[("List Separator","Block Comment","Line Comment","Newline")] | |
427 { | |
428 out,out index,done <- Method[node, tokens, next] | |
429 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
430 Print[String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 431 } |
432 } | |
433 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
434 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 435 } |
436 } | |
437 | |
438 //TODO: support method declarations | |
439 Before Inputs[node, tokens, current:out, out index, done] | |
440 { | |
441 Print["Before Inputs"] | |
442 token <- [tokens]Index[current] | |
443 [token]Type Match["Args Begin"] | |
444 { | |
445 [tokens]Next[current] | |
446 { | |
447 out,out index, done <- Inputs[node, tokens, ~] | |
448 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
449 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 450 } |
451 }{ | |
452 [token]Type Match["Method Separator"] | |
453 { | |
454 [tokens]Next[current] | |
455 { | |
456 out,out index,done <- Method[node, tokens, ~] | |
457 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
458 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 459 } |
460 }{ | |
461 [token]Type Match[("Line Comment","Block Comment","Newline")] | |
462 { | |
463 continue <- Yes | |
464 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
465 Print[String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 466 } |
467 Val[continue] | |
468 { | |
469 [tokens]Next[current] | |
470 { | |
471 out,out index, done <- Before Inputs[node, tokens, ~] | |
472 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
473 Print[String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 474 } |
475 } | |
476 } | |
477 } | |
478 } | |
479 | |
480 Worker Node[name, tokens, current:out,out index, done] | |
481 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
482 Print[["Worker: "]Append[String[name]]] |
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
483 out,out index, done <- Before Inputs[[[[[[Build[Worker Node()]]Name <<[name]]Inputs <<[()]]Outputs <<[()]]Blueprint <<[No]]Tree <<[()], tokens, current] |
2 | 484 } |
485 | |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
486 Skip Nodes[toskip, stop, tokens, current:out] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
487 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
488 token <- [tokens]Index[current] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
489 next <- [tokens]Next[current] |
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 [token]Type Match[stop] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
492 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
493 out <- Val[next] |
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 [token]Type Match[toskip] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
496 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
497 out <- Skip Nodes[toskip, stop, tokens, next] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
498 }{ |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
499 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
|
500 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
501 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
502 }{ |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
503 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
|
504 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
505 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
506 |
2 | 507 Blueprint PBlueprint Node |
508 { | |
509 Name | |
510 Fields | |
511 } | |
512 | |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
513 Fields[node,tokens,current:out,out index,done] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
514 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
515 token <- [tokens]Index[current] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
516 next <- [tokens]Next[current] |
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 [token]Type Match["Symbol"] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
519 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
520 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
|
521 }{ |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
522 [token]Type Match["Block End"] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
523 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
524 out <- Val[node] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
525 out index <- Val[next] |
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 [token]Type Match[("Newline","Line Comment","Block Comment")] |
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 out,out index,done <- Fields[node, tokens, next] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
530 }{ |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
531 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
|
532 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
533 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
534 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
535 }{ |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
536 [token]Type Match["Block End"] |
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 out <- Val[node] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
539 done <- Yes |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
540 }{ |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
541 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
|
542 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
543 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
544 } |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
545 |
2 | 546 PBlueprint Node[name, tokens, current:out,out index,done] |
547 { | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
548 node <- [[Build[PBlueprint Node()]]Name <<[name]]Fields <<[()] |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
549 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
|
550 out,out index,done <- Fields[node, tokens, next] |
2 | 551 } |
552 | |
4
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
553 Add BField@PBlueprint Node[node,field:out] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
554 { |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
555 out <- [node]Fields <<[[[node]Fields >>]Append[field]] |
0c5f24b4f69d
Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents:
2
diff
changeset
|
556 } |
2 | 557 |
558 Top Level[tokens, current, nodes:out] | |
559 { | |
560 token <- [tokens]Index[current] | |
561 Print[[token]Type >>] | |
562 [token]Type Match["Symbol"] | |
563 { | |
564 [[token]Text >>]After["Import "] | |
565 { | |
566 next nodes <- [nodes]Append[PImport Node[~]] | |
567 next index <- Val[current] | |
568 }{ | |
569 blueprint name,worker name <- [~]After["Blueprint "] | |
570 { | |
571 [tokens]Next[current] | |
572 { | |
573 , next index <- PBlueprint Node[blueprint name, tokens, ~] | |
574 { | |
575 next nodes <- [nodes]Append[~] | |
576 } {} { | |
577 Print["done!"] | |
578 out <- Val[next nodes] | |
579 } | |
580 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
581 Print[String[Error[["Unexpected end of stream after symbol "]Append[[token]Text >>], [token]Raw Text >>]]] |
2 | 582 } |
583 }{ | |
584 [tokens]Next[current] | |
585 { | |
586 , next index <- Worker Node[worker name, tokens, ~] | |
587 { | |
588 next nodes <- [nodes]Append[~] | |
589 } {} { | |
590 Print["done!"] | |
591 out <- Val[next nodes] | |
592 } | |
593 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
594 Print[String[Error[["Unexpected end of stream after symbol "]Append[[token]Text >>], [token]Raw Text >>]]] |
2 | 595 } |
596 } | |
597 } | |
598 | |
599 }{ | |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
600 [token]Type Match["Newline"] |
2 | 601 { |
602 next nodes <- Val[nodes] | |
603 next index <- Val[current] | |
604 }{ | |
131
0a4682be2db2
Modify lexer and new parser to work in compiler
Mike Pavone <pavone@retrodev.com>
parents:
5
diff
changeset
|
605 Print[String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]] |
2 | 606 } |
607 } | |
608 [tokens]Next[next index] | |
609 { | |
610 out <- Top Level[tokens, ~, next nodes] | |
611 }{ | |
612 out <- Val[next nodes] | |
613 } | |
614 } | |
615 | |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
616 NotComment[token:out] |
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 [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
|
619 { |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
620 out <- No |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
621 }{ |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
622 out <- Yes |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
623 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
624 } |
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
625 |
2 | 626 Parse[tokens:out] |
627 { | |
165
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
134
diff
changeset
|
628 ftokens <- Filter[tokens, NotComment[?]] |
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
134
diff
changeset
|
629 [ftokens]First |
2 | 630 { |
165
47ab97730865
Fix a couple of issues in networking lib
Mike Pavone <pavone@retrodev.com>
parents:
134
diff
changeset
|
631 out <- Top Level[ftokens, ~, ()] |
2 | 632 }{ |
633 out <- () | |
634 } | |
635 } | |
132
1f238280047f
Some work on expression parsing in new parser
Mike Pavone <pavone@retrodev.com>
parents:
131
diff
changeset
|
636 |