1: ================================================================================ 2: 3: Smalltalk defineClass: #SynapseInterpreter 4: superclass: #{Core.Object} 5: indexedType: #none 6: private: false 7: instanceVariableNames: 'variableDictionary evaluatedScripts currentScript currentProgramNode ' 8: classInstanceVariableNames: '' 9: imports: '' 10: category: '' 11: 12: ================================================================================ 13: 14: SynapseInterpreter method for 'private' 15: 16: connectionsOf: synapseNode 17: 18: | connections headVariableNode mappingCollection fromVariableName fromMemberName toVariableName toMemberName | 19: connections := OrderedCollection new. 20: headVariableNode := self headVariableNodeOf: synapseNode. 21: mappingCollection := OrderedCollection new. 22: synapseNode allNodesDo: 23: [:aNode | 24: (aNode isInnerNode and: [aNode symbol = #Mapping]) 25: ifTrue: [mappingCollection add: aNode]]. 26: headVariableNode subNodes size = 1 27: ifTrue: 28: [fromVariableName := headVariableNode subNode subNode token tokenString. 29: fromMemberName := nil] 30: ifFalse: 31: [fromVariableName := headVariableNode subNodes first subNode token tokenString. 32: fromMemberName := headVariableNode subNodes last subNode token tokenString]. 33: mappingCollection do: 34: [:mappingNode | 35: | variableNode | 36: mappingNode subNodes size = 4 37: ifTrue: 38: [| memberNameNode | 39: memberNameNode := mappingNode subNodes at: 2. 40: fromMemberName := memberNameNode subNode token tokenString]. 41: variableNode := mappingNode subNodes last. 42: variableNode subNodes size = 1 43: ifTrue: 44: [toVariableName := variableNode subNode subNode token tokenString. 45: toMemberName := nil] 46: ifFalse: 47: [toVariableName := variableNode subNodes first subNode token tokenString. 48: toMemberName := variableNode subNodes last subNode token tokenString]. 49: connections add: fromVariableName -> fromMemberName -> (toVariableName -> toMemberName). 50: fromVariableName := toVariableName. 51: fromMemberName := nil]. 52: ^connections 53: 54: ------------------------------------------------------------ 55: 56: SynapseInterpreter method for 'private' 57: 58: createNeuronFrom: assignmentNode 59: 60: | constructorNode aNeuron | 61: constructorNode := assignmentNode subNodes last. 62: aNeuron := self defaultNeuronClass fromConstructorNode: constructorNode. 63: ^aNeuron 64: 65: ------------------------------------------------------------ 66: 67: SynapseInterpreter method for 'accessing' 68: 69: currentProgramNode 70: 71: ^currentProgramNode 72: 73: ------------------------------------------------------------ 74: 75: SynapseInterpreter method for 'accessing' 76: 77: currentProgramNode: programNode 78: 79: currentProgramNode := programNode 80: 81: ------------------------------------------------------------ 82: 83: SynapseInterpreter method for 'accessing' 84: 85: currentScript 86: 87: ^currentScript 88: 89: ------------------------------------------------------------ 90: 91: SynapseInterpreter method for 'accessing' 92: 93: currentScript: scriptString 94: 95: currentScript := scriptString. 96: scriptString 97: ifNil: [self currentProgramNode: nil] 98: ifNotNil: 99: [| aScanner aParser programNode | 100: aScanner := self defaultScannerClass scan: scriptString. 101: aParser := self defaultParserClass parse: aScanner tokenCollection. 102: programNode := aParser programNode. 103: programNode symbol = aParser defaultCorrectProgramNodeSymbol 104: ifTrue: [self currentProgramNode: aParser programNode] 105: ifFalse: 106: [self error: 'Parse error. Invalid program node. (' , programNode symbol printString , ')']] 107: 108: ------------------------------------------------------------ 109: 110: SynapseInterpreter method for 'defaults' 111: 112: defaultAssignmentNodeSymbol 113: 114: ^#Assignment 115: 116: ------------------------------------------------------------ 117: 118: SynapseInterpreter method for 'defaults' 119: 120: defaultNeuronClass 121: 122: ^KSU.SynapseNeuron 123: 124: ------------------------------------------------------------ 125: 126: SynapseInterpreter method for 'defaults' 127: 128: defaultParserClass 129: 130: ^KSU.SynapseParser 131: 132: ------------------------------------------------------------ 133: 134: SynapseInterpreter method for 'defaults' 135: 136: defaultScannerClass 137: 138: ^KSU.SynapseScanner 139: 140: ------------------------------------------------------------ 141: 142: SynapseInterpreter method for 'defaults' 143: 144: defaultSynapseNodeSymbol 145: 146: ^#Synapse 147: 148: ------------------------------------------------------------ 149: 150: SynapseInterpreter method for 'evaluating' 151: 152: evaluate: scriptString 153: 154: self currentScript: scriptString. 155: self evaluateAssignments. 156: self evaluateSynapses. 157: self currentScript: nil 158: 159: ------------------------------------------------------------ 160: 161: SynapseInterpreter method for 'evaluating' 162: 163: evaluateAssignments 164: 165: | assignmentNodes | 166: assignmentNodes := OrderedCollection new. 167: self currentProgramNode allNodesDo: 168: [:aNode | 169: (aNode isInnerNode and: [aNode symbol = self defaultAssignmentNodeSymbol]) 170: ifTrue: [assignmentNodes add: aNode]]. 171: assignmentNodes do: 172: [:assignmentNode | 173: | variableName aNeuron | 174: variableName := self variableNameOf: assignmentNode. 175: aNeuron := self createNeuronFrom: assignmentNode. 176: self variableDictionary add: variableName -> aNeuron] 177: 178: ------------------------------------------------------------ 179: 180: SynapseInterpreter method for 'accessing' 181: 182: evaluatedScripts 183: 184: evaluatedScripts ifNil: [evaluatedScripts := OrderedCollection new]. 185: ^evaluatedScripts 186: 187: ------------------------------------------------------------ 188: 189: SynapseInterpreter method for 'evaluating' 190: 191: evaluateSynapses 192: 193: | synapseNodes | 194: synapseNodes := OrderedCollection new. 195: self currentProgramNode allNodesDo: 196: [:aNode | 197: (aNode isInnerNode and: [aNode symbol = self defaultSynapseNodeSymbol]) 198: ifTrue: [synapseNodes add: aNode]]. 199: synapseNodes do: 200: [:synapseNode | 201: | connections | 202: connections := self connectionsOf: synapseNode. 203: connections do: 204: [:associations | 205: | fromVariableName fromNeuron fromPort toVariableName toNeuron toPort | 206: fromVariableName := associations key key. 207: fromNeuron := self variableDictionary at: fromVariableName 208: ifAbsent: [self error: 'Undefined variable ''' , fromVariableName , '''.']. 209: fromPort := associations key value 210: ifNil: [self defaultNeuronClass defaultOutputPort] 211: ifNotNil: [:aString | aString asSymbol]. 212: toVariableName := associations value key. 213: toNeuron := self variableDictionary at: toVariableName 214: ifAbsent: [self error: 'Undefined variable ''' , toVariableName , '''.']. 215: toPort := associations value value 216: ifNil: [self defaultNeuronClass defaultInputPort] 217: ifNotNil: [:aString | aString asSymbol]. 218: fromNeuron connect: fromPort toNeuron: toNeuron port: toPort]] 219: 220: ------------------------------------------------------------ 221: 222: SynapseInterpreter method for 'execution' 223: 224: execute 225: 226: self variableDictionary 227: do: [:aNeuron | aNeuron isHeadNeuron ifTrue: [aNeuron action]] 228: 229: ------------------------------------------------------------ 230: 231: SynapseInterpreter method for 'private' 232: 233: headVariableNodeOf: synapseNode 234: 235: ^synapseNode subNodes first 236: 237: ------------------------------------------------------------ 238: 239: SynapseInterpreter method for 'initialize-release' 240: 241: initialize 242: 243: variableDictionary := nil. 244: evaluatedScripts := nil. 245: currentScript := nil. 246: currentProgramNode := nil 247: 248: ------------------------------------------------------------ 249: 250: SynapseInterpreter method for 'accessing' 251: 252: variableDictionary 253: 254: variableDictionary ifNil: [variableDictionary := Dictionary new]. 255: ^variableDictionary 256: 257: ------------------------------------------------------------ 258: 259: SynapseInterpreter method for 'private' 260: 261: variableNameOf: assignmentNode 262: 263: | variableNameNode idNode | 264: variableNameNode := assignmentNode subNodes first. 265: idNode := variableNameNode subNode. 266: ^idNode token tokenString 267: 268: ================================================================================ 269: 270: Smalltalk.SynapseInterpreter class 271: instanceVariableNames: '' 272: 273: ================================================================================ 274: 275: SynapseInterpreter class method for 'examples' 276: 277: example01 278: "KSU.SynapseInterpreter example01." 279: 280: | scriptString | 281: scriptString := KSU.SynapseInterpreter exampleHoge. 282: ^KSU.SynapseInterpreter script: scriptString 283: 284: ------------------------------------------------------------ 285: 286: SynapseInterpreter class method for 'examples' 287: 288: example02 289: "KSU.SynapseInterpreter example02." 290: 291: | scriptString | 292: scriptString := KSU.SynapseInterpreter exampleSimpleHoge. 293: ^KSU.SynapseInterpreter script: scriptString 294: 295: ------------------------------------------------------------ 296: 297: SynapseInterpreter class method for 'examples' 298: 299: example03 300: "KSU.SynapseInterpreter example03." 301: 302: | scriptString | 303: scriptString := KSU.SynapseInterpreter exampleMetrics1. 304: ^KSU.SynapseInterpreter script: scriptString 305: 306: ------------------------------------------------------------ 307: 308: SynapseInterpreter class method for 'examples' 309: 310: example04 311: "KSU.SynapseInterpreter example04." 312: 313: | scriptString | 314: scriptString := KSU.SynapseInterpreter exampleMetrics2. 315: ^KSU.SynapseInterpreter script: scriptString 316: 317: ------------------------------------------------------------ 318: 319: SynapseInterpreter class method for 'examples' 320: 321: example05 322: "KSU.SynapseInterpreter example05." 323: 324: | scriptString | 325: scriptString := KSU.SynapseInterpreter exampleReadFromFile. 326: ^KSU.SynapseInterpreter script: scriptString 327: 328: ------------------------------------------------------------ 329: 330: SynapseInterpreter class method for 'examples' 331: 332: example06 333: "KSU.SynapseInterpreter example06." 334: 335: | scriptString | 336: scriptString := KSU.SynapseInterpreter exampleWriteToFile. 337: ^KSU.SynapseInterpreter script: scriptString 338: 339: ------------------------------------------------------------ 340: 341: SynapseInterpreter class method for 'examples' 342: 343: example07 344: "KSU.SynapseInterpreter example07." 345: 346: | scriptString | 347: scriptString := KSU.SynapseInterpreter exampleAppendToFile. 348: ^KSU.SynapseInterpreter script: scriptString 349: 350: ------------------------------------------------------------ 351: 352: SynapseInterpreter class method for 'examples' 353: 354: example08 355: "KSU.SynapseInterpreter example08." 356: 357: | scriptString | 358: scriptString := KSU.SynapseInterpreter exampleInvalidFileOperation. 359: ^KSU.SynapseInterpreter script: scriptString 360: 361: ------------------------------------------------------------ 362: 363: SynapseInterpreter class method for 'examples' 364: 365: example09 366: "KSU.SynapseInterpreter example09." 367: 368: | scriptString | 369: scriptString := KSU.SynapseInterpreter exampleForGettingInputOutputSymbols. 370: ^KSU.SynapseInterpreter script: scriptString 371: 372: ------------------------------------------------------------ 373: 374: SynapseInterpreter class method for 'examples' 375: 376: example0A 377: "KSU.SynapseInterpreter example0A." 378: 379: | scriptString | 380: scriptString := KSU.SynapseInterpreter exampleEcho. 381: ^KSU.SynapseInterpreter script: scriptString 382: 383: ------------------------------------------------------------ 384: 385: SynapseInterpreter class method for 'examples' 386: 387: example0B 388: "KSU.SynapseInterpreter example0B." 389: 390: | anInterpreter | 391: anInterpreter := KSU.SynapseInterpreter new. 392: anInterpreter 393: evaluate: 'value = Value("This is sample SynapseScript on exampleB.");'; 394: evaluate: 'metrics = Metrics("/Users/Miyazaki/Desktop/Echo");'; 395: evaluate: 'transcript = Transcript();'; 396: yourself. 397: Dialog warn: 'here! [1]'. 398: anInterpreter execute. 399: Dialog warn: 'here! [2]'. 400: anInterpreter evaluate: 'value to: metrics to: transcript;'. 401: Dialog warn: 'here! [3]'. 402: anInterpreter execute. 403: Dialog warn: 'here! [4]'. 404: anInterpreter execute 405: 406: ------------------------------------------------------------ 407: 408: SynapseInterpreter class method for 'examples' 409: 410: example0C 411: "KSU.SynapseInterpreter example0C." 412: 413: | anInterpreter | 414: anInterpreter := KSU.SynapseInterpreter new. 415: anInterpreter 416: evaluate: '/* Assignments */'; 417: evaluate: 'value = Value("This is sample SynapseScript on exampleB.");'; 418: evaluate: 'metrics = Metrics("/Users/Miyazaki/Desktop/Echo");'; 419: evaluate: 'transcript = Transcript();'; 420: evaluate: '/* Synapses */'; 421: evaluate: 'value send: output to: metrics.input send: output to: transcript.input;'; 422: yourself. 423: anInterpreter execute 424: 425: ------------------------------------------------------------ 426: 427: SynapseInterpreter class method for 'examples' 428: 429: example0D 430: "KSU.SynapseInterpreter example0D." 431: 432: | anInterpreter | 433: anInterpreter := KSU.SynapseInterpreter new. 434: anInterpreter 435: evaluate: '/* Assignments */'; 436: evaluate: 'value = Value("This is sample SynapseScript on exampleB.");'; 437: evaluate: 'metrics = Metrics("/Users/Miyazaki/Desktop/Echo");'; 438: evaluate: 'transcript = Transcript();'; 439: evaluate: '/* Synapses */'; 440: evaluate: 'value to: metrics to: metrics to: transcript;'; 441: yourself. 442: anInterpreter execute 443: 444: ------------------------------------------------------------ 445: 446: SynapseInterpreter class method for 'examples' 447: 448: example0E 449: "KSU.SynapseInterpreter example0E." 450: 451: | anInterpreter | 452: anInterpreter := KSU.SynapseInterpreter new. 453: anInterpreter 454: evaluate: '/* Assignments */'; 455: evaluate: 'value = Value("This is sample SynapseScript on exampleB.");'; 456: evaluate: 'metrics1 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 457: evaluate: 'metrics2 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 458: evaluate: 'metrics3 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 459: evaluate: 'metrics4 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 460: evaluate: 'metrics5 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 461: evaluate: 'metrics6 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 462: evaluate: 'metrics7 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 463: evaluate: 'metrics8 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 464: evaluate: 'metrics9 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 465: evaluate: 'metrics10 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 466: evaluate: 'metrics11 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 467: evaluate: 'metrics12 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 468: evaluate: 'metrics13 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 469: evaluate: 'metrics14 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 470: evaluate: 'metrics15 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 471: evaluate: 'metrics16 = Metrics("/Users/Miyazaki/Desktop/Echo");'; 472: evaluate: 'transcript = Transcript();'; 473: evaluate: '/* Synapses */'; 474: evaluate: 'value to: metrics1;'; 475: evaluate: 'metrics1 to: metrics2;'; 476: evaluate: 'metrics2 to: metrics3;'; 477: evaluate: 'metrics3 to: metrics4;'; 478: evaluate: 'metrics4 to: metrics5;'; 479: evaluate: 'metrics5 to: metrics6;'; 480: evaluate: 'metrics6 to: metrics7;'; 481: evaluate: 'metrics7 to: metrics8;'; 482: evaluate: 'metrics8 to: metrics9;'; 483: evaluate: 'metrics9 to: metrics10;'; 484: evaluate: 'metrics10 to: metrics11;'; 485: evaluate: 'metrics11 to: metrics12;'; 486: evaluate: 'metrics12 to: metrics13;'; 487: evaluate: 'metrics13 to: metrics14;'; 488: evaluate: 'metrics14 to: metrics15;'; 489: evaluate: 'metrics15 to: metrics16;'; 490: evaluate: 'metrics16 to: transcript;'; 491: yourself. 492: anInterpreter execute 493: 494: ------------------------------------------------------------ 495: 496: SynapseInterpreter class method for 'examples' 497: 498: example0F 499: "KSU.SynapseInterpreter example0F." 500: 501: | anInterpreter | 502: anInterpreter := KSU.SynapseInterpreter new. 503: anInterpreter 504: evaluate: '/* Assignments */'; 505: evaluate: 'value = Value("良い天気です。午後は出かけます。");'; 506: evaluate: 'kansai = Metrics("/Users/Miyazaki/Desktop/Kansai");'; 507: evaluate: 'transcript = Transcript();'; 508: evaluate: 'file = File("/Users/Miyazaki/Desktop/Kansai.txt", "write");'; 509: evaluate: '/* Synapses */'; 510: evaluate: 'value to: kansai to: transcript;'; 511: evaluate: 'kansai to: file;'; 512: yourself. 513: anInterpreter execute 514: 515: ------------------------------------------------------------ 516: 517: SynapseInterpreter class method for 'examples' 518: 519: example10 520: "KSU.SynapseInterpreter example10." 521: 522: | anInterpreter | 523: anInterpreter := KSU.SynapseInterpreter new. 524: anInterpreter 525: evaluate: '/* Assignments */'; 526: evaluate: 'inputFile = File("/Users/Miyazaki/Desktop/Kamigamo.txt", "read");'; 527: evaluate: 'kansai = Metrics("/Users/Miyazaki/Desktop/Kansai");'; 528: evaluate: 'outputFile = File("/Users/Miyazaki/Desktop/Kansai.txt", "write");'; 529: evaluate: 'transcript = Transcript();'; 530: evaluate: '/* Synapses */'; 531: evaluate: 'inputFile to: kansai to: outputFile;'; 532: evaluate: 'kansai to: transcript;'; 533: yourself. 534: anInterpreter execute 535: 536: ------------------------------------------------------------ 537: 538: SynapseInterpreter class method for 'examples' 539: 540: example11 541: "KSU.SynapseInterpreter example11." 542: 543: | anInterpreter | 544: anInterpreter := KSU.SynapseInterpreter new. 545: anInterpreter 546: evaluate: '/* Assignments */'; 547: evaluate: 'value1 = Value("1番目の文字列");'; 548: evaluate: 'value2 = Value("2番目の文字列");'; 549: evaluate: 'swap = Metrics("/Users/Miyazaki/Desktop/Swap");'; 550: evaluate: 'transcript = Transcript();'; 551: evaluate: 'file1 = File("/Users/Miyazaki/Desktop/output1.txt", "write");'; 552: evaluate: 'file2 = File("/Users/Miyazaki/Desktop/output2.txt", "write");'; 553: evaluate: '/* Synapses */'; 554: evaluate: 'value1 to: swap.input1 send: output1 to: transcript;'; 555: evaluate: 'value2 to: swap.input2 send: output2 to: transcript;'; 556: evaluate: 'swap.output1 to: file1;'; 557: evaluate: 'swap send: output2 to: file2;'; 558: yourself. 559: anInterpreter execute 560: 561: ------------------------------------------------------------ 562: 563: SynapseInterpreter class method for 'examples' 564: 565: example12 566: "KSU.SynapseInterpreter example12." 567: 568: | scriptString | 569: scriptString := KSU.SynapseInterpreter exampleEcho2. 570: ^KSU.SynapseInterpreter script: scriptString 571: 572: ------------------------------------------------------------ 573: 574: SynapseInterpreter class method for 'examples' 575: 576: example13 577: "KSU.SynapseInterpreter example13." 578: 579: | scriptString | 580: scriptString := KSU.SynapseInterpreter exampleMetrics3. 581: ^KSU.SynapseInterpreter script: scriptString 582: 583: ------------------------------------------------------------ 584: 585: SynapseInterpreter class method for 'examples' 586: 587: example14 588: "KSU.SynapseInterpreter example14." 589: 590: | scriptString | 591: scriptString := KSU.SynapseInterpreter exampleMetrics4. 592: ^KSU.SynapseInterpreter script: scriptString 593: 594: ------------------------------------------------------------ 595: 596: SynapseInterpreter class method for 'examples' 597: 598: example15 599: "KSU.SynapseInterpreter example15." 600: 601: | scriptString | 602: scriptString := KSU.SynapseInterpreter exampleEcho3. 603: ^KSU.SynapseInterpreter script: scriptString 604: 605: ------------------------------------------------------------ 606: 607: SynapseInterpreter class method for 'examples' 608: 609: example16 610: "KSU.SynapseInterpreter example16." 611: 612: | scriptString anInterpreter | 613: scriptString := KSU.SynapseInterpreter exampleCodeSpaghetti. 614: anInterpreter := KSU.SynapseInterpreter script: scriptString. 615: KSU.ShellInterpreter shellScript: 'open /Users/Miyazaki/Desktop/Spaghetti.html'. 616: ^anInterpreter 617: 618: ------------------------------------------------------------ 619: 620: SynapseInterpreter class method for 'examples' 621: 622: example17 623: "KSU.SynapseInterpreter example17." 624: 625: | scriptString | 626: scriptString := KSU.SynapseInterpreter exampleMetricsTable. 627: KSU.SynapseInterpreter script: scriptString. 628: KSU.ShellInterpreter shellScript: 'open /Users/Miyazaki/Desktop/MetricsTable.html' 629: 630: ------------------------------------------------------------ 631: 632: SynapseInterpreter class method for 'examples - testing' 633: 634: example1ForTesting 635: "KSU.SynapseInterpreter example1ForTesting." 636: 637: | scriptString | 638: scriptString := KSU.SynapseInterpreter exampleCodeSpaghettiForTesting. 639: KSU.SynapseInterpreter script: scriptString. 640: KSU.ShellInterpreter shellScript: 'open ~/Desktop/CodeSpaghetti.html' 641: 642: ------------------------------------------------------------ 643: 644: SynapseInterpreter class method for 'examples - testing' 645: 646: example2ForTesting 647: "KSU.SynapseInterpreter example2ForTesting." 648: 649: | scriptString | 650: scriptString := ' 651: /* Assignments */ 652: unit = Value("minutes"); 653: value = Value("10.5"); 654: number2Time = Metrics("./path/to/Plugins/Number2Time"); 655: transcript = Transcript(); 656: 657: /* Synapses */ 658: unit 659: to: number2Time.unit; 660: value 661: to: number2Time.value; 662: number2Time 663: to: transcript; 664: '. 665: KSU.SynapseInterpreter script: scriptString 666: 667: ------------------------------------------------------------ 668: 669: SynapseInterpreter class method for 'examples - script' 670: 671: exampleAppendToFile 672: "KSU.SynapseInterpreter exampleAppendToFile." 673: 674: | scriptString | 675: scriptString := ' 676: /* Assignments */ 677: hogeString = Value("This is sample hoge string!! 678: append hogehoge."); 679: file = File("/Users/Miyazaki/Desktop/hogeWrite.txt", "append"); 680: transcript = Transcript(); 681: 682: /* Synapses */ 683: hogeString 684: to: file; 685: hogeString 686: to: transcript; 687: '. 688: ^scriptString 689: 690: ------------------------------------------------------------ 691: 692: SynapseInterpreter class method for 'examples - script' 693: 694: exampleCodeSpaghetti 695: "KSU.SynapseInterpreter exampleCodeSpaghetti." 696: 697: | scriptString | 698: scriptString := ' 699: /*** Assignments ***/ 700: sourceFile = File("/Users/Miyazaki/Desktop/source.c", "read"); 701: htmlFile = File("/Users/Miyazaki/Desktop/Spaghetti.html", "write"); 702: imageFilename = Value("/Users/Miyazaki/Desktop/Spaghetti.jpg"); 703: fileCopy = Metrics("/Users/Miyazaki/Desktop/FileCopy"); 704: easyMetrics = Metrics("/Users/Miyazaki/Desktop/C_EasyMetrics"); 705: division = Metrics("/Users/Miyazaki/Desktop/Division2"); 706: linesPerFunction2WaitTime 707: = Metrics("/Users/Miyazaki/Desktop/LinesPerFunction2WaitTime"); 708: idLength2SpaghettiName 709: = Metrics("/Users/Miyazaki/Desktop/IdLength2SpaghettiName"); 710: indentDifference2VariabilityOfBoilingTime 711: = Metrics("/Users/Miyazaki/Desktop/IndentDifference2VariabilityOfBoilingTime"); 712: commentRatio2OliveOil 713: = Metrics("/Users/Miyazaki/Desktop/CommentRatio2OliveOil"); 714: codeSpaghetti 715: = Metrics("/Users/Miyazaki/Desktop/CodeSpaghetti"); 716: timeUnit = Value("minutes"); 717: number2Time_1 = Metrics("/Users/Miyazaki/Desktop/Number2Time"); 718: number2Time_2 = Metrics("/Users/Miyazaki/Desktop/Number2Time"); 719: 720: /*** Synapses ***/ 721: sourceFile 722: to: easyMetrics; 723: easyMetrics 724: send: effectiveLOC to: division.dividend 725: send: quotient to: linesPerFunction2WaitTime 726: to: number2Time_1.value 727: to: codeSpaghetti.waitTime; 728: easyMetrics 729: send: numberOfFunctions to: division.divisor; 730: easyMetrics 731: send: averageLengthOfId to: idLength2SpaghettiName 732: send: spaghettiName to: codeSpaghetti.spaghettiName; 733: easyMetrics 734: send: indentDifference to: indentDifference2VariabilityOfBoilingTime 735: to: number2Time_2.value 736: to: codeSpaghetti.variability; 737: easyMetrics 738: send: commentRatio to: commentRatio2OliveOil 739: to: codeSpaghetti.oliveOil; 740: idLength2SpaghettiName 741: send: spaghettiImage to: fileCopy.source; 742: imageFilename 743: to: fileCopy.destination; 744: imageFilename 745: to: codeSpaghetti.imageFile; 746: timeUnit 747: to: number2Time_1.unit; 748: timeUnit 749: to: number2Time_2.unit; 750: codeSpaghetti 751: to: htmlFile; 752: '. 753: ^scriptString 754: 755: ------------------------------------------------------------ 756: 757: SynapseInterpreter class method for 'examples - startup' 758: 759: exampleCodeSpaghettiForStartup 760: "KSU.SynapseInterpreter exampleCodeSpaghettiForStartup." 761: 762: | aFilename scriptString | 763: aFilename := Filename defaultDirectory construct: './path/to/Results/CodeSpaghetti.jpg'. 764: scriptString := ' 765: /*** Assignments ***/ 766: sourceFile = File("./path/to/Programs/source.c", "read"); 767: htmlFile = File("./path/to/Results/CodeSpaghetti.html", "write"); 768: imageFilename = Value("' 769: , aFilename asString 770: , '"); 771: fileCopy = Metrics("./path/to/Plugins/FileCopy"); 772: easyMetrics = Metrics("./path/to/Plugins/C_EasyMetrics"); 773: division = Metrics("./path/to/Plugins/Division2"); 774: lpf2WaitTime = Metrics("./path/to/Plugins/LinesPerFunction2WaitTime"); 775: id2Spaghetti = Metrics("./path/to/Plugins/IdLength2SpaghettiName"); 776: indent2Variability = Metrics("./path/to/Plugins/IndentDifference2VariabilityOfBoilingTime"); 777: comment2OliveOil = Metrics("./path/to/Plugins/CommentRatio2OliveOil"); 778: codeSpaghetti = Metrics("./path/to/Plugins/CodeSpaghetti"); 779: timeUnit = Value("minutes"); 780: number2Time_1 = Metrics("./path/to/Plugins/Number2Time"); 781: number2Time_2 = Metrics("./path/to/Plugins/Number2Time"); 782: 783: /*** Synapses ***/ 784: sourceFile 785: to: easyMetrics; 786: easyMetrics 787: send: effectiveLOC to: division.dividend 788: send: quotient to: lpf2WaitTime 789: to: number2Time_1.value 790: to: codeSpaghetti.waitTime; 791: easyMetrics 792: send: numberOfFunctions to: division.divisor; 793: easyMetrics 794: send: averageLengthOfId to: id2Spaghetti 795: send: spaghettiName to: codeSpaghetti.spaghettiName; 796: easyMetrics 797: send: indentDifference to: indent2Variability 798: to: number2Time_2.value 799: to: codeSpaghetti.variability; 800: easyMetrics 801: send: commentRatio to: comment2OliveOil 802: to: codeSpaghetti.oliveOil; 803: id2Spaghetti 804: send: spaghettiImage to: fileCopy.source; 805: imageFilename 806: to: fileCopy.destination; 807: imageFilename 808: to: codeSpaghetti.imageFile; 809: timeUnit 810: to: number2Time_1.unit; 811: timeUnit 812: to: number2Time_2.unit; 813: codeSpaghetti 814: to: htmlFile; 815: '. 816: KSU.SynapseInterpreter script: scriptString. 817: KSU.ShellInterpreter shellScript: 'open ./path/to/Results/CodeSpaghetti.html'. 818: ^scriptString 819: 820: ------------------------------------------------------------ 821: 822: SynapseInterpreter class method for 'examples - testing' 823: 824: exampleCodeSpaghettiForTesting 825: "KSU.SynapseInterpreter exampleCodeSpaghettiForTesting." 826: 827: | scriptString | 828: scriptString := ' 829: /*** Assignments ***/ 830: sourceFile = File("./path/to/Programs/source.c", "read"); 831: htmlFile = File("/Users/Miyazaki/Desktop/CodeSpaghetti.html", "write"); 832: imageFilename = Value("/Users/Miyazaki/Desktop/CodeSpaghetti.jpg"); 833: fileCopy = Metrics("./path/to/Plugins/FileCopy"); 834: easyMetrics = Metrics("./path/to/Plugins/C_EasyMetrics"); 835: division = Metrics("./path/to/Plugins/Division2"); 836: lpf2WaitTime = Metrics("./path/to/Plugins/LinesPerFunction2WaitTime"); 837: id2Spaghetti = Metrics("./path/to/Plugins/IdLength2SpaghettiName"); 838: indent2Variability = Metrics("./path/to/Plugins/IndentDifference2VariabilityOfBoilingTime"); 839: comment2OliveOil = Metrics("./path/to/Plugins/CommentRatio2OliveOil"); 840: codeSpaghetti = Metrics("./path/to/Plugins/CodeSpaghetti"); 841: timeUnit = Value("minutes"); 842: number2Time_1 = Metrics("./path/to/Plugins/Number2Time"); 843: number2Time_2 = Metrics("./path/to/Plugins/Number2Time"); 844: 845: /*** Synapses ***/ 846: sourceFile 847: to: easyMetrics; 848: easyMetrics 849: send: effectiveLOC to: division.dividend 850: send: quotient to: lpf2WaitTime 851: to: number2Time_1.value 852: to: codeSpaghetti.waitTime; 853: easyMetrics 854: send: numberOfFunctions to: division.divisor; 855: easyMetrics 856: send: averageLengthOfId to: id2Spaghetti 857: send: spaghettiName to: codeSpaghetti.spaghettiName; 858: easyMetrics 859: send: indentDifference to: indent2Variability 860: to: number2Time_2.value 861: to: codeSpaghetti.variability; 862: easyMetrics 863: send: commentRatio to: comment2OliveOil 864: to: codeSpaghetti.oliveOil; 865: id2Spaghetti 866: send: spaghettiImage to: fileCopy.source; 867: imageFilename 868: to: fileCopy.destination; 869: imageFilename 870: to: codeSpaghetti.imageFile; 871: timeUnit 872: to: number2Time_1.unit; 873: timeUnit 874: to: number2Time_2.unit; 875: codeSpaghetti 876: to: htmlFile; 877: '. 878: ^scriptString 879: 880: ------------------------------------------------------------ 881: 882: SynapseInterpreter class method for 'examples - testing' 883: 884: exampleCodeSpaghettiForTesting2 885: "KSU.SynapseInterpreter exampleCodeSpaghettiForTesting2." 886: 887: | scriptString | 888: scriptString := ' 889: /*** Assignments ***/ 890: sourceFile = File("/Users/Miyazaki/Desktop/source.c", "read"); 891: htmlFile = File("/Users/Miyazaki/Desktop/CodeSpaghetti.html", "write"); 892: imageFilename = Value("/Users/Miyazaki/Desktop/CodeSpaghetti.jpg"); 893: fileCopy = Metrics("./path/to/Plugins/FileCopy"); 894: easyMetrics = Metrics("./path/to/Plugins/C_EasyMetrics"); 895: division = Metrics("./path/to/Plugins/Division2"); 896: lpf2WaitTime = Metrics("./path/to/Plugins/LinesPerFunction2WaitTime"); 897: id2Spaghetti = Metrics("./path/to/Plugins/IdLength2SpaghettiName"); 898: indent2Variability = Metrics("./path/to/Plugins/IndentDifference2VariabilityOfBoilingTime"); 899: comment2OliveOil = Metrics("./path/to/Plugins/CommentRatio2OliveOil"); 900: codeSpaghetti = Metrics("./path/to/Plugins/CodeSpaghetti"); 901: timeUnit = Value("minutes"); 902: number2Time_1 = Metrics("./path/to/Plugins/Number2Time"); 903: number2Time_2 = Metrics("./path/to/Plugins/Number2Time"); 904: 905: /*** Synapses ***/ 906: sourceFile 907: to: easyMetrics; 908: easyMetrics 909: send: effectiveLOC to: division.dividend 910: send: quotient to: lpf2WaitTime 911: to: number2Time_1.value 912: to: codeSpaghetti.waitTime; 913: easyMetrics 914: send: numberOfFunctions to: division.divisor; 915: easyMetrics 916: send: averageLengthOfId to: id2Spaghetti 917: send: spaghettiName to: codeSpaghetti.spaghettiName; 918: easyMetrics 919: send: indentDifference to: indent2Variability 920: to: number2Time_2.value 921: to: codeSpaghetti.variability; 922: easyMetrics 923: send: commentRatio to: comment2OliveOil 924: to: codeSpaghetti.oliveOil; 925: id2Spaghetti 926: send: spaghettiImage to: fileCopy.source; 927: imageFilename 928: to: fileCopy.destination; 929: imageFilename 930: to: codeSpaghetti.imageFile; 931: timeUnit 932: to: number2Time_1.unit; 933: timeUnit 934: to: number2Time_2.unit; 935: codeSpaghetti 936: to: htmlFile; 937: '. 938: KSU.SynapseInterpreter script: scriptString. 939: KSU.ShellInterpreter shellScript: 'open ~/Desktop/CodeSpaghetti.html'. 940: ^scriptString 941: 942: ------------------------------------------------------------ 943: 944: SynapseInterpreter class method for 'examples - script' 945: 946: exampleEcho 947: "KSU.SynapseInterpreter exampleEcho." 948: 949: | aStream scriptString | 950: aStream := (String new writeStream) 951: nextPutAll: '/* Assignments */'; 952: nextPutAll: 'value = Value("You executed ''exampleEcho'' on '; 953: nextPutAll: Date today printString; 954: nextPutAll: ' '; 955: nextPutAll: Time now printString; 956: nextPutAll: '");'; 957: nextPutAll: 'echo = Metrics("/Users/Miyazaki/Desktop/Echo");'; 958: nextPutAll: 'transcript = Transcript();'; 959: nextPutAll: '/* Synapses */'; 960: nextPutAll: 'value'; 961: nextPutAll: ' to: echo;'; 962: nextPutAll: 'echo'; 963: nextPutAll: ' to: transcript;'; 964: nextPutAll: 'echo'; 965: nextPutAll: ' to: transcript;'; 966: nextPutAll: 'echo'; 967: nextPutAll: ' to: transcript;'; 968: yourself. 969: scriptString := aStream contents. 970: ^scriptString 971: 972: ------------------------------------------------------------ 973: 974: SynapseInterpreter class method for 'examples - script' 975: 976: exampleEcho2 977: "KSU.SynapseInterpreter exampleEcho2." 978: 979: | aStream scriptString | 980: aStream := (String new writeStream) 981: nextPutAll: '/* Assignments */'; 982: nextPutAll: 'sourceFile = File("/Users/Miyazaki/Desktop/main2.c", "read");'; 983: nextPutAll: 'echo = Metrics("/Users/Miyazaki/Desktop/Echo2");'; 984: nextPutAll: 'transcript = Transcript();'; 985: nextPutAll: '/* Synapses */'; 986: nextPutAll: 'sourceFile'; 987: nextPutAll: ' to: echo'; 988: nextPutAll: ' to: transcript;'; 989: yourself. 990: scriptString := aStream contents. 991: ^scriptString 992: 993: ------------------------------------------------------------ 994: 995: SynapseInterpreter class method for 'examples - script' 996: 997: exampleEcho3 998: "KSU.SynapseInterpreter exampleEcho3." 999: 1000: | aStream scriptString | 1001: aStream := (String new writeStream) 1002: nextPutAll: '/* Assignments */'; 1003: nextPutAll: 'sourceFile = File("/Users/Miyazaki/Desktop/main2.c", "read");'; 1004: nextPutAll: 'echo1 = Metrics("/Users/Miyazaki/Desktop/Echo2");'; 1005: nextPutAll: 'echo2 = Metrics("/Users/Miyazaki/Desktop/Echo2");'; 1006: nextPutAll: 'echo3 = Metrics("/Users/Miyazaki/Desktop/Echo2");'; 1007: nextPutAll: 'echo4 = Metrics("/Users/Miyazaki/Desktop/Echo2");'; 1008: nextPutAll: 'transcript = Transcript();'; 1009: nextPutAll: '/* Synapses */'; 1010: nextPutAll: 'sourceFile'; 1011: nextPutAll: ' to: echo1'; 1012: nextPutAll: ' to: echo2'; 1013: nextPutAll: ' to: echo3'; 1014: nextPutAll: ' to: echo4'; 1015: nextPutAll: ' to: transcript;'; 1016: yourself. 1017: scriptString := aStream contents. 1018: ^scriptString 1019: 1020: ------------------------------------------------------------ 1021: 1022: SynapseInterpreter class method for 'examples - script' 1023: 1024: exampleForGettingInputOutputSymbols 1025: "KSU.SynapseInterpreter exampleForGettingInputOutputSymbols." 1026: 1027: | scriptString | 1028: scriptString := ' 1029: /* Assignments */ 1030: value = Value("This is sample string in ''exampleForGettingInputOutputSymbols''."); 1031: echo = Metrics("/Users/Miyazaki/Desktop/Echo"); 1032: transcript = Transcript(); 1033: 1034: /* Synapses */ 1035: value 1036: to: echo 1037: to: transcript; 1038: '. 1039: ^scriptString 1040: 1041: ------------------------------------------------------------ 1042: 1043: SynapseInterpreter class method for 'examples - script' 1044: 1045: exampleHoge 1046: "KSU.SynapseInterpreter exampleHoge." 1047: 1048: | scriptString | 1049: scriptString := ' 1050: /* Assignments */ 1051: sourceCode = Value("hoge.hogehogehoge. hoge,hogehoge. (hoge)*(hoge)/(hoge+hoge-hoge)."); 1052: hogeMetrics = Metrics("/path/to/HogeMetrics"); 1053: transcript = Transcript(); 1054: 1055: /* Synapses */ 1056: sourceCode 1057: to: hogeMetrics 1058: to: transcript; 1059: '. 1060: ^scriptString 1061: 1062: ------------------------------------------------------------ 1063: 1064: SynapseInterpreter class method for 'examples - script' 1065: 1066: exampleInvalidFileOperation 1067: "KSU.SynapseInterpreter exampleInvalidFileOperation." 1068: 1069: | scriptString | 1070: scriptString := ' 1071: /* Assignments */ 1072: hogeString = Value("This paragraph has no mean."); 1073: file = File("/Users/Miyazaki/Desktop/hogeWrite.txt", "hogehogehoge"); 1074: transcript = Transcript(); 1075: 1076: /* Synapses */ 1077: hogeString 1078: to: file; 1079: hogeString 1080: to: transcript; 1081: '. 1082: ^scriptString 1083: 1084: ------------------------------------------------------------ 1085: 1086: SynapseInterpreter class method for 'examples - script' 1087: 1088: exampleMetrics1 1089: "KSU.SynapseInterpreter exampleMetrics1." 1090: 1091: | scriptString | 1092: scriptString := ' 1093: /* Assignments */ 1094: sourceFile = File("/path/to/source.c"); 1095: numberOfMethods = Metrics("/path/to/NOM"); 1096: transcript = Transcript(); 1097: 1098: /* Synapses */ 1099: sourceFile 1100: to: numberOfMethods 1101: to: transcript; 1102: '. 1103: ^scriptString 1104: 1105: ------------------------------------------------------------ 1106: 1107: SynapseInterpreter class method for 'examples - script' 1108: 1109: exampleMetrics2 1110: "KSU.SynapseInterpreter exampleMetrics2." 1111: 1112: | scriptString | 1113: scriptString := ' 1114: /* Assignments */ 1115: sourceFile = File("/path/to/source.c"); 1116: numberOfMethods = Metrics("/path/to/NOM"); 1117: transcript = Transcript(); 1118: 1119: /* Synapses */ 1120: sourceFile 1121: send: output to: numberOfMethods.input 1122: send: output to: transcript.input; 1123: '. 1124: ^scriptString 1125: 1126: ------------------------------------------------------------ 1127: 1128: SynapseInterpreter class method for 'examples - script' 1129: 1130: exampleMetrics3 1131: "KSU.SynapseInterpreter exampleMetrics3." 1132: 1133: | scriptString | 1134: scriptString := ' 1135: /* Assignments */ 1136: sourceFile = File("/Users/Miyazaki/Desktop/main2.c", "read"); 1137: metrics = Metrics("/Users/Miyazaki/Desktop/C_EasyMetrics"); 1138: transcript = Transcript(); 1139: 1140: /* Synapses */ 1141: sourceFile 1142: to: metrics 1143: send: linesOfCode to: transcript; 1144: '. 1145: ^scriptString 1146: 1147: ------------------------------------------------------------ 1148: 1149: SynapseInterpreter class method for 'examples - script' 1150: 1151: exampleMetrics4 1152: "KSU.SynapseInterpreter exampleMetrics4." 1153: 1154: | scriptString | 1155: scriptString := ' 1156: /* Assignments */ 1157: sourceCode = Value(" 1158: #include <stdio.h> 1159: #include <stdlib.h> 1160: int main(int argumentCount, char* argumentValues[]) 1161: { 1162: int aValue; 1163: aValue = 3 + 4; // Smalltalker knows this mean... 1164: printf(""aValue is %d\n"", aValue); 1165: return EXIT_SUCCESS; // The ''EXIT_SUCCESS''requires ''stdlib.h''. 1166: } 1167: void error() 1168: { 1169: return; 1170: } 1171: "); 1172: metrics = Metrics("/Users/Miyazaki/Desktop/C_EasyMetrics"); 1173: transcript = Transcript(); 1174: 1175: /* Synapses */ 1176: sourceCode 1177: to: metrics 1178: send: commentRatio to: transcript; 1179: '. 1180: ^scriptString 1181: 1182: ------------------------------------------------------------ 1183: 1184: SynapseInterpreter class method for 'examples - script' 1185: 1186: exampleMetricsTable 1187: "KSU.SynapseInterpreter exampleMetricsTable." 1188: 1189: | scriptString | 1190: scriptString := ' 1191: /*** Assignments ***/ 1192: sourceFile = File("/Users/Miyazaki/Desktop/source.c", "read"); 1193: htmlFile = File("/Users/Miyazaki/Desktop/MetricsTable.html", "write"); 1194: easyMetrics = Metrics("/Users/Miyazaki/Desktop/C_EasyMetrics"); 1195: division = Metrics("/Users/Miyazaki/Desktop/Division2"); 1196: linesPerFunction2WaitTime 1197: = Metrics("/Users/Miyazaki/Desktop/LinesPerFunction2WaitTime"); 1198: idLength2SpaghettiName 1199: = Metrics("/Users/Miyazaki/Desktop/IdLength2SpaghettiName"); 1200: indentDifference2VariabilityOfBoilingTime 1201: = Metrics("/Users/Miyazaki/Desktop/IndentDifference2VariabilityOfBoilingTime"); 1202: commentRatio2Degradation 1203: = Metrics("/Users/Miyazaki/Desktop/CommentRatio2Degradation"); 1204: commentRatio2OliveOil 1205: = Metrics("/Users/Miyazaki/Desktop/CommentRatio2OliveOil"); 1206: metricsTable 1207: = Metrics("/Users/Miyazaki/Desktop/MetricsTable"); 1208: timeUnit = Value("minutes"); 1209: number2Time_1 = Metrics("/Users/Miyazaki/Desktop/Number2Time"); 1210: number2Time_2 = Metrics("/Users/Miyazaki/Desktop/Number2Time"); 1211: 1212: /*** Synapses ***/ 1213: sourceFile 1214: to: easyMetrics; 1215: easyMetrics.linesOfCode to: metricsTable.linesOfCode; 1216: easyMetrics.effectiveLOC to: metricsTable.effectiveLOC; 1217: easyMetrics.physicalLOC to: metricsTable.physicalLOC; 1218: easyMetrics.logicalLOC to: metricsTable.logicalLOC; 1219: easyMetrics.commentLines to: metricsTable.commentLines; 1220: easyMetrics.numberOfFunctions to: metricsTable.numberOfFunctions; 1221: easyMetrics.averageLengthOfId to: metricsTable.averageLengthOfId; 1222: easyMetrics.indentDifference to: metricsTable.indentDifference; 1223: easyMetrics.standardIndent to: metricsTable.standardIndent; 1224: easyMetrics.commentRatio to: metricsTable.commentRatio; 1225: easyMetrics 1226: send: effectiveLOC to: division.dividend 1227: send: quotient to: linesPerFunction2WaitTime 1228: to: number2Time_1.value 1229: to: metricsTable.waitTime; 1230: easyMetrics 1231: send: numberOfFunctions to: division.divisor; 1232: division 1233: send: quotient to: metricsTable.linesPerFunction; 1234: easyMetrics 1235: send: averageLengthOfId to: idLength2SpaghettiName 1236: send: spaghettiName to: metricsTable.spaghettiName; 1237: easyMetrics 1238: send: indentDifference to: indentDifference2VariabilityOfBoilingTime 1239: to: number2Time_2.value 1240: to: metricsTable.variability; 1241: easyMetrics 1242: send: commentRatio to: commentRatio2Degradation 1243: to: metricsTable.degradation; 1244: easyMetrics 1245: send: commentRatio to: commentRatio2OliveOil 1246: to: metricsTable.oliveOil; 1247: timeUnit 1248: to: number2Time_1.unit; 1249: timeUnit 1250: to: number2Time_2.unit; 1251: metricsTable 1252: to: htmlFile; 1253: '. 1254: ^scriptString 1255: 1256: ------------------------------------------------------------ 1257: 1258: SynapseInterpreter class method for 'examples - script' 1259: 1260: exampleReadFromFile 1261: "KSU.SynapseInterpreter exampleReadFromFile." 1262: 1263: | scriptString | 1264: scriptString := ' 1265: /* Assignments */ 1266: file = File("/Users/Miyazaki/Desktop/hoge.txt", "read"); 1267: transcript = Transcript(); 1268: 1269: /* Synapses */ 1270: file 1271: to: transcript; 1272: '. 1273: ^scriptString 1274: 1275: ------------------------------------------------------------ 1276: 1277: SynapseInterpreter class method for 'examples - script' 1278: 1279: exampleSimpleHoge 1280: "KSU.SynapseInterpreter exampleSimpleHoge." 1281: 1282: | scriptString | 1283: scriptString := ' 1284: /* Assignments */ 1285: hogeString = Value("hoge.hogehogehoge. ""hoge,hogehoge."" (hoge)*(hoge)/(hoge+hoge-hoge)."); 1286: transcript = Transcript(); 1287: 1288: /* Synapses */ 1289: hogeString 1290: to: transcript; 1291: '. 1292: ^scriptString 1293: 1294: ------------------------------------------------------------ 1295: 1296: SynapseInterpreter class method for 'examples - script' 1297: 1298: exampleWriteToFile 1299: "KSU.SynapseInterpreter exampleWriteToFile." 1300: 1301: | scriptString | 1302: scriptString := ' 1303: /* Assignments */ 1304: hogeString = Value("This is sample hoge string!! 1305: hogehoge."); 1306: file = File("/Users/Miyazaki/Desktop/hogeWrite.txt", "write"); 1307: transcript = Transcript(); 1308: 1309: /* Synapses */ 1310: hogeString 1311: to: file; 1312: hogeString 1313: to: transcript; 1314: '. 1315: ^scriptString 1316: 1317: ------------------------------------------------------------ 1318: 1319: SynapseInterpreter class method for 'instance creation' 1320: 1321: new 1322: 1323: ^(super new) 1324: initialize; 1325: yourself 1326: 1327: ------------------------------------------------------------ 1328: 1329: SynapseInterpreter class method for 'execution' 1330: 1331: script: scriptString 1332: 1333: | anInterpreter | 1334: anInterpreter := (self new) 1335: evaluate: scriptString; 1336: yourself. 1337: ^anInterpreter execute 1338: 1339: ================================================================================
This document was generated by KSU.TextDoclet on 2013/02/22 at 01:01:17.