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.