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