1: ================================================================================
2:
3: Smalltalk defineClass: #SynapseParseTree
4: superclass: #{Core.Object}
5: indexedType: #none
6: private: false
7: instanceVariableNames: 'programGraph programNode '
8: classInstanceVariableNames: ''
9: imports: ''
10: category: ''
11:
12: ================================================================================
13:
14: SynapseParseTree method for 'private'
15:
16: createGraphNode: aNode
17:
18: | aColor |
19: aNode isLeafNode
20: ifTrue:
21: [aColor := ColorValue
22: hue: 0 / 2
23: saturation: self defaultSaturation
24: brightness: self defaultBrightness]
25: ifFalse:
26: [aColor := ColorValue
27: hue: 1 / 2
28: saturation: self defaultSaturation
29: brightness: self defaultBrightness].
30: ^self createGraphNode: aNode withColor: aColor
31:
32: ------------------------------------------------------------
33:
34: SynapseParseTree method for 'private'
35:
36: createGraphNode: aNode withColor: aColor
37:
38: | labelString graphNode |
39: JunControlUtility
40: assert: [String new writeStream]
41: do:
42: [:aStream |
43: aNode isLeafNode
44: ifTrue:
45: [aStream
46: nextPutAll: aNode token symbol printString;
47: nextPutAll: ' ''';
48: nextPutAll: aNode token string;
49: nextPutAll: '''']
50: ifFalse: [aStream nextPutAll: aNode symbol printString].
51: labelString := aStream contents]
52: ensure: [:aStream | aStream close].
53: graphNode := self defaultNodeClass label: labelString.
54: aColor ifNotNil: [graphNode backgroundColor: aColor].
55: ^graphNode
56:
57: ------------------------------------------------------------
58:
59: SynapseParseTree method for 'defaults'
60:
61: defaultBrightness
62:
63: ^1
64:
65: ------------------------------------------------------------
66:
67: SynapseParseTree method for 'defaults'
68:
69: defaultGraphClass
70:
71: ^JunElementalGraph
72:
73: ------------------------------------------------------------
74:
75: SynapseParseTree method for 'defaults'
76:
77: defaultNodeClass
78:
79: ^JunElementalNode
80:
81: ------------------------------------------------------------
82:
83: SynapseParseTree method for 'defaults'
84:
85: defaultSaturation
86:
87: ^0.15
88:
89: ------------------------------------------------------------
90:
91: SynapseParseTree method for 'initialize-release'
92:
93: initialize
94:
95: programGraph := nil.
96: programNode := nil
97:
98: ------------------------------------------------------------
99:
100: SynapseParseTree method for 'converting'
101:
102: parseNode: rootNode
103:
104: | aBlock graphRootNode |
105: aBlock :=
106: [:aNode :graphNode |
107: aNode subNodes do:
108: [:subNode |
109: | graphSubNode |
110: graphSubNode := self createGraphNode: subNode.
111: self programGraph connect: graphNode with: graphSubNode.
112: subNode isLeafNode ifFalse: [aBlock value: subNode value: graphSubNode]]].
113: graphRootNode := self createGraphNode: rootNode.
114: aBlock value: rootNode value: graphRootNode
115:
116: ------------------------------------------------------------
117:
118: SynapseParseTree method for 'accessing'
119:
120: programGraph
121:
122: programGraph ifNil: [programGraph := JunElementalGraph new].
123: ^programGraph
124:
125: ------------------------------------------------------------
126:
127: SynapseParseTree method for 'accessing'
128:
129: programNode
130:
131: programNode ifNil: [^nil].
132: ^programNode
133:
134: ------------------------------------------------------------
135:
136: SynapseParseTree method for 'accessing'
137:
138: programNode: aNode
139:
140: programNode := aNode
141:
142: ------------------------------------------------------------
143:
144: SynapseParseTree method for 'viewing'
145:
146: show
147:
148: | aGrapher |
149: self programGraph ifNil: [^nil].
150: aGrapher := (JunGrapher graph: self programGraph)
151: arrangeGrapherForest;
152: yourself.
153: aGrapher openIn: (JunApplicationModel
154: alignedRectangleWithScreenCenter: aGrapher boundingBox extent + 4 asPoint).
155: aGrapher getWindow ifNotNil: [:aWindow | aWindow label: 'SynapseParseTree'].
156: ^aGrapher
157:
158: ================================================================================
159:
160: Smalltalk.SynapseParseTree class
161: instanceVariableNames: ''
162:
163: ================================================================================
164:
165: SynapseParseTree class method for 'examples'
166:
167: example1
168: "KSU.SynapseParseTree example1."
169:
170: | aParser aNode aTree |
171: aParser := KSU.SynapseParser example1.
172: aNode := aParser programNode.
173: aTree := KSU.SynapseParseTree parseNode: aNode.
174: aTree show.
175: ^aTree
176:
177: ------------------------------------------------------------
178:
179: SynapseParseTree class method for 'examples'
180:
181: example2
182: "KSU.SynapseParseTree example2."
183:
184: | aParser aNode aTree |
185: aParser := KSU.SynapseParser example2.
186: aNode := aParser programNode.
187: aTree := KSU.SynapseParseTree parseNode: aNode.
188: aTree show.
189: ^aTree
190:
191: ------------------------------------------------------------
192:
193: SynapseParseTree class method for 'examples'
194:
195: example3
196: "KSU.SynapseParseTree example3."
197:
198: | aParser aNode aTree |
199: aParser := KSU.SynapseParser example3.
200: aNode := aParser programNode.
201: aTree := KSU.SynapseParseTree parseNode: aNode.
202: aTree show.
203: ^aTree
204:
205: ------------------------------------------------------------
206:
207: SynapseParseTree class method for 'examples'
208:
209: example4
210: "KSU.SynapseParseTree example4."
211:
212: | aParser aNode aTree aGrapher aFilename |
213: aParser := KSU.SynapseParser example1.
214: aNode := aParser programNode.
215: aTree := KSU.SynapseParseTree parseNode: aNode.
216: aGrapher := (JunGrapher graph: aTree programGraph)
217: arrangeGrapherForest;
218: yourself.
219: aFilename := (JunSystem homeDirectory construct: 'Desktop') construct: 'example4.jpg'.
220: JunImageUtility writeImage: aGrapher graph asImage to: aFilename.
221: ^aGrapher
222:
223: ------------------------------------------------------------
224:
225: SynapseParseTree class method for 'examples'
226:
227: example5
228: "KSU.SynapseParseTree example5."
229:
230: | aParser aNode aTree aGrapher aFilename |
231: aParser := KSU.SynapseParser example2.
232: aNode := aParser programNode.
233: aTree := KSU.SynapseParseTree parseNode: aNode.
234: aGrapher := (JunGrapher graph: aTree programGraph)
235: arrangeGrapherForest;
236: yourself.
237: aFilename := (JunSystem homeDirectory construct: 'Desktop') construct: 'example4.jpg'.
238: JunImageUtility writeImage: aGrapher graph asImage to: aFilename.
239: ^aGrapher
240:
241: ------------------------------------------------------------
242:
243: SynapseParseTree class method for 'examples'
244:
245: example6
246: "KSU.SynapseParseTree example6."
247:
248: | aParser aNode aTree aGrapher aFilename |
249: aParser := KSU.SynapseParser example3.
250: aNode := aParser programNode.
251: aTree := KSU.SynapseParseTree parseNode: aNode.
252: aGrapher := (JunGrapher graph: aTree programGraph)
253: arrangeGrapherForest;
254: yourself.
255: aFilename := (JunSystem homeDirectory construct: 'Desktop') construct: 'example4.jpg'.
256: JunImageUtility writeImage: aGrapher graph asImage to: aFilename.
257: ^aGrapher
258:
259: ------------------------------------------------------------
260:
261: SynapseParseTree class method for 'instance creation'
262:
263: new
264:
265: ^(super new)
266: initialize;
267: yourself
268:
269: ------------------------------------------------------------
270:
271: SynapseParseTree class method for 'instance creation'
272:
273: parseNode: aNode
274:
275: ^(self new)
276: parseNode: aNode;
277: yourself
278:
279: ================================================================================
This document was generated by KSU.TextDoclet on 2013/02/22 at 01:01:17.