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.