annotate parse.rhope @ 75:0083b2f7b3c7

Partially working implementation of List. Modified build scripts to allow use of other compilers. Fixed some bugs involving method implementations on different types returning different numbers of outputs. Added Fold to the 'builtins' in the comipler.
author Mike Pavone <pavone@retrodev.com>
date Tue, 06 Jul 2010 07:52:59 -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 }