annotate parse.rhope @ 89:5a195ee08eac

Fix memory leak and bug that was preventing First@Dictionary from working properly
author Mike Pavone <pavone@retrodev.com>
date Sat, 31 Jul 2010 00:19:15 -0400
parents a4d2d633a356
children 0a4682be2db2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
1
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
2 Blueprint Error
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
3 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
4 Message
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
5 Line
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
6 Column
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
7 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
8
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
9 Error[msg,text:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
10 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
11 out <- [[[Build["Error"]]Message <<[msg]]Line << [ [[text]Line >>]+[1] ]]Column << [ [[text]Column >>]+[1] ]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
12 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
13
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
14 To String@Error[error:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
15 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
16 out <- [[[[[error]Message >>]Append[" on line "]]Append[[error]Line >>]]Append[" at column "]]Append[[error]Column >>]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
17 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
18
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
19 Blueprint PImport Node
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
20 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
21 File
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
22 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
23
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
24 PImport Node[file:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
25 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
26 out <- [Build["PImport Node"]]File <<[file]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
27 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
28
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
29 Blueprint Worker Node
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
30 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
31 Name
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
32 Blueprint
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
33 Inputs
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
34 Outputs
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
35 Tree
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
36 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
37
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
38 Add Node Input@Worker Node[node,input:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
39 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
40 Print["Add Node Input"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
41 Print[["Input: "]Append[To String[input]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
42 out <- [node]Inputs <<[[[node]Inputs >>]Append[input]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
43 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
44
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
45 Add Node Output@Worker Node[node,output:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
46 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
47 out <- [node]Outputs <<[[[node]Outputs >>]Append[output]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
48 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
49
5
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
50 Blueprint Statement
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
51 {
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
52 Expression
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
53 Assignments
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
54 Blocks
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
55 }
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
56
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
57 Statement[expression,assignments:out]
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
58 {
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
59 out <- [[[Build["Statement"]]Expression <<[expression]]Assignments <<[assignments]]Blocks <<[()]
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
60 }
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
61
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
62 Add Block@Statement[statement,block:out]
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
63 {
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
64 out <- [statement]Blocks <<[ [[statement]Blocks >>]Append[block] ]
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
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
67 Blueprint Worker Expression
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
68 {
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
69 Worker
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
70 Blueprint
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
71 Arguments
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
72 }
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
73
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
74 Blueprint Global Expression
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 Store
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
77 Variable
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
78 }
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 Blueprint Pipe Expression
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
81 {
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
82 Name
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
83 }
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
84
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
85 Pipe Expression[name:out]
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
86 {
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
87 out <- [Build["Pipe Expression"]]Name <<[name]
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
88 }
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
89
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
90 Blueprint Block
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
91 {
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
92 Tree
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
93 }
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 Block[:out]
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
96 {
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
97 out <- [Build["Block"]]Tree <<[()]
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
98 }
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
99
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
100 Blueprint Field Expression
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
101 {
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
102 Name
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
103 Set?
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
104 }
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
105
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
106 Field Expression[name,set?:out]
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 out <- [[Build["Field Expression"]]Name <<[name]]Set? <<[set?]
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
109 }
a4d2d633a356 Groundwork for parsing expressions in new parser
Mike Pavone <pavone@retrodev.com>
parents: 4
diff changeset
110
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
111 Body[node,tokens,current,depth:out,out index, done]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
112 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
113 Print[["Body: Depth="]Append[depth]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
114 If[[depth] > [0]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
115 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
116 token <- [tokens]Index[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
117 [token]Type Match["Block Begin"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
118 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
119 ,end stream <- [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
120 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
121 out,out index, done <- Body[node,tokens,~,[depth]+[1]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
122 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
123 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
124 [token]Type Match["Block End"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
125 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
126 [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
127 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
128 out,out index, done <- Body[node,tokens,~,[depth]-[1]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
129 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
130 ,end stream <- If[[depth] = [1]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
131 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
132 Print["done"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
133 out <- Val[node]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
134 done <- Yes
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
135 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
136 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
137 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
138 ,end stream <- [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
139 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
140 out,out index, done <- Body[node,tokens,~,depth]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
141 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
142 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
143 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
144 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
145 out <- node
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
146 out index <- current
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
147 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
148 Val[end stream]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
149 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
150 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
151 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
152 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
153
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
154 Before Body[node,tokens,current:out,out index, done]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
155 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
156 Print["Before body"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
157 token <- [tokens]Index[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
158 next,end stream <- [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
159 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
160 [token]Type Match["Block Begin"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
161 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
162 out,out index, done <- Body[node,tokens,next,1]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
163 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
164 out,out index, done <- Before Body[node,tokens,next]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
165 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
166 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
167 Val[end stream]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
168 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
169 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
170 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
171 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
172
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
173 Outputs[node,tokens,current:out,out index, done]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
174 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
175 Print["outputs"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
176 token <- [tokens]Index[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
177 next,end stream <- [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
178 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
179 [token]Type Match["Symbol"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
180 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
181 out,out index, done <- Outputs[[node]Add Node Output[[token]Text >>], tokens, next]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
182 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
183 [token]Type Match["Args End"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
184 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
185 out,out index, done <- Before Body[node, tokens, next]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
186 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
187 [token]Type Match[("List Separator","Block Comment","Line Comment","Newline")]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
188 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
189 out,out index, done <- Outputs[node, tokens, next]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
190 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
191 Print[To String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
192 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
193 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
194 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
195 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
196 Val[end stream]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
197 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
198 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
199 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
200 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
201
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
202 Inputs[node,tokens,current:out,out index, done]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
203 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
204 Print["Inputs"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
205 token <- [tokens]Index[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
206 next,end stream <- [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
207 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
208 [token]Type Match["Symbol"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
209 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
210
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
211 out,out index, done <- Inputs[[node]Add Node Input[[token]Text >>], tokens, next]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
212 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
213 [token]Type Match["Name Separator"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
214 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
215 Print["in out sep"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
216 out,out index, done <- Outputs[node, tokens, next]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
217 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
218 [token]Type Match["Args End"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
219 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
220 out,out index, done <- Before Body[node, tokens, next]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
221 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
222 [token]Type Match[("List Separator","Block Comment","Line Comment","Newline")]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
223 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
224 out,out index,done <- Inputs[node, tokens, next]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
225 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
226 Print[To String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
227 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
228 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
229 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
230 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
231 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
232 Val[end stream]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
233 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
234 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
235 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
236 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
237
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
238 Method[node,tokens,current:out,out index,done]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
239 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
240 token <- [tokens]Index[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
241 next <- [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
242 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
243 [token]Type Match["Symbol"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
244 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
245 out,out index,done <- Before Inputs[[node]Blueprint <<[[token]Text >>], tokens, next]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
246 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
247 [token]Type Match[("List Separator","Block Comment","Line Comment","Newline")]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
248 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
249 out,out index,done <- Method[node, tokens, next]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
250 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
251 Print[To String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
252 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
253 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
254 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
255 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
256 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
257 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
258
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
259 //TODO: support method declarations
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
260 Before Inputs[node, tokens, current:out, out index, done]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
261 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
262 Print["Before Inputs"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
263 token <- [tokens]Index[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
264 [token]Type Match["Args Begin"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
265 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
266 [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
267 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
268 out,out index, done <- Inputs[node, tokens, ~]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
269 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
270 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
271 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
272 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
273 [token]Type Match["Method Separator"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
274 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
275 [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
276 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
277 out,out index,done <- Method[node, tokens, ~]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
278 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
279 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
280 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
281 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
282 [token]Type Match[("Line Comment","Block Comment","Newline")]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
283 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
284 continue <- Yes
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
285 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
286 Print[To String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
287 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
288 Val[continue]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
289 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
290 [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
291 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
292 out,out index, done <- Before Inputs[node, tokens, ~]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
293 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
294 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
295 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
296 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
297 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
298 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
299 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
300
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
301 Worker Node[name, tokens, current:out,out index, done]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
302 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
303 Print[["Worker: "]Append[To String[name]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
304 out,out index, done <- Before Inputs[[[[[Build["Worker Node"]]Name <<[name]]Inputs <<[()]]Outputs <<[()]]Tree <<[()], tokens, current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
305 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
306
4
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
307 Skip Nodes[toskip, stop, tokens, current:out]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
308 {
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
309 token <- [tokens]Index[current]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
310 next <- [tokens]Next[current]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
311 {
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
312 [token]Type Match[stop]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
313 {
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
314 out <- Val[next]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
315 }{
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
316 [token]Type Match[toskip]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
317 {
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
318 out <- Skip Nodes[toskip, stop, tokens, next]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
319 }{
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
320 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
321 }
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
322 }
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
323 }{
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
324 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
325 }
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
326 }
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
327
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
328 Blueprint PBlueprint Node
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
329 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
330 Name
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
331 Fields
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
332 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
333
4
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
334 Fields[node,tokens,current:out,out index,done]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
335 {
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
336 token <- [tokens]Index[current]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
337 next <- [tokens]Next[current]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
338 {
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
339 [token]Type Match["Symbol"]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
340 {
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
341 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
342 }{
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
343 [token]Type Match["Block End"]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
344 {
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
345 out <- Val[node]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
346 out index <- Val[next]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
347 }{
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
348 [token]Type Match[("Newline","Line Comment","Block Comment")]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
349 {
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
350 out,out index,done <- Fields[node, tokens, next]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
351 }{
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
352 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
353 }
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
354 }
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
355 }
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
356 }{
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
357 [token]Type Match["Block End"]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
358 {
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
359 out <- Val[node]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
360 done <- Yes
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
361 }{
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
362 Print[To String[Error[["Unexpected end of stream after token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
363 }
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
364 }
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
365 }
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
366
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
367 PBlueprint Node[name, tokens, current:out,out index,done]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
368 {
4
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
369 node <- [[Build["PBlueprint Node"]]Name <<[name]]Fields <<[()]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
370 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
371 out,out index,done <- Fields[node, tokens, next]
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
372 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
373
4
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
374 Add BField@PBlueprint Node[node,field:out]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
375 {
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
376 out <- [node]Fields <<[[[node]Fields >>]Append[field]]
0c5f24b4f69d Handle blueprints in new parser
Mike Pavone <pavone@retrodev.com>
parents: 2
diff changeset
377 }
2
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
378
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
379 Top Level[tokens, current, nodes:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
380 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
381 token <- [tokens]Index[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
382 Print[[token]Type >>]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
383 [token]Type Match["Symbol"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
384 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
385 [[token]Text >>]After["Import "]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
386 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
387 next nodes <- [nodes]Append[PImport Node[~]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
388 next index <- Val[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
389 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
390 blueprint name,worker name <- [~]After["Blueprint "]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
391 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
392 [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
393 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
394 , next index <- PBlueprint Node[blueprint name, tokens, ~]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
395 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
396 next nodes <- [nodes]Append[~]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
397 } {} {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
398 Print["done!"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
399 out <- Val[next nodes]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
400 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
401 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
402 Print[To String[Error[["Unexpected end of stream after symbol "]Append[[token]Text >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
403 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
404 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
405 [tokens]Next[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
406 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
407 , next index <- Worker Node[worker name, tokens, ~]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
408 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
409 next nodes <- [nodes]Append[~]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
410 } {} {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
411 Print["done!"]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
412 out <- Val[next nodes]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
413 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
414 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
415 Print[To String[Error[["Unexpected end of stream after symbol "]Append[[token]Text >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
416 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
417 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
418 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
419
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
420 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
421 [token]Type Match[("Newline","Block Comment","Line Comment")]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
422 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
423 next nodes <- Val[nodes]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
424 next index <- Val[current]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
425 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
426 Print[To String[Error[["Unexpected token of type "]Append[[token]Type >>], [token]Raw Text >>]]]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
427 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
428 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
429 [tokens]Next[next index]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
430 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
431 out <- Top Level[tokens, ~, next nodes]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
432 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
433 out <- Val[next nodes]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
434 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
435 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
436
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
437 Parse[tokens:out]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
438 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
439 [tokens]First
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
440 {
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
441 out <- Top Level[tokens, ~, ()]
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
442 }{
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
443 out <- ()
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
444 }
73e978d590c7 Adding WIP compiler code
Mike Pavone <pavone@retrodev.com>
parents:
diff changeset
445 }