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.