nudge 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/LICENSE.txt +21 -0
- data/Rakefile +23 -0
- data/VERSION +1 -0
- data/_spikes/couch_document_spike.rb +24 -0
- data/_spikes/nested_parsing/nested.rb +0 -0
- data/_spikes/nested_parsing/nested.treetop +6 -0
- data/_spikes/nudgeview/init.rb +19 -0
- data/_spikes/nudgeview/public/javascripts/app.js +12 -0
- data/_spikes/nudgeview/public/javascripts/jquery.js +4376 -0
- data/_spikes/nudgeview/public/javascripts/jquery.svg.js +1325 -0
- data/_spikes/nudgeview/views/index.erb +18 -0
- data/_spikes/nudgeview/views/index.haml +8 -0
- data/_spikes/simplestWeb/simplest.rb +44 -0
- data/_spikes/simplestWeb/views/main.erb +19 -0
- data/_spikes/sketches/nudgecode_spike.rb +146 -0
- data/_spikes/sketches/searchDSL_spike.rb +25 -0
- data/_spikes/sketches/search_operator_sketch_spike.txt +287 -0
- data/_spikes/sketches/searchspace_spike.rb +96 -0
- data/_spikes/symbolic_regression/activate.rb +35 -0
- data/_spikes/symbolic_regression/config/environment.rb +340 -0
- data/_spikes/symbolic_regression/config/environments/deployment.rb +0 -0
- data/_spikes/symbolic_regression/config/environments/development.rb +0 -0
- data/_spikes/symbolic_regression/experiment/objectives/programLength.rb +2 -0
- data/_spikes/symbolic_regression/experiment/objectives/summedSquaredError.rb +2 -0
- data/_spikes/symbolic_regression/lib/tasks/run.rake +0 -0
- data/doc/classes/BlockNode.html +146 -0
- data/doc/classes/BlockNode.src/M000246.html +18 -0
- data/doc/classes/BoolAndInstruction.html +218 -0
- data/doc/classes/BoolAndInstruction.src/M000003.html +15 -0
- data/doc/classes/BoolAndInstruction.src/M000004.html +16 -0
- data/doc/classes/BoolAndInstruction.src/M000005.html +15 -0
- data/doc/classes/BoolAndInstruction.src/M000006.html +15 -0
- data/doc/classes/BoolEqualQInstruction.html +218 -0
- data/doc/classes/BoolEqualQInstruction.src/M000015.html +15 -0
- data/doc/classes/BoolEqualQInstruction.src/M000016.html +16 -0
- data/doc/classes/BoolEqualQInstruction.src/M000017.html +15 -0
- data/doc/classes/BoolEqualQInstruction.src/M000018.html +15 -0
- data/doc/classes/BoolFromFloatInstruction.html +218 -0
- data/doc/classes/BoolFromFloatInstruction.src/M000071.html +15 -0
- data/doc/classes/BoolFromFloatInstruction.src/M000072.html +15 -0
- data/doc/classes/BoolFromFloatInstruction.src/M000073.html +15 -0
- data/doc/classes/BoolFromFloatInstruction.src/M000074.html +15 -0
- data/doc/classes/BoolFromIntInstruction.html +218 -0
- data/doc/classes/BoolFromIntInstruction.src/M000067.html +15 -0
- data/doc/classes/BoolFromIntInstruction.src/M000068.html +15 -0
- data/doc/classes/BoolFromIntInstruction.src/M000069.html +15 -0
- data/doc/classes/BoolFromIntInstruction.src/M000070.html +15 -0
- data/doc/classes/BoolNotInstruction.html +218 -0
- data/doc/classes/BoolNotInstruction.src/M000019.html +15 -0
- data/doc/classes/BoolNotInstruction.src/M000020.html +15 -0
- data/doc/classes/BoolNotInstruction.src/M000021.html +15 -0
- data/doc/classes/BoolNotInstruction.src/M000022.html +15 -0
- data/doc/classes/BoolOrInstruction.html +218 -0
- data/doc/classes/BoolOrInstruction.src/M000007.html +15 -0
- data/doc/classes/BoolOrInstruction.src/M000008.html +16 -0
- data/doc/classes/BoolOrInstruction.src/M000009.html +15 -0
- data/doc/classes/BoolOrInstruction.src/M000010.html +15 -0
- data/doc/classes/BoolRandomInstruction.html +218 -0
- data/doc/classes/BoolRandomInstruction.src/M000187.html +15 -0
- data/doc/classes/BoolRandomInstruction.src/M000188.html +14 -0
- data/doc/classes/BoolRandomInstruction.src/M000189.html +15 -0
- data/doc/classes/BoolRandomInstruction.src/M000190.html +15 -0
- data/doc/classes/BoolType.html +196 -0
- data/doc/classes/BoolType.src/M000240.html +16 -0
- data/doc/classes/BoolType.src/M000241.html +15 -0
- data/doc/classes/BoolType.src/M000242.html +15 -0
- data/doc/classes/BoolXorInstruction.html +218 -0
- data/doc/classes/BoolXorInstruction.src/M000011.html +15 -0
- data/doc/classes/BoolXorInstruction.src/M000012.html +16 -0
- data/doc/classes/BoolXorInstruction.src/M000013.html +15 -0
- data/doc/classes/BoolXorInstruction.src/M000014.html +15 -0
- data/doc/classes/ChannelNode.html +161 -0
- data/doc/classes/ChannelNode.src/M000249.html +15 -0
- data/doc/classes/ChannelNode.src/M000250.html +16 -0
- data/doc/classes/CodeType.html +269 -0
- data/doc/classes/CodeType.src/M000219.html +38 -0
- data/doc/classes/CodeType.src/M000220.html +16 -0
- data/doc/classes/CodeType.src/M000221.html +16 -0
- data/doc/classes/CodeType.src/M000222.html +16 -0
- data/doc/classes/CodeType.src/M000223.html +24 -0
- data/doc/classes/CodeType.src/M000224.html +42 -0
- data/doc/classes/ERCNode.html +183 -0
- data/doc/classes/ERCNode.src/M000254.html +15 -0
- data/doc/classes/ERCNode.src/M000255.html +16 -0
- data/doc/classes/ERCNode.src/M000256.html +16 -0
- data/doc/classes/ExecPopInstruction.html +218 -0
- data/doc/classes/ExecPopInstruction.src/M000075.html +15 -0
- data/doc/classes/ExecPopInstruction.src/M000076.html +14 -0
- data/doc/classes/ExecPopInstruction.src/M000077.html +15 -0
- data/doc/classes/ExecPopInstruction.src/M000078.html +14 -0
- data/doc/classes/FloatAbsInstruction.html +218 -0
- data/doc/classes/FloatAbsInstruction.src/M000107.html +15 -0
- data/doc/classes/FloatAbsInstruction.src/M000108.html +15 -0
- data/doc/classes/FloatAbsInstruction.src/M000109.html +15 -0
- data/doc/classes/FloatAbsInstruction.src/M000110.html +15 -0
- data/doc/classes/FloatAddInstruction.html +218 -0
- data/doc/classes/FloatAddInstruction.src/M000079.html +15 -0
- data/doc/classes/FloatAddInstruction.src/M000080.html +16 -0
- data/doc/classes/FloatAddInstruction.src/M000081.html +15 -0
- data/doc/classes/FloatAddInstruction.src/M000082.html +15 -0
- data/doc/classes/FloatCosineInstruction.html +218 -0
- data/doc/classes/FloatCosineInstruction.src/M000123.html +15 -0
- data/doc/classes/FloatCosineInstruction.src/M000124.html +15 -0
- data/doc/classes/FloatCosineInstruction.src/M000125.html +15 -0
- data/doc/classes/FloatCosineInstruction.src/M000126.html +15 -0
- data/doc/classes/FloatDivideInstruction.html +218 -0
- data/doc/classes/FloatDivideInstruction.src/M000091.html +15 -0
- data/doc/classes/FloatDivideInstruction.src/M000092.html +16 -0
- data/doc/classes/FloatDivideInstruction.src/M000093.html +20 -0
- data/doc/classes/FloatDivideInstruction.src/M000094.html +15 -0
- data/doc/classes/FloatFromBoolInstruction.html +218 -0
- data/doc/classes/FloatFromBoolInstruction.src/M000055.html +15 -0
- data/doc/classes/FloatFromBoolInstruction.src/M000056.html +15 -0
- data/doc/classes/FloatFromBoolInstruction.src/M000057.html +15 -0
- data/doc/classes/FloatFromBoolInstruction.src/M000058.html +15 -0
- data/doc/classes/FloatFromIntInstruction.html +218 -0
- data/doc/classes/FloatFromIntInstruction.src/M000063.html +15 -0
- data/doc/classes/FloatFromIntInstruction.src/M000064.html +15 -0
- data/doc/classes/FloatFromIntInstruction.src/M000065.html +15 -0
- data/doc/classes/FloatFromIntInstruction.src/M000066.html +15 -0
- data/doc/classes/FloatGreaterThanQInstruction.html +218 -0
- data/doc/classes/FloatGreaterThanQInstruction.src/M000035.html +15 -0
- data/doc/classes/FloatGreaterThanQInstruction.src/M000036.html +16 -0
- data/doc/classes/FloatGreaterThanQInstruction.src/M000037.html +15 -0
- data/doc/classes/FloatGreaterThanQInstruction.src/M000038.html +15 -0
- data/doc/classes/FloatIfInstruction.html +218 -0
- data/doc/classes/FloatIfInstruction.src/M000047.html +16 -0
- data/doc/classes/FloatIfInstruction.src/M000048.html +15 -0
- data/doc/classes/FloatIfInstruction.src/M000049.html +14 -0
- data/doc/classes/FloatIfInstruction.src/M000050.html +17 -0
- data/doc/classes/FloatLessThanQInstruction.html +218 -0
- data/doc/classes/FloatLessThanQInstruction.src/M000039.html +15 -0
- data/doc/classes/FloatLessThanQInstruction.src/M000040.html +16 -0
- data/doc/classes/FloatLessThanQInstruction.src/M000041.html +15 -0
- data/doc/classes/FloatLessThanQInstruction.src/M000042.html +15 -0
- data/doc/classes/FloatMaxInstruction.html +218 -0
- data/doc/classes/FloatMaxInstruction.src/M000095.html +15 -0
- data/doc/classes/FloatMaxInstruction.src/M000096.html +16 -0
- data/doc/classes/FloatMaxInstruction.src/M000097.html +15 -0
- data/doc/classes/FloatMaxInstruction.src/M000098.html +15 -0
- data/doc/classes/FloatMinInstruction.html +218 -0
- data/doc/classes/FloatMinInstruction.src/M000099.html +15 -0
- data/doc/classes/FloatMinInstruction.src/M000100.html +16 -0
- data/doc/classes/FloatMinInstruction.src/M000101.html +15 -0
- data/doc/classes/FloatMinInstruction.src/M000102.html +15 -0
- data/doc/classes/FloatMultiplyInstruction.html +218 -0
- data/doc/classes/FloatMultiplyInstruction.src/M000083.html +15 -0
- data/doc/classes/FloatMultiplyInstruction.src/M000084.html +16 -0
- data/doc/classes/FloatMultiplyInstruction.src/M000085.html +15 -0
- data/doc/classes/FloatMultiplyInstruction.src/M000086.html +15 -0
- data/doc/classes/FloatNegativeInstruction.html +218 -0
- data/doc/classes/FloatNegativeInstruction.src/M000103.html +15 -0
- data/doc/classes/FloatNegativeInstruction.src/M000104.html +15 -0
- data/doc/classes/FloatNegativeInstruction.src/M000105.html +15 -0
- data/doc/classes/FloatNegativeInstruction.src/M000106.html +15 -0
- data/doc/classes/FloatPowerInstruction.html +218 -0
- data/doc/classes/FloatPowerInstruction.src/M000111.html +15 -0
- data/doc/classes/FloatPowerInstruction.src/M000112.html +16 -0
- data/doc/classes/FloatPowerInstruction.src/M000113.html +20 -0
- data/doc/classes/FloatPowerInstruction.src/M000114.html +15 -0
- data/doc/classes/FloatRandomInstruction.html +218 -0
- data/doc/classes/FloatRandomInstruction.src/M000191.html +15 -0
- data/doc/classes/FloatRandomInstruction.src/M000192.html +14 -0
- data/doc/classes/FloatRandomInstruction.src/M000193.html +15 -0
- data/doc/classes/FloatRandomInstruction.src/M000194.html +15 -0
- data/doc/classes/FloatSineInstruction.html +218 -0
- data/doc/classes/FloatSineInstruction.src/M000119.html +15 -0
- data/doc/classes/FloatSineInstruction.src/M000120.html +15 -0
- data/doc/classes/FloatSineInstruction.src/M000121.html +15 -0
- data/doc/classes/FloatSineInstruction.src/M000122.html +15 -0
- data/doc/classes/FloatSqrtInstruction.html +218 -0
- data/doc/classes/FloatSqrtInstruction.src/M000115.html +15 -0
- data/doc/classes/FloatSqrtInstruction.src/M000116.html +15 -0
- data/doc/classes/FloatSqrtInstruction.src/M000117.html +19 -0
- data/doc/classes/FloatSqrtInstruction.src/M000118.html +15 -0
- data/doc/classes/FloatSubtractInstruction.html +218 -0
- data/doc/classes/FloatSubtractInstruction.src/M000087.html +15 -0
- data/doc/classes/FloatSubtractInstruction.src/M000088.html +16 -0
- data/doc/classes/FloatSubtractInstruction.src/M000089.html +15 -0
- data/doc/classes/FloatSubtractInstruction.src/M000090.html +15 -0
- data/doc/classes/FloatTangentInstruction.html +218 -0
- data/doc/classes/FloatTangentInstruction.src/M000127.html +15 -0
- data/doc/classes/FloatTangentInstruction.src/M000128.html +15 -0
- data/doc/classes/FloatTangentInstruction.src/M000129.html +15 -0
- data/doc/classes/FloatTangentInstruction.src/M000130.html +15 -0
- data/doc/classes/FloatType.html +196 -0
- data/doc/classes/FloatType.src/M000243.html +19 -0
- data/doc/classes/FloatType.src/M000244.html +15 -0
- data/doc/classes/FloatType.src/M000245.html +15 -0
- data/doc/classes/Helpers.html +161 -0
- data/doc/classes/Helpers.src/M000343.html +21 -0
- data/doc/classes/Helpers.src/M000344.html +24 -0
- data/doc/classes/Instruction/InstructionMethodError.html +110 -0
- data/doc/classes/Instruction/NaNResultError.html +110 -0
- data/doc/classes/Instruction/NotEnoughStackItems.html +110 -0
- data/doc/classes/Instruction.html +500 -0
- data/doc/classes/Instruction.src/M000131.html +17 -0
- data/doc/classes/Instruction.src/M000132.html +15 -0
- data/doc/classes/Instruction.src/M000133.html +15 -0
- data/doc/classes/Instruction.src/M000134.html +15 -0
- data/doc/classes/Instruction.src/M000135.html +15 -0
- data/doc/classes/Instruction.src/M000136.html +15 -0
- data/doc/classes/Instruction.src/M000137.html +15 -0
- data/doc/classes/Instruction.src/M000138.html +15 -0
- data/doc/classes/Instruction.src/M000139.html +22 -0
- data/doc/classes/Instruction.src/M000140.html +15 -0
- data/doc/classes/Instruction.src/M000141.html +25 -0
- data/doc/classes/Instruction.src/M000142.html +15 -0
- data/doc/classes/Instruction.src/M000143.html +15 -0
- data/doc/classes/Instruction.src/M000144.html +15 -0
- data/doc/classes/Instruction.src/M000145.html +15 -0
- data/doc/classes/Instruction.src/M000146.html +15 -0
- data/doc/classes/InstructionNode.html +161 -0
- data/doc/classes/InstructionNode.src/M000247.html +15 -0
- data/doc/classes/InstructionNode.src/M000248.html +16 -0
- data/doc/classes/IntAbsInstruction.html +218 -0
- data/doc/classes/IntAbsInstruction.src/M000175.html +15 -0
- data/doc/classes/IntAbsInstruction.src/M000176.html +15 -0
- data/doc/classes/IntAbsInstruction.src/M000177.html +15 -0
- data/doc/classes/IntAbsInstruction.src/M000178.html +15 -0
- data/doc/classes/IntAddInstruction.html +218 -0
- data/doc/classes/IntAddInstruction.src/M000147.html +15 -0
- data/doc/classes/IntAddInstruction.src/M000148.html +16 -0
- data/doc/classes/IntAddInstruction.src/M000149.html +15 -0
- data/doc/classes/IntAddInstruction.src/M000150.html +15 -0
- data/doc/classes/IntDepthInstruction.html +218 -0
- data/doc/classes/IntDepthInstruction.src/M000211.html +15 -0
- data/doc/classes/IntDepthInstruction.src/M000212.html +14 -0
- data/doc/classes/IntDepthInstruction.src/M000213.html +15 -0
- data/doc/classes/IntDepthInstruction.src/M000214.html +15 -0
- data/doc/classes/IntDivideInstruction.html +218 -0
- data/doc/classes/IntDivideInstruction.src/M000155.html +15 -0
- data/doc/classes/IntDivideInstruction.src/M000156.html +16 -0
- data/doc/classes/IntDivideInstruction.src/M000157.html +20 -0
- data/doc/classes/IntDivideInstruction.src/M000158.html +15 -0
- data/doc/classes/IntDuplicateInstruction.html +218 -0
- data/doc/classes/IntDuplicateInstruction.src/M000203.html +15 -0
- data/doc/classes/IntDuplicateInstruction.src/M000204.html +15 -0
- data/doc/classes/IntDuplicateInstruction.src/M000205.html +15 -0
- data/doc/classes/IntDuplicateInstruction.src/M000206.html +15 -0
- data/doc/classes/IntEqualQInstruction.html +218 -0
- data/doc/classes/IntEqualQInstruction.src/M000023.html +15 -0
- data/doc/classes/IntEqualQInstruction.src/M000024.html +16 -0
- data/doc/classes/IntEqualQInstruction.src/M000025.html +15 -0
- data/doc/classes/IntEqualQInstruction.src/M000026.html +15 -0
- data/doc/classes/IntFlushInstruction.html +218 -0
- data/doc/classes/IntFlushInstruction.src/M000215.html +15 -0
- data/doc/classes/IntFlushInstruction.src/M000216.html +14 -0
- data/doc/classes/IntFlushInstruction.src/M000217.html +14 -0
- data/doc/classes/IntFlushInstruction.src/M000218.html +15 -0
- data/doc/classes/IntFromBoolInstruction.html +218 -0
- data/doc/classes/IntFromBoolInstruction.src/M000051.html +15 -0
- data/doc/classes/IntFromBoolInstruction.src/M000052.html +15 -0
- data/doc/classes/IntFromBoolInstruction.src/M000053.html +15 -0
- data/doc/classes/IntFromBoolInstruction.src/M000054.html +15 -0
- data/doc/classes/IntFromFloatInstruction.html +218 -0
- data/doc/classes/IntFromFloatInstruction.src/M000059.html +15 -0
- data/doc/classes/IntFromFloatInstruction.src/M000060.html +15 -0
- data/doc/classes/IntFromFloatInstruction.src/M000061.html +15 -0
- data/doc/classes/IntFromFloatInstruction.src/M000062.html +15 -0
- data/doc/classes/IntGreaterThanQInstruction.html +218 -0
- data/doc/classes/IntGreaterThanQInstruction.src/M000031.html +15 -0
- data/doc/classes/IntGreaterThanQInstruction.src/M000032.html +16 -0
- data/doc/classes/IntGreaterThanQInstruction.src/M000033.html +15 -0
- data/doc/classes/IntGreaterThanQInstruction.src/M000034.html +15 -0
- data/doc/classes/IntIfInstruction.html +218 -0
- data/doc/classes/IntIfInstruction.src/M000043.html +16 -0
- data/doc/classes/IntIfInstruction.src/M000044.html +15 -0
- data/doc/classes/IntIfInstruction.src/M000045.html +14 -0
- data/doc/classes/IntIfInstruction.src/M000046.html +17 -0
- data/doc/classes/IntLessThanQInstruction.html +218 -0
- data/doc/classes/IntLessThanQInstruction.src/M000027.html +15 -0
- data/doc/classes/IntLessThanQInstruction.src/M000028.html +16 -0
- data/doc/classes/IntLessThanQInstruction.src/M000029.html +15 -0
- data/doc/classes/IntLessThanQInstruction.src/M000030.html +15 -0
- data/doc/classes/IntMaxInstruction.html +218 -0
- data/doc/classes/IntMaxInstruction.src/M000167.html +15 -0
- data/doc/classes/IntMaxInstruction.src/M000168.html +16 -0
- data/doc/classes/IntMaxInstruction.src/M000169.html +16 -0
- data/doc/classes/IntMaxInstruction.src/M000170.html +15 -0
- data/doc/classes/IntMinInstruction.html +218 -0
- data/doc/classes/IntMinInstruction.src/M000171.html +15 -0
- data/doc/classes/IntMinInstruction.src/M000172.html +16 -0
- data/doc/classes/IntMinInstruction.src/M000173.html +16 -0
- data/doc/classes/IntMinInstruction.src/M000174.html +15 -0
- data/doc/classes/IntModuloInstruction.html +218 -0
- data/doc/classes/IntModuloInstruction.src/M000163.html +15 -0
- data/doc/classes/IntModuloInstruction.src/M000164.html +16 -0
- data/doc/classes/IntModuloInstruction.src/M000165.html +20 -0
- data/doc/classes/IntModuloInstruction.src/M000166.html +15 -0
- data/doc/classes/IntMultiplyInstruction.html +218 -0
- data/doc/classes/IntMultiplyInstruction.src/M000151.html +15 -0
- data/doc/classes/IntMultiplyInstruction.src/M000152.html +16 -0
- data/doc/classes/IntMultiplyInstruction.src/M000153.html +15 -0
- data/doc/classes/IntMultiplyInstruction.src/M000154.html +15 -0
- data/doc/classes/IntNegativeInstruction.html +218 -0
- data/doc/classes/IntNegativeInstruction.src/M000179.html +15 -0
- data/doc/classes/IntNegativeInstruction.src/M000180.html +15 -0
- data/doc/classes/IntNegativeInstruction.src/M000181.html +15 -0
- data/doc/classes/IntNegativeInstruction.src/M000182.html +15 -0
- data/doc/classes/IntPopInstruction.html +218 -0
- data/doc/classes/IntPopInstruction.src/M000195.html +15 -0
- data/doc/classes/IntPopInstruction.src/M000196.html +15 -0
- data/doc/classes/IntPopInstruction.src/M000197.html +14 -0
- data/doc/classes/IntPopInstruction.src/M000198.html +14 -0
- data/doc/classes/IntRandomInstruction.html +218 -0
- data/doc/classes/IntRandomInstruction.src/M000183.html +15 -0
- data/doc/classes/IntRandomInstruction.src/M000184.html +14 -0
- data/doc/classes/IntRandomInstruction.src/M000185.html +15 -0
- data/doc/classes/IntRandomInstruction.src/M000186.html +15 -0
- data/doc/classes/IntRotateInstruction.html +218 -0
- data/doc/classes/IntRotateInstruction.src/M000207.html +15 -0
- data/doc/classes/IntRotateInstruction.src/M000208.html +17 -0
- data/doc/classes/IntRotateInstruction.src/M000209.html +14 -0
- data/doc/classes/IntRotateInstruction.src/M000210.html +17 -0
- data/doc/classes/IntSubtractInstruction.html +218 -0
- data/doc/classes/IntSubtractInstruction.src/M000159.html +15 -0
- data/doc/classes/IntSubtractInstruction.src/M000160.html +16 -0
- data/doc/classes/IntSubtractInstruction.src/M000161.html +16 -0
- data/doc/classes/IntSubtractInstruction.src/M000162.html +15 -0
- data/doc/classes/IntSwapInstruction.html +218 -0
- data/doc/classes/IntSwapInstruction.src/M000199.html +15 -0
- data/doc/classes/IntSwapInstruction.src/M000200.html +16 -0
- data/doc/classes/IntSwapInstruction.src/M000201.html +14 -0
- data/doc/classes/IntSwapInstruction.src/M000202.html +16 -0
- data/doc/classes/IntType.html +240 -0
- data/doc/classes/IntType.src/M000235.html +15 -0
- data/doc/classes/IntType.src/M000236.html +15 -0
- data/doc/classes/IntType.src/M000237.html +18 -0
- data/doc/classes/IntType.src/M000238.html +15 -0
- data/doc/classes/IntType.src/M000239.html +15 -0
- data/doc/classes/LiteralNode.html +183 -0
- data/doc/classes/LiteralNode.src/M000251.html +15 -0
- data/doc/classes/LiteralNode.src/M000252.html +16 -0
- data/doc/classes/LiteralNode.src/M000253.html +16 -0
- data/doc/classes/Nudge/Channel.html +437 -0
- data/doc/classes/Nudge/Channel.src/M000286.html +15 -0
- data/doc/classes/Nudge/Channel.src/M000287.html +19 -0
- data/doc/classes/Nudge/Channel.src/M000288.html +15 -0
- data/doc/classes/Nudge/Channel.src/M000289.html +15 -0
- data/doc/classes/Nudge/Channel.src/M000290.html +15 -0
- data/doc/classes/Nudge/Channel.src/M000291.html +19 -0
- data/doc/classes/Nudge/Channel.src/M000292.html +19 -0
- data/doc/classes/Nudge/Channel.src/M000293.html +17 -0
- data/doc/classes/Nudge/Channel.src/M000294.html +15 -0
- data/doc/classes/Nudge/Channel.src/M000295.html +20 -0
- data/doc/classes/Nudge/Channel.src/M000296.html +15 -0
- data/doc/classes/Nudge/Channel.src/M000297.html +17 -0
- data/doc/classes/Nudge/Channel.src/M000298.html +15 -0
- data/doc/classes/Nudge/CodeBlock.html +331 -0
- data/doc/classes/Nudge/CodeBlock.src/M000263.html +15 -0
- data/doc/classes/Nudge/CodeBlock.src/M000264.html +15 -0
- data/doc/classes/Nudge/CodeBlock.src/M000265.html +15 -0
- data/doc/classes/Nudge/CodeBlock.src/M000266.html +15 -0
- data/doc/classes/Nudge/CodeBlock.src/M000267.html +15 -0
- data/doc/classes/Nudge/CodeBlock.src/M000268.html +17 -0
- data/doc/classes/Nudge/CodeBlock.src/M000269.html +20 -0
- data/doc/classes/Nudge/CodeBlock.src/M000270.html +15 -0
- data/doc/classes/Nudge/CodeBlock.src/M000271.html +19 -0
- data/doc/classes/Nudge/DeadLocation.html +152 -0
- data/doc/classes/Nudge/DeadLocation.src/M000334.html +17 -0
- data/doc/classes/Nudge/Erc.html +335 -0
- data/doc/classes/Nudge/Erc.src/M000278.html +16 -0
- data/doc/classes/Nudge/Erc.src/M000279.html +15 -0
- data/doc/classes/Nudge/Erc.src/M000280.html +15 -0
- data/doc/classes/Nudge/Erc.src/M000281.html +15 -0
- data/doc/classes/Nudge/Erc.src/M000282.html +18 -0
- data/doc/classes/Nudge/Erc.src/M000283.html +15 -0
- data/doc/classes/Nudge/Erc.src/M000284.html +17 -0
- data/doc/classes/Nudge/Erc.src/M000285.html +15 -0
- data/doc/classes/Nudge/Individual.html +313 -0
- data/doc/classes/Nudge/Individual.src/M000314.html +21 -0
- data/doc/classes/Nudge/Individual.src/M000315.html +15 -0
- data/doc/classes/Nudge/Individual.src/M000316.html +15 -0
- data/doc/classes/Nudge/Individual.src/M000317.html +17 -0
- data/doc/classes/Nudge/Individual.src/M000318.html +25 -0
- data/doc/classes/Nudge/InstructionPoint/InstructionNotFoundError.html +110 -0
- data/doc/classes/Nudge/InstructionPoint.html +350 -0
- data/doc/classes/Nudge/InstructionPoint.src/M000299.html +15 -0
- data/doc/classes/Nudge/InstructionPoint.src/M000300.html +15 -0
- data/doc/classes/Nudge/InstructionPoint.src/M000301.html +17 -0
- data/doc/classes/Nudge/InstructionPoint.src/M000302.html +15 -0
- data/doc/classes/Nudge/InstructionPoint.src/M000303.html +17 -0
- data/doc/classes/Nudge/InstructionPoint.src/M000304.html +17 -0
- data/doc/classes/Nudge/InstructionPoint.src/M000305.html +17 -0
- data/doc/classes/Nudge/InstructionPoint.src/M000306.html +15 -0
- data/doc/classes/Nudge/Interpreter.html +369 -0
- data/doc/classes/Nudge/Interpreter.src/M000257.html +20 -0
- data/doc/classes/Nudge/Interpreter.src/M000258.html +19 -0
- data/doc/classes/Nudge/Interpreter.src/M000259.html +15 -0
- data/doc/classes/Nudge/Interpreter.src/M000260.html +19 -0
- data/doc/classes/Nudge/Interpreter.src/M000261.html +17 -0
- data/doc/classes/Nudge/LiteralPoint.html +291 -0
- data/doc/classes/Nudge/LiteralPoint.src/M000272.html +16 -0
- data/doc/classes/Nudge/LiteralPoint.src/M000273.html +15 -0
- data/doc/classes/Nudge/LiteralPoint.src/M000274.html +15 -0
- data/doc/classes/Nudge/LiteralPoint.src/M000275.html +18 -0
- data/doc/classes/Nudge/LiteralPoint.src/M000276.html +17 -0
- data/doc/classes/Nudge/LiteralPoint.src/M000277.html +15 -0
- data/doc/classes/Nudge/Location.html +525 -0
- data/doc/classes/Nudge/Location.src/M000319.html +19 -0
- data/doc/classes/Nudge/Location.src/M000320.html +15 -0
- data/doc/classes/Nudge/Location.src/M000321.html +26 -0
- data/doc/classes/Nudge/Location.src/M000322.html +15 -0
- data/doc/classes/Nudge/Location.src/M000323.html +20 -0
- data/doc/classes/Nudge/Location.src/M000324.html +16 -0
- data/doc/classes/Nudge/Location.src/M000325.html +25 -0
- data/doc/classes/Nudge/Location.src/M000326.html +15 -0
- data/doc/classes/Nudge/Location.src/M000327.html +21 -0
- data/doc/classes/Nudge/Location.src/M000328.html +16 -0
- data/doc/classes/Nudge/Location.src/M000329.html +15 -0
- data/doc/classes/Nudge/Location.src/M000330.html +16 -0
- data/doc/classes/Nudge/Location.src/M000331.html +20 -0
- data/doc/classes/Nudge/Location.src/M000332.html +17 -0
- data/doc/classes/Nudge/Location.src/M000333.html +17 -0
- data/doc/classes/Nudge/NondominatedSubset.html +196 -0
- data/doc/classes/Nudge/NondominatedSubset.src/M000005.html +19 -0
- data/doc/classes/Nudge/NondominatedSubset.src/M000006.html +19 -0
- data/doc/classes/Nudge/NondominatedSubset.src/M000007.html +25 -0
- data/doc/classes/Nudge/NondominatedSubset.src/M000339.html +19 -0
- data/doc/classes/Nudge/NondominatedSubset.src/M000340.html +19 -0
- data/doc/classes/Nudge/NondominatedSubset.src/M000341.html +25 -0
- data/doc/classes/Nudge/PopulationResample.html +175 -0
- data/doc/classes/Nudge/PopulationResample.src/M000003.html +22 -0
- data/doc/classes/Nudge/PopulationResample.src/M000337.html +22 -0
- data/doc/classes/Nudge/ProgramPoint.html +148 -0
- data/doc/classes/Nudge/ProgramPoint.src/M000262.html +15 -0
- data/doc/classes/Nudge/RandomGuess.html +176 -0
- data/doc/classes/Nudge/RandomGuess.src/M000002.html +21 -0
- data/doc/classes/Nudge/RandomGuess.src/M000336.html +21 -0
- data/doc/classes/Nudge/ResampleValues.html +169 -0
- data/doc/classes/Nudge/ResampleValues.src/M000004.html +36 -0
- data/doc/classes/Nudge/ResampleValues.src/M000338.html +36 -0
- data/doc/classes/Nudge/SearchOperator.html +175 -0
- data/doc/classes/Nudge/SearchOperator.src/M000001.html +15 -0
- data/doc/classes/Nudge/SearchOperator.src/M000335.html +15 -0
- data/doc/classes/Nudge/Stack.html +350 -0
- data/doc/classes/Nudge/Stack.src/M000307.html +15 -0
- data/doc/classes/Nudge/Stack.src/M000308.html +15 -0
- data/doc/classes/Nudge/Stack.src/M000309.html +18 -0
- data/doc/classes/Nudge/Stack.src/M000310.html +15 -0
- data/doc/classes/Nudge/Stack.src/M000311.html +15 -0
- data/doc/classes/Nudge/Stack.src/M000312.html +15 -0
- data/doc/classes/Nudge/Stack.src/M000313.html +15 -0
- data/doc/classes/Nudge/UniformBackboneCrossover.html +152 -0
- data/doc/classes/Nudge/UniformBackboneCrossover.src/M000008.html +35 -0
- data/doc/classes/Nudge/UniformBackboneCrossover.src/M000342.html +35 -0
- data/doc/classes/Nudge.html +174 -0
- data/doc/classes/NudgeType.html +363 -0
- data/doc/classes/NudgeType.src/M000225.html +17 -0
- data/doc/classes/NudgeType.src/M000226.html +15 -0
- data/doc/classes/NudgeType.src/M000227.html +15 -0
- data/doc/classes/NudgeType.src/M000228.html +15 -0
- data/doc/classes/NudgeType.src/M000229.html +15 -0
- data/doc/classes/NudgeType.src/M000230.html +15 -0
- data/doc/classes/NudgeType.src/M000231.html +15 -0
- data/doc/classes/NudgeType.src/M000232.html +15 -0
- data/doc/classes/NudgeType.src/M000233.html +15 -0
- data/doc/classes/NudgeType.src/M000234.html +15 -0
- data/doc/created.rid +1 -0
- data/doc/files/lib/instructions/bool_basics_rb.html +90 -0
- data/doc/files/lib/instructions/comparisons_rb.html +90 -0
- data/doc/files/lib/instructions/conditionals_rb.html +90 -0
- data/doc/files/lib/instructions/conversions_rb.html +90 -0
- data/doc/files/lib/instructions/exec_rb.html +90 -0
- data/doc/files/lib/instructions/float_arithmetic_rb.html +90 -0
- data/doc/files/lib/instructions/float_transcendental_rb.html +90 -0
- data/doc/files/lib/instructions/infrastructure_rb.html +100 -0
- data/doc/files/lib/instructions/int_arithmetic_rb.html +90 -0
- data/doc/files/lib/instructions/random_value_rb.html +90 -0
- data/doc/files/lib/instructions/stack_manipulation_rb.html +90 -0
- data/doc/files/lib/interpreter/grammars/nudge_language_helpers_rb.html +97 -0
- data/doc/files/lib/interpreter/grammars/nudge_language_treetop.html +180 -0
- data/doc/files/lib/interpreter/interpreter_rb.html +90 -0
- data/doc/files/lib/interpreter/programPoints_rb.html +90 -0
- data/doc/files/lib/interpreter/stack_rb.html +90 -0
- data/doc/files/lib/interpreter/types/codeType_rb.html +157 -0
- data/doc/files/lib/interpreter/types/codeType_rb.src/M000001.html +15 -0
- data/doc/files/lib/interpreter/types/codeType_rb.src/M000002.html +15 -0
- data/doc/files/lib/interpreter/types/pushTypes_rb.html +107 -0
- data/doc/files/lib/nudge_rb.html +152 -0
- data/doc/files/lib/search/evaluators/structural_complexity_rb.html +90 -0
- data/doc/files/lib/search/helpers_rb.html +90 -0
- data/doc/files/lib/search/individual/individual_rb.html +90 -0
- data/doc/files/lib/search/locations/location_rb.html +100 -0
- data/doc/files/lib/search/operators/basic_operators_rb.html +90 -0
- data/doc/fr_class_index.html +191 -0
- data/doc/fr_file_index.html +71 -0
- data/doc/fr_method_index.html +711 -0
- data/doc/index.html +21 -0
- data/doc/rdoc-style.css +299 -0
- data/features/parser_recognizes_nudge_language.feature +9 -0
- data/lib/instructions/bool_basics.rb +85 -0
- data/lib/instructions/code_basics.rb +14 -0
- data/lib/instructions/comparisons.rb +152 -0
- data/lib/instructions/conditionals.rb +44 -0
- data/lib/instructions/conversions.rb +94 -0
- data/lib/instructions/exec.rb +154 -0
- data/lib/instructions/float_arithmetic.rb +201 -0
- data/lib/instructions/float_transcendental.rb +47 -0
- data/lib/instructions/infrastructure.rb +84 -0
- data/lib/instructions/int_arithmetic.rb +160 -0
- data/lib/instructions/name_basics.rb +44 -0
- data/lib/instructions/name_bindings.rb +65 -0
- data/lib/instructions/random_value.rb +43 -0
- data/lib/instructions/stack_manipulation.rb +739 -0
- data/lib/interpreter/grammars/nudge_language.treetop +83 -0
- data/lib/interpreter/grammars/nudge_language_helpers.rb +64 -0
- data/lib/interpreter/interpreter.rb +176 -0
- data/lib/interpreter/programPoints.rb +236 -0
- data/lib/interpreter/stack.rb +39 -0
- data/lib/interpreter/types/codeType.rb +108 -0
- data/lib/interpreter/types/pushTypes.rb +102 -0
- data/lib/nudge.rb +38 -0
- data/lib/search/experiments/experiment.rb +53 -0
- data/lib/search/helpers.rb +22 -0
- data/lib/search/individual/batch.rb +25 -0
- data/lib/search/individual/individual.rb +147 -0
- data/lib/search/operators/basic_operators.rb +230 -0
- data/lib/search/operators/evaluators.rb +107 -0
- data/lib/search/operators/samplers_and_selectors.rb +123 -0
- data/lib/search/stations/station.rb +147 -0
- data/push_language_coverage.md +177 -0
- data/readme.md +19 -0
- data/spec/data/couchdb_spec.rb +2 -0
- data/spec/fixtures/just_block.example +1 -0
- data/spec/fixtures/just_block_with_newline.example +1 -0
- data/spec/fixtures/long_arithmetic.example +7 -0
- data/spec/fixtures/one_line_instr.example +1 -0
- data/spec/fixtures/untidy1.example +20 -0
- data/spec/fixtures/untidy1fixed.example +12 -0
- data/spec/instructions/bool_basics_spec.rb +97 -0
- data/spec/instructions/bool_stack_spec.rb +391 -0
- data/spec/instructions/code_basics_spec.rb +43 -0
- data/spec/instructions/code_stack_spec.rb +382 -0
- data/spec/instructions/comparisons_spec.rb +486 -0
- data/spec/instructions/conditionals_spec.rb +162 -0
- data/spec/instructions/conversions_spec.rb +92 -0
- data/spec/instructions/exec_spec.rb +883 -0
- data/spec/instructions/float_calculations_spec.rb +148 -0
- data/spec/instructions/float_stack_spec.rb +382 -0
- data/spec/instructions/float_transcendental_spec.rb +89 -0
- data/spec/instructions/instruction_class_spec.rb +9 -0
- data/spec/instructions/int_calculations_spec.rb +125 -0
- data/spec/instructions/int_stack_spec.rb +398 -0
- data/spec/instructions/name_basics_spec.rb +158 -0
- data/spec/instructions/name_bindings_spec.rb +257 -0
- data/spec/instructions/name_stack_spec.rb +382 -0
- data/spec/instructions/random_values_spec.rb +68 -0
- data/spec/integration/search_integration.rb +67 -0
- data/spec/interpreter/channel_spec.rb +92 -0
- data/spec/interpreter/codeblock_spec.rb +135 -0
- data/spec/interpreter/codetype_spec.rb +257 -0
- data/spec/interpreter/erc_spec.rb +130 -0
- data/spec/interpreter/instruction_spec.rb +97 -0
- data/spec/interpreter/interpreter_spec.rb +266 -0
- data/spec/interpreter/literal_spec.rb +94 -0
- data/spec/interpreter/parser_spec.rb +324 -0
- data/spec/interpreter/stack_spec.rb +81 -0
- data/spec/interpreter/types_spec.rb +102 -0
- data/spec/search/batch_spec.rb +30 -0
- data/spec/search/experiments/experiment_spec.rb +101 -0
- data/spec/search/helpers_spec.rb +59 -0
- data/spec/search/individual_spec.rb +356 -0
- data/spec/search/operators/any_one_sampler_spec.rb +40 -0
- data/spec/search/operators/dominated_quantile_spec.rb +111 -0
- data/spec/search/operators/duplicate_genomes_spec.rb +35 -0
- data/spec/search/operators/evaluators/program_point_evaluator_spec.rb +43 -0
- data/spec/search/operators/evaluators/test_case_evaluator_spec.rb +133 -0
- data/spec/search/operators/infrastructure_spec.rb +47 -0
- data/spec/search/operators/most_dominated_subset_spec.rb +47 -0
- data/spec/search/operators/nondominated_subset_spec.rb +97 -0
- data/spec/search/operators/pointCrossover_spec.rb +55 -0
- data/spec/search/operators/pointDeletion_spec.rb +57 -0
- data/spec/search/operators/pointMutation_spec.rb +71 -0
- data/spec/search/operators/random_guess_spec.rb +51 -0
- data/spec/search/operators/resample_and_clone_spec.rb +50 -0
- data/spec/search/operators/resample_values_spec.rb +126 -0
- data/spec/search/operators/sizePreservingMutation_spec.rb +2 -0
- data/spec/search/operators/uniformBackboneCrossover_spec.rb +63 -0
- data/spec/search/stations/station_spec.rb +496 -0
- data/spec/spec_helper.rb +11 -0
- metadata +738 -0
@@ -0,0 +1,83 @@
|
|
1
|
+
grammar NudgeLanguage
|
2
|
+
|
3
|
+
rule any_point
|
4
|
+
nonblock_point / block_point
|
5
|
+
end
|
6
|
+
|
7
|
+
rule block_point
|
8
|
+
spc? "block" spc* open_block innards:(any_point)* spc* close_block <BlockNode>
|
9
|
+
end
|
10
|
+
|
11
|
+
rule nonblock_point
|
12
|
+
instruction_statement /
|
13
|
+
channel_statement /
|
14
|
+
literal_statement /
|
15
|
+
erc_statement
|
16
|
+
end
|
17
|
+
|
18
|
+
rule instruction_statement
|
19
|
+
spc? "do" spc opcode:alpha_or_underscore spc* <InstructionNode>
|
20
|
+
end
|
21
|
+
|
22
|
+
rule channel_statement
|
23
|
+
spc? "ref" spc chan_name:alpha_or_underscore spc* <ChannelNode>
|
24
|
+
end
|
25
|
+
|
26
|
+
rule literal_statement
|
27
|
+
code_literal_statement / noncode_literal_statement
|
28
|
+
end
|
29
|
+
|
30
|
+
rule noncode_literal_statement
|
31
|
+
spc? "literal" spc where:alpha_or_underscore spc* open_leaf assigned_value:most_anything close_leaf <LiteralNode>
|
32
|
+
end
|
33
|
+
|
34
|
+
rule code_literal_statement
|
35
|
+
spc? "literal" spc where:"code" spc* open_leaf assigned_value:most_anything close_leaf <LiteralNode>
|
36
|
+
end
|
37
|
+
|
38
|
+
rule erc_statement
|
39
|
+
code_literal_statement / noncode_erc_statement
|
40
|
+
end
|
41
|
+
|
42
|
+
rule noncode_erc_statement
|
43
|
+
spc? "sample" spc where:alpha_or_underscore spc* open_leaf assigned_value:most_anything close_leaf <ERCNode>
|
44
|
+
end
|
45
|
+
|
46
|
+
rule code_erc_statement
|
47
|
+
spc? "sample" spc where:"code" spc* open_leaf assigned_value:most_anything close_leaf <ERCNode>
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
rule comma
|
52
|
+
spc? "," spc?
|
53
|
+
end
|
54
|
+
|
55
|
+
rule most_anything
|
56
|
+
(!')' . )*
|
57
|
+
end
|
58
|
+
|
59
|
+
rule alpha_or_underscore
|
60
|
+
[a-zA-Z_] [a-zA-Z0-9_]*
|
61
|
+
end
|
62
|
+
|
63
|
+
rule spc
|
64
|
+
[\s\t\n]+
|
65
|
+
end
|
66
|
+
|
67
|
+
rule open_block
|
68
|
+
"{" spc?
|
69
|
+
end
|
70
|
+
|
71
|
+
rule open_leaf
|
72
|
+
"(" spc?
|
73
|
+
end
|
74
|
+
|
75
|
+
rule close_leaf
|
76
|
+
spc? ")" spc?
|
77
|
+
end
|
78
|
+
|
79
|
+
rule close_block
|
80
|
+
spc? "}" spc?
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
module BlockNode
|
3
|
+
def to_points
|
4
|
+
newBlob = CodeBlock.new(text_value)
|
5
|
+
newBlob.contents = innards.elements.collect {|item| item.to_points}
|
6
|
+
newBlob.listing = newBlob.tidy
|
7
|
+
return newBlob
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module InstructionNode
|
12
|
+
def instruction_name
|
13
|
+
return opcode.text_value
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_points
|
17
|
+
newBlob = InstructionPoint.new(opcode.text_value)
|
18
|
+
return newBlob
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module ChannelNode
|
23
|
+
def channel_name
|
24
|
+
return chan_name.text_value
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_points
|
28
|
+
newBlob = ChannelPoint.new(channel_name)
|
29
|
+
return newBlob
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
module LiteralNode
|
35
|
+
def stack_name
|
36
|
+
return where.text_value
|
37
|
+
end
|
38
|
+
|
39
|
+
def value
|
40
|
+
# this depends on existence of class {stack_name}Literal with #build that returns
|
41
|
+
"#{stack_name.capitalize}Type".constantize.from_s(assigned_value.text_value)
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_points
|
45
|
+
newBlob = LiteralPoint.new(stack_name,value)
|
46
|
+
return newBlob
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
module ERCNode
|
51
|
+
def stack_name
|
52
|
+
return where.text_value
|
53
|
+
end
|
54
|
+
|
55
|
+
def value
|
56
|
+
# this depends on existence of class {stack_name}Erc with #build that returns the value
|
57
|
+
"#{stack_name.capitalize}Type".constantize.from_s(assigned_value.text_value)
|
58
|
+
end
|
59
|
+
|
60
|
+
def to_points
|
61
|
+
newBlob = Erc.new(stack_name,value)
|
62
|
+
return newBlob
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,176 @@
|
|
1
|
+
module Nudge
|
2
|
+
|
3
|
+
# The Interpreter class executes the Push3 language loop:
|
4
|
+
# 1. Pop the top item off the <b>:exec</b> Stack
|
5
|
+
# 2. If it is a(n)...
|
6
|
+
# * ... Instruction, execute its go() method;
|
7
|
+
# * ... Literal or Sample, push its value to the Stack it names;
|
8
|
+
# * ... Reference (Variable or Name), ...
|
9
|
+
# * ... if it's bound to a value, push the bound value onto the <b>:exec</b> Stack;
|
10
|
+
# * ... if it's not bound, push the name itself onto the <b>:name</b> Stack;
|
11
|
+
# * ... CodeBlock, push its #contents (in the same order) back onto the <b>:exec</b> Stack
|
12
|
+
|
13
|
+
class Interpreter
|
14
|
+
attr_accessor :parser, :stepLimit, :steps
|
15
|
+
attr_accessor :stacks, :instructions_library, :variables, :names, :types
|
16
|
+
attr_accessor :last_name, :evaluate_channels
|
17
|
+
|
18
|
+
# A program to be interpreted can be passed in as an optional parameter
|
19
|
+
def initialize(params = {})
|
20
|
+
initialProgram = params[:program] || ""
|
21
|
+
@types = params[:types] || NudgeType.all_types
|
22
|
+
@stepLimit = params[:step_limit] || 3000
|
23
|
+
|
24
|
+
instructions = params[:instructions] || []
|
25
|
+
@instructions_library = Hash.new
|
26
|
+
instructions.each {|i| self.enable(i)}
|
27
|
+
|
28
|
+
# private parts
|
29
|
+
@parser = NudgeLanguageParser.new()
|
30
|
+
@names = Hash.new
|
31
|
+
@variables = Hash.new
|
32
|
+
@steps = 0
|
33
|
+
@last_name = "refAAAAA"
|
34
|
+
@evaluate_channels = true
|
35
|
+
@stacks = Hash.new {|hash, key| hash[key] = Stack.new(key) }
|
36
|
+
|
37
|
+
# set it all up here
|
38
|
+
self.reset(initialProgram)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Resets the Interpreter state:
|
42
|
+
# * clears all the Stacks (including the <b>:exec</b> Stack)
|
43
|
+
# * loads a new program,
|
44
|
+
# * parses the program
|
45
|
+
# * if it parses, pushes it onto the <b>:exec</b> Stack
|
46
|
+
# * (and if it doesn't parse, leaves all stacks empty)
|
47
|
+
# * resets the @step counter.
|
48
|
+
def reset(program="")
|
49
|
+
self.clear_stacks
|
50
|
+
@steps = 0
|
51
|
+
parsed = @parser.parse(program)
|
52
|
+
newCode = parsed.to_points if parsed
|
53
|
+
@stacks[:exec].push(newCode)
|
54
|
+
@evaluate_channels = true
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def clear_stacks
|
59
|
+
@stacks = Hash.new {|hash, key| hash[key] = Stack.new(key) }
|
60
|
+
end
|
61
|
+
|
62
|
+
# Checks to see if either stopping condition applies:
|
63
|
+
# 1. Is the <b>:exec</b> stack empty?
|
64
|
+
# 2. Are the number of steps greater than self.stepLimit?
|
65
|
+
def notDone?
|
66
|
+
@stacks[:exec].depth > 0 && @steps < @stepLimit
|
67
|
+
end
|
68
|
+
|
69
|
+
# Execute one cycle of the Push3 interpreter rule:
|
70
|
+
# 1. check termination conditions with self.notDone()?
|
71
|
+
# 2. pop one item from <b>:exec</b>
|
72
|
+
# 3. call its go() method
|
73
|
+
# 4. increment the step counter self#steps
|
74
|
+
def step
|
75
|
+
if notDone?
|
76
|
+
nextPoint = @stacks[:exec].pop
|
77
|
+
nextPoint.go(self)
|
78
|
+
@steps += 1
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def instructions
|
83
|
+
@instructions_library.keys
|
84
|
+
end
|
85
|
+
|
86
|
+
# invoke self.step() until a termination condition is true
|
87
|
+
def run
|
88
|
+
while notDone?
|
89
|
+
self.step
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def lookup(name)
|
94
|
+
@variables[name] || @names[name]
|
95
|
+
end
|
96
|
+
|
97
|
+
def references
|
98
|
+
@names.merge(@variables).keys
|
99
|
+
end
|
100
|
+
|
101
|
+
def enable(item)
|
102
|
+
if item.superclass == Instruction
|
103
|
+
@instructions_library[item] = item.new(self)
|
104
|
+
elsif item.superclass == NudgeType
|
105
|
+
@types |= [item]
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def active?(item)
|
110
|
+
if item.superclass == Instruction
|
111
|
+
@instructions_library.include?(item)
|
112
|
+
elsif item.superclass == NudgeType
|
113
|
+
@types.include?(item)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
def bind_variable(name, value)
|
119
|
+
raise(ArgumentError, "Variables can only be bound to Literals") unless value.kind_of?(LiteralPoint)
|
120
|
+
@variables[name] = value
|
121
|
+
end
|
122
|
+
|
123
|
+
def bind_name(name, value)
|
124
|
+
raise(ArgumentError, "Names can only be bound to Literals") unless value.kind_of?(LiteralPoint)
|
125
|
+
@names[name] = value
|
126
|
+
end
|
127
|
+
|
128
|
+
def next_name
|
129
|
+
@last_name = @last_name.next
|
130
|
+
end
|
131
|
+
|
132
|
+
|
133
|
+
def unbind_variable(name)
|
134
|
+
@variables.delete(name)
|
135
|
+
end
|
136
|
+
|
137
|
+
def unbind_name(name)
|
138
|
+
@names.delete(name)
|
139
|
+
end
|
140
|
+
|
141
|
+
def reset_variables
|
142
|
+
@variables = Hash.new
|
143
|
+
end
|
144
|
+
|
145
|
+
def reset_names
|
146
|
+
@names = Hash.new
|
147
|
+
end
|
148
|
+
|
149
|
+
def enable_all_instructions
|
150
|
+
Instruction.all_instructions.each do |i|
|
151
|
+
@instructions_library[i] = i.new(self)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def enable_all_types
|
156
|
+
@types = NudgeType.all_types
|
157
|
+
end
|
158
|
+
|
159
|
+
|
160
|
+
def disable(item)
|
161
|
+
if item.superclass == Instruction
|
162
|
+
@instructions_library.delete(item)
|
163
|
+
elsif item.superclass == NudgeType
|
164
|
+
@types.delete(item)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def disable_all_instructions
|
169
|
+
@instructions_library = Hash.new
|
170
|
+
end
|
171
|
+
|
172
|
+
def disable_all_types
|
173
|
+
@types = []
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
@@ -0,0 +1,236 @@
|
|
1
|
+
module Nudge
|
2
|
+
|
3
|
+
class ProgramPoint
|
4
|
+
def points
|
5
|
+
1
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
|
10
|
+
class CodeBlock < ProgramPoint
|
11
|
+
@@parser = NudgeLanguageParser.new
|
12
|
+
|
13
|
+
def initialize(code = "block {}")
|
14
|
+
@listing = code
|
15
|
+
end
|
16
|
+
|
17
|
+
def listing=(rawCode)
|
18
|
+
@listing = rawCode
|
19
|
+
end
|
20
|
+
|
21
|
+
def listing
|
22
|
+
@listing ||= "block {}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def value
|
26
|
+
@listing
|
27
|
+
end
|
28
|
+
|
29
|
+
def contents=(newArray)
|
30
|
+
@contents = newArray
|
31
|
+
end
|
32
|
+
|
33
|
+
def contents
|
34
|
+
@contents ||= self.reparse
|
35
|
+
end
|
36
|
+
|
37
|
+
def reparse
|
38
|
+
clone = @@parser.parse(@listing).to_points
|
39
|
+
@listing = clone.listing
|
40
|
+
return clone.contents
|
41
|
+
end
|
42
|
+
|
43
|
+
def points
|
44
|
+
if @contents
|
45
|
+
@listing.split(/\n/).length
|
46
|
+
else
|
47
|
+
self.reparse
|
48
|
+
@listing.split(/\n/).length
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def go(context)
|
53
|
+
@contents.reverse.each {|item| context.stacks[:exec].push(item)}
|
54
|
+
end
|
55
|
+
|
56
|
+
def tidy(level=1)
|
57
|
+
tt = "block {"
|
58
|
+
indent = level*2
|
59
|
+
@contents.each {|item| tt += ("\n" + (" "*indent) + item.tidy(level+1))}
|
60
|
+
tt += "}"
|
61
|
+
return tt
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
class LiteralPoint < ProgramPoint
|
67
|
+
attr_accessor :type, :value
|
68
|
+
|
69
|
+
def initialize(type,value)
|
70
|
+
@type = type.to_sym
|
71
|
+
@value = value
|
72
|
+
end
|
73
|
+
|
74
|
+
def go(context)
|
75
|
+
context.stacks[self.type].push(self)
|
76
|
+
end
|
77
|
+
|
78
|
+
def tidy(level=1)
|
79
|
+
"literal " + @type.to_s + " (" + @value.to_s + ")"
|
80
|
+
end
|
81
|
+
|
82
|
+
def randomize(context)
|
83
|
+
raise(ArgumentError,"Random code cannot be created") if context.types == [CodeType]
|
84
|
+
newType = context.types.sample
|
85
|
+
@type = newType.to_s.slice(0..-5).downcase
|
86
|
+
if newType != CodeType
|
87
|
+
@value = newType.any_value
|
88
|
+
else
|
89
|
+
@value = newType.any_value(context)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.any(context)
|
94
|
+
tmp = LiteralPoint.new("int", 1)
|
95
|
+
tmp.randomize(context)
|
96
|
+
return tmp
|
97
|
+
end
|
98
|
+
|
99
|
+
def listing
|
100
|
+
self.tidy
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
class Erc < ProgramPoint
|
106
|
+
attr_accessor :type, :value
|
107
|
+
def initialize(type, value)
|
108
|
+
@type = type.to_sym
|
109
|
+
@value = value
|
110
|
+
end
|
111
|
+
|
112
|
+
def to_literal()
|
113
|
+
LiteralPoint.new(@type,@value)
|
114
|
+
end
|
115
|
+
|
116
|
+
def go(context)
|
117
|
+
self.to_literal.go(context)
|
118
|
+
end
|
119
|
+
|
120
|
+
def tidy(level=1)
|
121
|
+
"sample " + @type.to_s + " (" + @value.to_s + ")"
|
122
|
+
end
|
123
|
+
|
124
|
+
def randomize(context)
|
125
|
+
newType = context.types.sample
|
126
|
+
@type = newType.to_s.slice(0..-5).downcase
|
127
|
+
if newType != CodeType
|
128
|
+
@value = newType.any_value
|
129
|
+
else
|
130
|
+
@value = newType.any_value(context)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
def resample
|
135
|
+
@value = "#{@type.to_s.capitalize}Type".constantize.any_value
|
136
|
+
end
|
137
|
+
|
138
|
+
def self.any(context)
|
139
|
+
tmp = Erc.new(context.types[0].to_s.slice(0..-5).downcase,0)
|
140
|
+
tmp.randomize(context)
|
141
|
+
return tmp
|
142
|
+
end
|
143
|
+
|
144
|
+
def listing
|
145
|
+
self.tidy
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
|
150
|
+
class ChannelPoint < ProgramPoint
|
151
|
+
|
152
|
+
def self.any(context)
|
153
|
+
tmp = ChannelPoint.new("e")
|
154
|
+
tmp.randomize(context)
|
155
|
+
return tmp
|
156
|
+
end
|
157
|
+
|
158
|
+
attr_accessor :name
|
159
|
+
alias value name
|
160
|
+
|
161
|
+
def initialize(var_name)
|
162
|
+
@name = var_name
|
163
|
+
end
|
164
|
+
|
165
|
+
def go(context)
|
166
|
+
lookedUp = context.lookup(@name) if context.evaluate_channels
|
167
|
+
if lookedUp
|
168
|
+
context.stacks[:exec].push(lookedUp)
|
169
|
+
else
|
170
|
+
context.stacks[:name].push(self)
|
171
|
+
context.evaluate_channels = true
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def tidy(level=1)
|
176
|
+
"ref " + @name
|
177
|
+
end
|
178
|
+
|
179
|
+
def randomize(context)
|
180
|
+
which = context.references.sample
|
181
|
+
@name = which
|
182
|
+
end
|
183
|
+
|
184
|
+
def listing
|
185
|
+
self.tidy
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
|
190
|
+
class InstructionPoint < ProgramPoint
|
191
|
+
attr_accessor :name, :requirements, :effects
|
192
|
+
def initialize(name)
|
193
|
+
@name = name
|
194
|
+
end
|
195
|
+
|
196
|
+
def className
|
197
|
+
"#{@name.camelize}Instruction"
|
198
|
+
end
|
199
|
+
|
200
|
+
def classLookup
|
201
|
+
self.className.constantize
|
202
|
+
rescue NameError
|
203
|
+
raise InstructionNotFoundError, "#{self.className} not found"
|
204
|
+
end
|
205
|
+
|
206
|
+
def tidy(level=1)
|
207
|
+
"do " + @name
|
208
|
+
end
|
209
|
+
|
210
|
+
class InstructionNotFoundError < NameError
|
211
|
+
end
|
212
|
+
|
213
|
+
def go(context)
|
214
|
+
className = self.classLookup
|
215
|
+
context.instructions_library[className].go
|
216
|
+
rescue InstructionNotFoundError
|
217
|
+
return
|
218
|
+
end
|
219
|
+
|
220
|
+
def randomize(context)
|
221
|
+
instructionName = context.instructions.sample.to_s
|
222
|
+
@name = instructionName.slice(0..-12).underscore
|
223
|
+
end
|
224
|
+
|
225
|
+
def self.any(context)
|
226
|
+
tmp = InstructionPoint.new("int_add")
|
227
|
+
tmp.randomize(context)
|
228
|
+
return tmp
|
229
|
+
end
|
230
|
+
|
231
|
+
def listing
|
232
|
+
self.tidy
|
233
|
+
end
|
234
|
+
end
|
235
|
+
|
236
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Nudge
|
2
|
+
|
3
|
+
# Nudge Stacks are Arrays with some added convenience functions.
|
4
|
+
class Stack
|
5
|
+
delegate :clear, :to => :entries
|
6
|
+
|
7
|
+
attr_accessor :entries
|
8
|
+
attr_reader :name
|
9
|
+
|
10
|
+
# Stack name must be a symbol
|
11
|
+
def initialize(name)
|
12
|
+
raise(ArgumentError,"Stack name must be a Symbol") if !name.kind_of?(Symbol)
|
13
|
+
@name = name
|
14
|
+
@entries = []
|
15
|
+
end
|
16
|
+
|
17
|
+
# Only non-nil objects can be pushed; there is no type checking or validation beyond that.
|
18
|
+
def push(item)
|
19
|
+
@entries.push(item) unless item == nil
|
20
|
+
end
|
21
|
+
|
22
|
+
# Removes the last item pushed to the Stack and returns it
|
23
|
+
def pop
|
24
|
+
return @entries.pop
|
25
|
+
end
|
26
|
+
|
27
|
+
# Reference to the last item pushed to the Stack. Doesn't remove it
|
28
|
+
def peek
|
29
|
+
return @entries.last
|
30
|
+
end
|
31
|
+
|
32
|
+
# Stack#depth returns the number of items
|
33
|
+
def depth
|
34
|
+
@entries.length
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
class CodeType < NudgeType
|
4
|
+
@@defaultPoints = 20
|
5
|
+
|
6
|
+
def self.random_skeleton(points=@@defaultPoints, blocks=points/10)
|
7
|
+
blocks = [0,[points,blocks].min].max
|
8
|
+
|
9
|
+
if points > 1
|
10
|
+
skel = ["block {"]
|
11
|
+
(points-2).times {skel << "*"}
|
12
|
+
skel << "*}"
|
13
|
+
front = 0
|
14
|
+
(blocks-1).times do
|
15
|
+
until skel[front].include?("*") do
|
16
|
+
a,b = rand(points), rand(points)
|
17
|
+
front,back = [a,b].min, [a,b].max
|
18
|
+
end
|
19
|
+
skel[front] = skel[front].sub(/\*/," block {")
|
20
|
+
skel[back] = skel[back] + "}"
|
21
|
+
end
|
22
|
+
skel = skel.join
|
23
|
+
else
|
24
|
+
if blocks>0
|
25
|
+
skel = "block {}"
|
26
|
+
else
|
27
|
+
skel = "*"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
return skel
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
def self.any_type(types)
|
35
|
+
raise(ArgumentError,"no available NudgeTypes") if types.empty?
|
36
|
+
return types.sample
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
def self.any_instruction(instructions)
|
41
|
+
raise(ArgumentError,"no available Instructions") if instructions.empty?
|
42
|
+
return instructions.sample
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
def self.any_reference(references)
|
47
|
+
raise(ArgumentError,"no available references") if references.empty?
|
48
|
+
return references.sample
|
49
|
+
end
|
50
|
+
|
51
|
+
|
52
|
+
def self.roulette_wheel(references, instructions, types)
|
53
|
+
basis = Hash["reference", references.length,
|
54
|
+
"instruction", instructions.length,
|
55
|
+
"sample", types.length]
|
56
|
+
sum = basis.values.inject(:+)
|
57
|
+
spin = rand(sum)
|
58
|
+
basis.each do |result,weight|
|
59
|
+
return result if spin <= weight && weight > 0
|
60
|
+
spin -= weight
|
61
|
+
end
|
62
|
+
raise "A problem occurred when executing CodeType#roulette_wheel"
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
def self.random_value(context, params = {})
|
67
|
+
points = params[:points] || @@defaultPoints
|
68
|
+
blocks = params[:blocks] || points/10
|
69
|
+
skeleton = params[:skeleton] || self.random_skeleton(points, blocks)
|
70
|
+
instructions = params[:instructions] || context.instructions
|
71
|
+
references = params[:references] || context.references
|
72
|
+
types = params[:types] || context.types
|
73
|
+
|
74
|
+
while skeleton.include?("*") do
|
75
|
+
case self.roulette_wheel(references,instructions,types)
|
76
|
+
when "instruction"
|
77
|
+
newPoint = " do " + self.any_instruction(instructions).to_nudgecode
|
78
|
+
when "reference"
|
79
|
+
newPoint = " ref " + self.any_reference(references)
|
80
|
+
when "sample"
|
81
|
+
theType = any_type(types)
|
82
|
+
if theType == CodeType
|
83
|
+
if types != [CodeType]
|
84
|
+
theType = self.any_type(types - [CodeType])
|
85
|
+
else
|
86
|
+
raise ArgumentError, "Random code cannot be created"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
newPoint = " sample " + theType.to_nudgecode + " (" + theType.any_value.to_s + ")"
|
90
|
+
else
|
91
|
+
raise ArgumentError, "Nothing to make random code from"
|
92
|
+
end
|
93
|
+
skeleton = skeleton.sub(/\*/, newPoint)
|
94
|
+
skeleton = skeleton.sub(/\n/,'')
|
95
|
+
end
|
96
|
+
skeleton
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
|
101
|
+
def self.from_s(string_value)
|
102
|
+
return string_value.sub(/\(/,"«").sub(/\)/,"»")
|
103
|
+
end
|
104
|
+
|
105
|
+
def self.any_value(context)
|
106
|
+
self.random_value(context)
|
107
|
+
end
|
108
|
+
end
|