nudge 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. data/.gitignore +5 -0
  2. data/LICENSE.txt +21 -0
  3. data/Rakefile +23 -0
  4. data/VERSION +1 -0
  5. data/_spikes/couch_document_spike.rb +24 -0
  6. data/_spikes/nested_parsing/nested.rb +0 -0
  7. data/_spikes/nested_parsing/nested.treetop +6 -0
  8. data/_spikes/nudgeview/init.rb +19 -0
  9. data/_spikes/nudgeview/public/javascripts/app.js +12 -0
  10. data/_spikes/nudgeview/public/javascripts/jquery.js +4376 -0
  11. data/_spikes/nudgeview/public/javascripts/jquery.svg.js +1325 -0
  12. data/_spikes/nudgeview/views/index.erb +18 -0
  13. data/_spikes/nudgeview/views/index.haml +8 -0
  14. data/_spikes/simplestWeb/simplest.rb +44 -0
  15. data/_spikes/simplestWeb/views/main.erb +19 -0
  16. data/_spikes/sketches/nudgecode_spike.rb +146 -0
  17. data/_spikes/sketches/searchDSL_spike.rb +25 -0
  18. data/_spikes/sketches/search_operator_sketch_spike.txt +287 -0
  19. data/_spikes/sketches/searchspace_spike.rb +96 -0
  20. data/_spikes/symbolic_regression/activate.rb +35 -0
  21. data/_spikes/symbolic_regression/config/environment.rb +340 -0
  22. data/_spikes/symbolic_regression/config/environments/deployment.rb +0 -0
  23. data/_spikes/symbolic_regression/config/environments/development.rb +0 -0
  24. data/_spikes/symbolic_regression/experiment/objectives/programLength.rb +2 -0
  25. data/_spikes/symbolic_regression/experiment/objectives/summedSquaredError.rb +2 -0
  26. data/_spikes/symbolic_regression/lib/tasks/run.rake +0 -0
  27. data/doc/classes/BlockNode.html +146 -0
  28. data/doc/classes/BlockNode.src/M000246.html +18 -0
  29. data/doc/classes/BoolAndInstruction.html +218 -0
  30. data/doc/classes/BoolAndInstruction.src/M000003.html +15 -0
  31. data/doc/classes/BoolAndInstruction.src/M000004.html +16 -0
  32. data/doc/classes/BoolAndInstruction.src/M000005.html +15 -0
  33. data/doc/classes/BoolAndInstruction.src/M000006.html +15 -0
  34. data/doc/classes/BoolEqualQInstruction.html +218 -0
  35. data/doc/classes/BoolEqualQInstruction.src/M000015.html +15 -0
  36. data/doc/classes/BoolEqualQInstruction.src/M000016.html +16 -0
  37. data/doc/classes/BoolEqualQInstruction.src/M000017.html +15 -0
  38. data/doc/classes/BoolEqualQInstruction.src/M000018.html +15 -0
  39. data/doc/classes/BoolFromFloatInstruction.html +218 -0
  40. data/doc/classes/BoolFromFloatInstruction.src/M000071.html +15 -0
  41. data/doc/classes/BoolFromFloatInstruction.src/M000072.html +15 -0
  42. data/doc/classes/BoolFromFloatInstruction.src/M000073.html +15 -0
  43. data/doc/classes/BoolFromFloatInstruction.src/M000074.html +15 -0
  44. data/doc/classes/BoolFromIntInstruction.html +218 -0
  45. data/doc/classes/BoolFromIntInstruction.src/M000067.html +15 -0
  46. data/doc/classes/BoolFromIntInstruction.src/M000068.html +15 -0
  47. data/doc/classes/BoolFromIntInstruction.src/M000069.html +15 -0
  48. data/doc/classes/BoolFromIntInstruction.src/M000070.html +15 -0
  49. data/doc/classes/BoolNotInstruction.html +218 -0
  50. data/doc/classes/BoolNotInstruction.src/M000019.html +15 -0
  51. data/doc/classes/BoolNotInstruction.src/M000020.html +15 -0
  52. data/doc/classes/BoolNotInstruction.src/M000021.html +15 -0
  53. data/doc/classes/BoolNotInstruction.src/M000022.html +15 -0
  54. data/doc/classes/BoolOrInstruction.html +218 -0
  55. data/doc/classes/BoolOrInstruction.src/M000007.html +15 -0
  56. data/doc/classes/BoolOrInstruction.src/M000008.html +16 -0
  57. data/doc/classes/BoolOrInstruction.src/M000009.html +15 -0
  58. data/doc/classes/BoolOrInstruction.src/M000010.html +15 -0
  59. data/doc/classes/BoolRandomInstruction.html +218 -0
  60. data/doc/classes/BoolRandomInstruction.src/M000187.html +15 -0
  61. data/doc/classes/BoolRandomInstruction.src/M000188.html +14 -0
  62. data/doc/classes/BoolRandomInstruction.src/M000189.html +15 -0
  63. data/doc/classes/BoolRandomInstruction.src/M000190.html +15 -0
  64. data/doc/classes/BoolType.html +196 -0
  65. data/doc/classes/BoolType.src/M000240.html +16 -0
  66. data/doc/classes/BoolType.src/M000241.html +15 -0
  67. data/doc/classes/BoolType.src/M000242.html +15 -0
  68. data/doc/classes/BoolXorInstruction.html +218 -0
  69. data/doc/classes/BoolXorInstruction.src/M000011.html +15 -0
  70. data/doc/classes/BoolXorInstruction.src/M000012.html +16 -0
  71. data/doc/classes/BoolXorInstruction.src/M000013.html +15 -0
  72. data/doc/classes/BoolXorInstruction.src/M000014.html +15 -0
  73. data/doc/classes/ChannelNode.html +161 -0
  74. data/doc/classes/ChannelNode.src/M000249.html +15 -0
  75. data/doc/classes/ChannelNode.src/M000250.html +16 -0
  76. data/doc/classes/CodeType.html +269 -0
  77. data/doc/classes/CodeType.src/M000219.html +38 -0
  78. data/doc/classes/CodeType.src/M000220.html +16 -0
  79. data/doc/classes/CodeType.src/M000221.html +16 -0
  80. data/doc/classes/CodeType.src/M000222.html +16 -0
  81. data/doc/classes/CodeType.src/M000223.html +24 -0
  82. data/doc/classes/CodeType.src/M000224.html +42 -0
  83. data/doc/classes/ERCNode.html +183 -0
  84. data/doc/classes/ERCNode.src/M000254.html +15 -0
  85. data/doc/classes/ERCNode.src/M000255.html +16 -0
  86. data/doc/classes/ERCNode.src/M000256.html +16 -0
  87. data/doc/classes/ExecPopInstruction.html +218 -0
  88. data/doc/classes/ExecPopInstruction.src/M000075.html +15 -0
  89. data/doc/classes/ExecPopInstruction.src/M000076.html +14 -0
  90. data/doc/classes/ExecPopInstruction.src/M000077.html +15 -0
  91. data/doc/classes/ExecPopInstruction.src/M000078.html +14 -0
  92. data/doc/classes/FloatAbsInstruction.html +218 -0
  93. data/doc/classes/FloatAbsInstruction.src/M000107.html +15 -0
  94. data/doc/classes/FloatAbsInstruction.src/M000108.html +15 -0
  95. data/doc/classes/FloatAbsInstruction.src/M000109.html +15 -0
  96. data/doc/classes/FloatAbsInstruction.src/M000110.html +15 -0
  97. data/doc/classes/FloatAddInstruction.html +218 -0
  98. data/doc/classes/FloatAddInstruction.src/M000079.html +15 -0
  99. data/doc/classes/FloatAddInstruction.src/M000080.html +16 -0
  100. data/doc/classes/FloatAddInstruction.src/M000081.html +15 -0
  101. data/doc/classes/FloatAddInstruction.src/M000082.html +15 -0
  102. data/doc/classes/FloatCosineInstruction.html +218 -0
  103. data/doc/classes/FloatCosineInstruction.src/M000123.html +15 -0
  104. data/doc/classes/FloatCosineInstruction.src/M000124.html +15 -0
  105. data/doc/classes/FloatCosineInstruction.src/M000125.html +15 -0
  106. data/doc/classes/FloatCosineInstruction.src/M000126.html +15 -0
  107. data/doc/classes/FloatDivideInstruction.html +218 -0
  108. data/doc/classes/FloatDivideInstruction.src/M000091.html +15 -0
  109. data/doc/classes/FloatDivideInstruction.src/M000092.html +16 -0
  110. data/doc/classes/FloatDivideInstruction.src/M000093.html +20 -0
  111. data/doc/classes/FloatDivideInstruction.src/M000094.html +15 -0
  112. data/doc/classes/FloatFromBoolInstruction.html +218 -0
  113. data/doc/classes/FloatFromBoolInstruction.src/M000055.html +15 -0
  114. data/doc/classes/FloatFromBoolInstruction.src/M000056.html +15 -0
  115. data/doc/classes/FloatFromBoolInstruction.src/M000057.html +15 -0
  116. data/doc/classes/FloatFromBoolInstruction.src/M000058.html +15 -0
  117. data/doc/classes/FloatFromIntInstruction.html +218 -0
  118. data/doc/classes/FloatFromIntInstruction.src/M000063.html +15 -0
  119. data/doc/classes/FloatFromIntInstruction.src/M000064.html +15 -0
  120. data/doc/classes/FloatFromIntInstruction.src/M000065.html +15 -0
  121. data/doc/classes/FloatFromIntInstruction.src/M000066.html +15 -0
  122. data/doc/classes/FloatGreaterThanQInstruction.html +218 -0
  123. data/doc/classes/FloatGreaterThanQInstruction.src/M000035.html +15 -0
  124. data/doc/classes/FloatGreaterThanQInstruction.src/M000036.html +16 -0
  125. data/doc/classes/FloatGreaterThanQInstruction.src/M000037.html +15 -0
  126. data/doc/classes/FloatGreaterThanQInstruction.src/M000038.html +15 -0
  127. data/doc/classes/FloatIfInstruction.html +218 -0
  128. data/doc/classes/FloatIfInstruction.src/M000047.html +16 -0
  129. data/doc/classes/FloatIfInstruction.src/M000048.html +15 -0
  130. data/doc/classes/FloatIfInstruction.src/M000049.html +14 -0
  131. data/doc/classes/FloatIfInstruction.src/M000050.html +17 -0
  132. data/doc/classes/FloatLessThanQInstruction.html +218 -0
  133. data/doc/classes/FloatLessThanQInstruction.src/M000039.html +15 -0
  134. data/doc/classes/FloatLessThanQInstruction.src/M000040.html +16 -0
  135. data/doc/classes/FloatLessThanQInstruction.src/M000041.html +15 -0
  136. data/doc/classes/FloatLessThanQInstruction.src/M000042.html +15 -0
  137. data/doc/classes/FloatMaxInstruction.html +218 -0
  138. data/doc/classes/FloatMaxInstruction.src/M000095.html +15 -0
  139. data/doc/classes/FloatMaxInstruction.src/M000096.html +16 -0
  140. data/doc/classes/FloatMaxInstruction.src/M000097.html +15 -0
  141. data/doc/classes/FloatMaxInstruction.src/M000098.html +15 -0
  142. data/doc/classes/FloatMinInstruction.html +218 -0
  143. data/doc/classes/FloatMinInstruction.src/M000099.html +15 -0
  144. data/doc/classes/FloatMinInstruction.src/M000100.html +16 -0
  145. data/doc/classes/FloatMinInstruction.src/M000101.html +15 -0
  146. data/doc/classes/FloatMinInstruction.src/M000102.html +15 -0
  147. data/doc/classes/FloatMultiplyInstruction.html +218 -0
  148. data/doc/classes/FloatMultiplyInstruction.src/M000083.html +15 -0
  149. data/doc/classes/FloatMultiplyInstruction.src/M000084.html +16 -0
  150. data/doc/classes/FloatMultiplyInstruction.src/M000085.html +15 -0
  151. data/doc/classes/FloatMultiplyInstruction.src/M000086.html +15 -0
  152. data/doc/classes/FloatNegativeInstruction.html +218 -0
  153. data/doc/classes/FloatNegativeInstruction.src/M000103.html +15 -0
  154. data/doc/classes/FloatNegativeInstruction.src/M000104.html +15 -0
  155. data/doc/classes/FloatNegativeInstruction.src/M000105.html +15 -0
  156. data/doc/classes/FloatNegativeInstruction.src/M000106.html +15 -0
  157. data/doc/classes/FloatPowerInstruction.html +218 -0
  158. data/doc/classes/FloatPowerInstruction.src/M000111.html +15 -0
  159. data/doc/classes/FloatPowerInstruction.src/M000112.html +16 -0
  160. data/doc/classes/FloatPowerInstruction.src/M000113.html +20 -0
  161. data/doc/classes/FloatPowerInstruction.src/M000114.html +15 -0
  162. data/doc/classes/FloatRandomInstruction.html +218 -0
  163. data/doc/classes/FloatRandomInstruction.src/M000191.html +15 -0
  164. data/doc/classes/FloatRandomInstruction.src/M000192.html +14 -0
  165. data/doc/classes/FloatRandomInstruction.src/M000193.html +15 -0
  166. data/doc/classes/FloatRandomInstruction.src/M000194.html +15 -0
  167. data/doc/classes/FloatSineInstruction.html +218 -0
  168. data/doc/classes/FloatSineInstruction.src/M000119.html +15 -0
  169. data/doc/classes/FloatSineInstruction.src/M000120.html +15 -0
  170. data/doc/classes/FloatSineInstruction.src/M000121.html +15 -0
  171. data/doc/classes/FloatSineInstruction.src/M000122.html +15 -0
  172. data/doc/classes/FloatSqrtInstruction.html +218 -0
  173. data/doc/classes/FloatSqrtInstruction.src/M000115.html +15 -0
  174. data/doc/classes/FloatSqrtInstruction.src/M000116.html +15 -0
  175. data/doc/classes/FloatSqrtInstruction.src/M000117.html +19 -0
  176. data/doc/classes/FloatSqrtInstruction.src/M000118.html +15 -0
  177. data/doc/classes/FloatSubtractInstruction.html +218 -0
  178. data/doc/classes/FloatSubtractInstruction.src/M000087.html +15 -0
  179. data/doc/classes/FloatSubtractInstruction.src/M000088.html +16 -0
  180. data/doc/classes/FloatSubtractInstruction.src/M000089.html +15 -0
  181. data/doc/classes/FloatSubtractInstruction.src/M000090.html +15 -0
  182. data/doc/classes/FloatTangentInstruction.html +218 -0
  183. data/doc/classes/FloatTangentInstruction.src/M000127.html +15 -0
  184. data/doc/classes/FloatTangentInstruction.src/M000128.html +15 -0
  185. data/doc/classes/FloatTangentInstruction.src/M000129.html +15 -0
  186. data/doc/classes/FloatTangentInstruction.src/M000130.html +15 -0
  187. data/doc/classes/FloatType.html +196 -0
  188. data/doc/classes/FloatType.src/M000243.html +19 -0
  189. data/doc/classes/FloatType.src/M000244.html +15 -0
  190. data/doc/classes/FloatType.src/M000245.html +15 -0
  191. data/doc/classes/Helpers.html +161 -0
  192. data/doc/classes/Helpers.src/M000343.html +21 -0
  193. data/doc/classes/Helpers.src/M000344.html +24 -0
  194. data/doc/classes/Instruction/InstructionMethodError.html +110 -0
  195. data/doc/classes/Instruction/NaNResultError.html +110 -0
  196. data/doc/classes/Instruction/NotEnoughStackItems.html +110 -0
  197. data/doc/classes/Instruction.html +500 -0
  198. data/doc/classes/Instruction.src/M000131.html +17 -0
  199. data/doc/classes/Instruction.src/M000132.html +15 -0
  200. data/doc/classes/Instruction.src/M000133.html +15 -0
  201. data/doc/classes/Instruction.src/M000134.html +15 -0
  202. data/doc/classes/Instruction.src/M000135.html +15 -0
  203. data/doc/classes/Instruction.src/M000136.html +15 -0
  204. data/doc/classes/Instruction.src/M000137.html +15 -0
  205. data/doc/classes/Instruction.src/M000138.html +15 -0
  206. data/doc/classes/Instruction.src/M000139.html +22 -0
  207. data/doc/classes/Instruction.src/M000140.html +15 -0
  208. data/doc/classes/Instruction.src/M000141.html +25 -0
  209. data/doc/classes/Instruction.src/M000142.html +15 -0
  210. data/doc/classes/Instruction.src/M000143.html +15 -0
  211. data/doc/classes/Instruction.src/M000144.html +15 -0
  212. data/doc/classes/Instruction.src/M000145.html +15 -0
  213. data/doc/classes/Instruction.src/M000146.html +15 -0
  214. data/doc/classes/InstructionNode.html +161 -0
  215. data/doc/classes/InstructionNode.src/M000247.html +15 -0
  216. data/doc/classes/InstructionNode.src/M000248.html +16 -0
  217. data/doc/classes/IntAbsInstruction.html +218 -0
  218. data/doc/classes/IntAbsInstruction.src/M000175.html +15 -0
  219. data/doc/classes/IntAbsInstruction.src/M000176.html +15 -0
  220. data/doc/classes/IntAbsInstruction.src/M000177.html +15 -0
  221. data/doc/classes/IntAbsInstruction.src/M000178.html +15 -0
  222. data/doc/classes/IntAddInstruction.html +218 -0
  223. data/doc/classes/IntAddInstruction.src/M000147.html +15 -0
  224. data/doc/classes/IntAddInstruction.src/M000148.html +16 -0
  225. data/doc/classes/IntAddInstruction.src/M000149.html +15 -0
  226. data/doc/classes/IntAddInstruction.src/M000150.html +15 -0
  227. data/doc/classes/IntDepthInstruction.html +218 -0
  228. data/doc/classes/IntDepthInstruction.src/M000211.html +15 -0
  229. data/doc/classes/IntDepthInstruction.src/M000212.html +14 -0
  230. data/doc/classes/IntDepthInstruction.src/M000213.html +15 -0
  231. data/doc/classes/IntDepthInstruction.src/M000214.html +15 -0
  232. data/doc/classes/IntDivideInstruction.html +218 -0
  233. data/doc/classes/IntDivideInstruction.src/M000155.html +15 -0
  234. data/doc/classes/IntDivideInstruction.src/M000156.html +16 -0
  235. data/doc/classes/IntDivideInstruction.src/M000157.html +20 -0
  236. data/doc/classes/IntDivideInstruction.src/M000158.html +15 -0
  237. data/doc/classes/IntDuplicateInstruction.html +218 -0
  238. data/doc/classes/IntDuplicateInstruction.src/M000203.html +15 -0
  239. data/doc/classes/IntDuplicateInstruction.src/M000204.html +15 -0
  240. data/doc/classes/IntDuplicateInstruction.src/M000205.html +15 -0
  241. data/doc/classes/IntDuplicateInstruction.src/M000206.html +15 -0
  242. data/doc/classes/IntEqualQInstruction.html +218 -0
  243. data/doc/classes/IntEqualQInstruction.src/M000023.html +15 -0
  244. data/doc/classes/IntEqualQInstruction.src/M000024.html +16 -0
  245. data/doc/classes/IntEqualQInstruction.src/M000025.html +15 -0
  246. data/doc/classes/IntEqualQInstruction.src/M000026.html +15 -0
  247. data/doc/classes/IntFlushInstruction.html +218 -0
  248. data/doc/classes/IntFlushInstruction.src/M000215.html +15 -0
  249. data/doc/classes/IntFlushInstruction.src/M000216.html +14 -0
  250. data/doc/classes/IntFlushInstruction.src/M000217.html +14 -0
  251. data/doc/classes/IntFlushInstruction.src/M000218.html +15 -0
  252. data/doc/classes/IntFromBoolInstruction.html +218 -0
  253. data/doc/classes/IntFromBoolInstruction.src/M000051.html +15 -0
  254. data/doc/classes/IntFromBoolInstruction.src/M000052.html +15 -0
  255. data/doc/classes/IntFromBoolInstruction.src/M000053.html +15 -0
  256. data/doc/classes/IntFromBoolInstruction.src/M000054.html +15 -0
  257. data/doc/classes/IntFromFloatInstruction.html +218 -0
  258. data/doc/classes/IntFromFloatInstruction.src/M000059.html +15 -0
  259. data/doc/classes/IntFromFloatInstruction.src/M000060.html +15 -0
  260. data/doc/classes/IntFromFloatInstruction.src/M000061.html +15 -0
  261. data/doc/classes/IntFromFloatInstruction.src/M000062.html +15 -0
  262. data/doc/classes/IntGreaterThanQInstruction.html +218 -0
  263. data/doc/classes/IntGreaterThanQInstruction.src/M000031.html +15 -0
  264. data/doc/classes/IntGreaterThanQInstruction.src/M000032.html +16 -0
  265. data/doc/classes/IntGreaterThanQInstruction.src/M000033.html +15 -0
  266. data/doc/classes/IntGreaterThanQInstruction.src/M000034.html +15 -0
  267. data/doc/classes/IntIfInstruction.html +218 -0
  268. data/doc/classes/IntIfInstruction.src/M000043.html +16 -0
  269. data/doc/classes/IntIfInstruction.src/M000044.html +15 -0
  270. data/doc/classes/IntIfInstruction.src/M000045.html +14 -0
  271. data/doc/classes/IntIfInstruction.src/M000046.html +17 -0
  272. data/doc/classes/IntLessThanQInstruction.html +218 -0
  273. data/doc/classes/IntLessThanQInstruction.src/M000027.html +15 -0
  274. data/doc/classes/IntLessThanQInstruction.src/M000028.html +16 -0
  275. data/doc/classes/IntLessThanQInstruction.src/M000029.html +15 -0
  276. data/doc/classes/IntLessThanQInstruction.src/M000030.html +15 -0
  277. data/doc/classes/IntMaxInstruction.html +218 -0
  278. data/doc/classes/IntMaxInstruction.src/M000167.html +15 -0
  279. data/doc/classes/IntMaxInstruction.src/M000168.html +16 -0
  280. data/doc/classes/IntMaxInstruction.src/M000169.html +16 -0
  281. data/doc/classes/IntMaxInstruction.src/M000170.html +15 -0
  282. data/doc/classes/IntMinInstruction.html +218 -0
  283. data/doc/classes/IntMinInstruction.src/M000171.html +15 -0
  284. data/doc/classes/IntMinInstruction.src/M000172.html +16 -0
  285. data/doc/classes/IntMinInstruction.src/M000173.html +16 -0
  286. data/doc/classes/IntMinInstruction.src/M000174.html +15 -0
  287. data/doc/classes/IntModuloInstruction.html +218 -0
  288. data/doc/classes/IntModuloInstruction.src/M000163.html +15 -0
  289. data/doc/classes/IntModuloInstruction.src/M000164.html +16 -0
  290. data/doc/classes/IntModuloInstruction.src/M000165.html +20 -0
  291. data/doc/classes/IntModuloInstruction.src/M000166.html +15 -0
  292. data/doc/classes/IntMultiplyInstruction.html +218 -0
  293. data/doc/classes/IntMultiplyInstruction.src/M000151.html +15 -0
  294. data/doc/classes/IntMultiplyInstruction.src/M000152.html +16 -0
  295. data/doc/classes/IntMultiplyInstruction.src/M000153.html +15 -0
  296. data/doc/classes/IntMultiplyInstruction.src/M000154.html +15 -0
  297. data/doc/classes/IntNegativeInstruction.html +218 -0
  298. data/doc/classes/IntNegativeInstruction.src/M000179.html +15 -0
  299. data/doc/classes/IntNegativeInstruction.src/M000180.html +15 -0
  300. data/doc/classes/IntNegativeInstruction.src/M000181.html +15 -0
  301. data/doc/classes/IntNegativeInstruction.src/M000182.html +15 -0
  302. data/doc/classes/IntPopInstruction.html +218 -0
  303. data/doc/classes/IntPopInstruction.src/M000195.html +15 -0
  304. data/doc/classes/IntPopInstruction.src/M000196.html +15 -0
  305. data/doc/classes/IntPopInstruction.src/M000197.html +14 -0
  306. data/doc/classes/IntPopInstruction.src/M000198.html +14 -0
  307. data/doc/classes/IntRandomInstruction.html +218 -0
  308. data/doc/classes/IntRandomInstruction.src/M000183.html +15 -0
  309. data/doc/classes/IntRandomInstruction.src/M000184.html +14 -0
  310. data/doc/classes/IntRandomInstruction.src/M000185.html +15 -0
  311. data/doc/classes/IntRandomInstruction.src/M000186.html +15 -0
  312. data/doc/classes/IntRotateInstruction.html +218 -0
  313. data/doc/classes/IntRotateInstruction.src/M000207.html +15 -0
  314. data/doc/classes/IntRotateInstruction.src/M000208.html +17 -0
  315. data/doc/classes/IntRotateInstruction.src/M000209.html +14 -0
  316. data/doc/classes/IntRotateInstruction.src/M000210.html +17 -0
  317. data/doc/classes/IntSubtractInstruction.html +218 -0
  318. data/doc/classes/IntSubtractInstruction.src/M000159.html +15 -0
  319. data/doc/classes/IntSubtractInstruction.src/M000160.html +16 -0
  320. data/doc/classes/IntSubtractInstruction.src/M000161.html +16 -0
  321. data/doc/classes/IntSubtractInstruction.src/M000162.html +15 -0
  322. data/doc/classes/IntSwapInstruction.html +218 -0
  323. data/doc/classes/IntSwapInstruction.src/M000199.html +15 -0
  324. data/doc/classes/IntSwapInstruction.src/M000200.html +16 -0
  325. data/doc/classes/IntSwapInstruction.src/M000201.html +14 -0
  326. data/doc/classes/IntSwapInstruction.src/M000202.html +16 -0
  327. data/doc/classes/IntType.html +240 -0
  328. data/doc/classes/IntType.src/M000235.html +15 -0
  329. data/doc/classes/IntType.src/M000236.html +15 -0
  330. data/doc/classes/IntType.src/M000237.html +18 -0
  331. data/doc/classes/IntType.src/M000238.html +15 -0
  332. data/doc/classes/IntType.src/M000239.html +15 -0
  333. data/doc/classes/LiteralNode.html +183 -0
  334. data/doc/classes/LiteralNode.src/M000251.html +15 -0
  335. data/doc/classes/LiteralNode.src/M000252.html +16 -0
  336. data/doc/classes/LiteralNode.src/M000253.html +16 -0
  337. data/doc/classes/Nudge/Channel.html +437 -0
  338. data/doc/classes/Nudge/Channel.src/M000286.html +15 -0
  339. data/doc/classes/Nudge/Channel.src/M000287.html +19 -0
  340. data/doc/classes/Nudge/Channel.src/M000288.html +15 -0
  341. data/doc/classes/Nudge/Channel.src/M000289.html +15 -0
  342. data/doc/classes/Nudge/Channel.src/M000290.html +15 -0
  343. data/doc/classes/Nudge/Channel.src/M000291.html +19 -0
  344. data/doc/classes/Nudge/Channel.src/M000292.html +19 -0
  345. data/doc/classes/Nudge/Channel.src/M000293.html +17 -0
  346. data/doc/classes/Nudge/Channel.src/M000294.html +15 -0
  347. data/doc/classes/Nudge/Channel.src/M000295.html +20 -0
  348. data/doc/classes/Nudge/Channel.src/M000296.html +15 -0
  349. data/doc/classes/Nudge/Channel.src/M000297.html +17 -0
  350. data/doc/classes/Nudge/Channel.src/M000298.html +15 -0
  351. data/doc/classes/Nudge/CodeBlock.html +331 -0
  352. data/doc/classes/Nudge/CodeBlock.src/M000263.html +15 -0
  353. data/doc/classes/Nudge/CodeBlock.src/M000264.html +15 -0
  354. data/doc/classes/Nudge/CodeBlock.src/M000265.html +15 -0
  355. data/doc/classes/Nudge/CodeBlock.src/M000266.html +15 -0
  356. data/doc/classes/Nudge/CodeBlock.src/M000267.html +15 -0
  357. data/doc/classes/Nudge/CodeBlock.src/M000268.html +17 -0
  358. data/doc/classes/Nudge/CodeBlock.src/M000269.html +20 -0
  359. data/doc/classes/Nudge/CodeBlock.src/M000270.html +15 -0
  360. data/doc/classes/Nudge/CodeBlock.src/M000271.html +19 -0
  361. data/doc/classes/Nudge/DeadLocation.html +152 -0
  362. data/doc/classes/Nudge/DeadLocation.src/M000334.html +17 -0
  363. data/doc/classes/Nudge/Erc.html +335 -0
  364. data/doc/classes/Nudge/Erc.src/M000278.html +16 -0
  365. data/doc/classes/Nudge/Erc.src/M000279.html +15 -0
  366. data/doc/classes/Nudge/Erc.src/M000280.html +15 -0
  367. data/doc/classes/Nudge/Erc.src/M000281.html +15 -0
  368. data/doc/classes/Nudge/Erc.src/M000282.html +18 -0
  369. data/doc/classes/Nudge/Erc.src/M000283.html +15 -0
  370. data/doc/classes/Nudge/Erc.src/M000284.html +17 -0
  371. data/doc/classes/Nudge/Erc.src/M000285.html +15 -0
  372. data/doc/classes/Nudge/Individual.html +313 -0
  373. data/doc/classes/Nudge/Individual.src/M000314.html +21 -0
  374. data/doc/classes/Nudge/Individual.src/M000315.html +15 -0
  375. data/doc/classes/Nudge/Individual.src/M000316.html +15 -0
  376. data/doc/classes/Nudge/Individual.src/M000317.html +17 -0
  377. data/doc/classes/Nudge/Individual.src/M000318.html +25 -0
  378. data/doc/classes/Nudge/InstructionPoint/InstructionNotFoundError.html +110 -0
  379. data/doc/classes/Nudge/InstructionPoint.html +350 -0
  380. data/doc/classes/Nudge/InstructionPoint.src/M000299.html +15 -0
  381. data/doc/classes/Nudge/InstructionPoint.src/M000300.html +15 -0
  382. data/doc/classes/Nudge/InstructionPoint.src/M000301.html +17 -0
  383. data/doc/classes/Nudge/InstructionPoint.src/M000302.html +15 -0
  384. data/doc/classes/Nudge/InstructionPoint.src/M000303.html +17 -0
  385. data/doc/classes/Nudge/InstructionPoint.src/M000304.html +17 -0
  386. data/doc/classes/Nudge/InstructionPoint.src/M000305.html +17 -0
  387. data/doc/classes/Nudge/InstructionPoint.src/M000306.html +15 -0
  388. data/doc/classes/Nudge/Interpreter.html +369 -0
  389. data/doc/classes/Nudge/Interpreter.src/M000257.html +20 -0
  390. data/doc/classes/Nudge/Interpreter.src/M000258.html +19 -0
  391. data/doc/classes/Nudge/Interpreter.src/M000259.html +15 -0
  392. data/doc/classes/Nudge/Interpreter.src/M000260.html +19 -0
  393. data/doc/classes/Nudge/Interpreter.src/M000261.html +17 -0
  394. data/doc/classes/Nudge/LiteralPoint.html +291 -0
  395. data/doc/classes/Nudge/LiteralPoint.src/M000272.html +16 -0
  396. data/doc/classes/Nudge/LiteralPoint.src/M000273.html +15 -0
  397. data/doc/classes/Nudge/LiteralPoint.src/M000274.html +15 -0
  398. data/doc/classes/Nudge/LiteralPoint.src/M000275.html +18 -0
  399. data/doc/classes/Nudge/LiteralPoint.src/M000276.html +17 -0
  400. data/doc/classes/Nudge/LiteralPoint.src/M000277.html +15 -0
  401. data/doc/classes/Nudge/Location.html +525 -0
  402. data/doc/classes/Nudge/Location.src/M000319.html +19 -0
  403. data/doc/classes/Nudge/Location.src/M000320.html +15 -0
  404. data/doc/classes/Nudge/Location.src/M000321.html +26 -0
  405. data/doc/classes/Nudge/Location.src/M000322.html +15 -0
  406. data/doc/classes/Nudge/Location.src/M000323.html +20 -0
  407. data/doc/classes/Nudge/Location.src/M000324.html +16 -0
  408. data/doc/classes/Nudge/Location.src/M000325.html +25 -0
  409. data/doc/classes/Nudge/Location.src/M000326.html +15 -0
  410. data/doc/classes/Nudge/Location.src/M000327.html +21 -0
  411. data/doc/classes/Nudge/Location.src/M000328.html +16 -0
  412. data/doc/classes/Nudge/Location.src/M000329.html +15 -0
  413. data/doc/classes/Nudge/Location.src/M000330.html +16 -0
  414. data/doc/classes/Nudge/Location.src/M000331.html +20 -0
  415. data/doc/classes/Nudge/Location.src/M000332.html +17 -0
  416. data/doc/classes/Nudge/Location.src/M000333.html +17 -0
  417. data/doc/classes/Nudge/NondominatedSubset.html +196 -0
  418. data/doc/classes/Nudge/NondominatedSubset.src/M000005.html +19 -0
  419. data/doc/classes/Nudge/NondominatedSubset.src/M000006.html +19 -0
  420. data/doc/classes/Nudge/NondominatedSubset.src/M000007.html +25 -0
  421. data/doc/classes/Nudge/NondominatedSubset.src/M000339.html +19 -0
  422. data/doc/classes/Nudge/NondominatedSubset.src/M000340.html +19 -0
  423. data/doc/classes/Nudge/NondominatedSubset.src/M000341.html +25 -0
  424. data/doc/classes/Nudge/PopulationResample.html +175 -0
  425. data/doc/classes/Nudge/PopulationResample.src/M000003.html +22 -0
  426. data/doc/classes/Nudge/PopulationResample.src/M000337.html +22 -0
  427. data/doc/classes/Nudge/ProgramPoint.html +148 -0
  428. data/doc/classes/Nudge/ProgramPoint.src/M000262.html +15 -0
  429. data/doc/classes/Nudge/RandomGuess.html +176 -0
  430. data/doc/classes/Nudge/RandomGuess.src/M000002.html +21 -0
  431. data/doc/classes/Nudge/RandomGuess.src/M000336.html +21 -0
  432. data/doc/classes/Nudge/ResampleValues.html +169 -0
  433. data/doc/classes/Nudge/ResampleValues.src/M000004.html +36 -0
  434. data/doc/classes/Nudge/ResampleValues.src/M000338.html +36 -0
  435. data/doc/classes/Nudge/SearchOperator.html +175 -0
  436. data/doc/classes/Nudge/SearchOperator.src/M000001.html +15 -0
  437. data/doc/classes/Nudge/SearchOperator.src/M000335.html +15 -0
  438. data/doc/classes/Nudge/Stack.html +350 -0
  439. data/doc/classes/Nudge/Stack.src/M000307.html +15 -0
  440. data/doc/classes/Nudge/Stack.src/M000308.html +15 -0
  441. data/doc/classes/Nudge/Stack.src/M000309.html +18 -0
  442. data/doc/classes/Nudge/Stack.src/M000310.html +15 -0
  443. data/doc/classes/Nudge/Stack.src/M000311.html +15 -0
  444. data/doc/classes/Nudge/Stack.src/M000312.html +15 -0
  445. data/doc/classes/Nudge/Stack.src/M000313.html +15 -0
  446. data/doc/classes/Nudge/UniformBackboneCrossover.html +152 -0
  447. data/doc/classes/Nudge/UniformBackboneCrossover.src/M000008.html +35 -0
  448. data/doc/classes/Nudge/UniformBackboneCrossover.src/M000342.html +35 -0
  449. data/doc/classes/Nudge.html +174 -0
  450. data/doc/classes/NudgeType.html +363 -0
  451. data/doc/classes/NudgeType.src/M000225.html +17 -0
  452. data/doc/classes/NudgeType.src/M000226.html +15 -0
  453. data/doc/classes/NudgeType.src/M000227.html +15 -0
  454. data/doc/classes/NudgeType.src/M000228.html +15 -0
  455. data/doc/classes/NudgeType.src/M000229.html +15 -0
  456. data/doc/classes/NudgeType.src/M000230.html +15 -0
  457. data/doc/classes/NudgeType.src/M000231.html +15 -0
  458. data/doc/classes/NudgeType.src/M000232.html +15 -0
  459. data/doc/classes/NudgeType.src/M000233.html +15 -0
  460. data/doc/classes/NudgeType.src/M000234.html +15 -0
  461. data/doc/created.rid +1 -0
  462. data/doc/files/lib/instructions/bool_basics_rb.html +90 -0
  463. data/doc/files/lib/instructions/comparisons_rb.html +90 -0
  464. data/doc/files/lib/instructions/conditionals_rb.html +90 -0
  465. data/doc/files/lib/instructions/conversions_rb.html +90 -0
  466. data/doc/files/lib/instructions/exec_rb.html +90 -0
  467. data/doc/files/lib/instructions/float_arithmetic_rb.html +90 -0
  468. data/doc/files/lib/instructions/float_transcendental_rb.html +90 -0
  469. data/doc/files/lib/instructions/infrastructure_rb.html +100 -0
  470. data/doc/files/lib/instructions/int_arithmetic_rb.html +90 -0
  471. data/doc/files/lib/instructions/random_value_rb.html +90 -0
  472. data/doc/files/lib/instructions/stack_manipulation_rb.html +90 -0
  473. data/doc/files/lib/interpreter/grammars/nudge_language_helpers_rb.html +97 -0
  474. data/doc/files/lib/interpreter/grammars/nudge_language_treetop.html +180 -0
  475. data/doc/files/lib/interpreter/interpreter_rb.html +90 -0
  476. data/doc/files/lib/interpreter/programPoints_rb.html +90 -0
  477. data/doc/files/lib/interpreter/stack_rb.html +90 -0
  478. data/doc/files/lib/interpreter/types/codeType_rb.html +157 -0
  479. data/doc/files/lib/interpreter/types/codeType_rb.src/M000001.html +15 -0
  480. data/doc/files/lib/interpreter/types/codeType_rb.src/M000002.html +15 -0
  481. data/doc/files/lib/interpreter/types/pushTypes_rb.html +107 -0
  482. data/doc/files/lib/nudge_rb.html +152 -0
  483. data/doc/files/lib/search/evaluators/structural_complexity_rb.html +90 -0
  484. data/doc/files/lib/search/helpers_rb.html +90 -0
  485. data/doc/files/lib/search/individual/individual_rb.html +90 -0
  486. data/doc/files/lib/search/locations/location_rb.html +100 -0
  487. data/doc/files/lib/search/operators/basic_operators_rb.html +90 -0
  488. data/doc/fr_class_index.html +191 -0
  489. data/doc/fr_file_index.html +71 -0
  490. data/doc/fr_method_index.html +711 -0
  491. data/doc/index.html +21 -0
  492. data/doc/rdoc-style.css +299 -0
  493. data/features/parser_recognizes_nudge_language.feature +9 -0
  494. data/lib/instructions/bool_basics.rb +85 -0
  495. data/lib/instructions/code_basics.rb +14 -0
  496. data/lib/instructions/comparisons.rb +152 -0
  497. data/lib/instructions/conditionals.rb +44 -0
  498. data/lib/instructions/conversions.rb +94 -0
  499. data/lib/instructions/exec.rb +154 -0
  500. data/lib/instructions/float_arithmetic.rb +201 -0
  501. data/lib/instructions/float_transcendental.rb +47 -0
  502. data/lib/instructions/infrastructure.rb +84 -0
  503. data/lib/instructions/int_arithmetic.rb +160 -0
  504. data/lib/instructions/name_basics.rb +44 -0
  505. data/lib/instructions/name_bindings.rb +65 -0
  506. data/lib/instructions/random_value.rb +43 -0
  507. data/lib/instructions/stack_manipulation.rb +739 -0
  508. data/lib/interpreter/grammars/nudge_language.treetop +83 -0
  509. data/lib/interpreter/grammars/nudge_language_helpers.rb +64 -0
  510. data/lib/interpreter/interpreter.rb +176 -0
  511. data/lib/interpreter/programPoints.rb +236 -0
  512. data/lib/interpreter/stack.rb +39 -0
  513. data/lib/interpreter/types/codeType.rb +108 -0
  514. data/lib/interpreter/types/pushTypes.rb +102 -0
  515. data/lib/nudge.rb +38 -0
  516. data/lib/search/experiments/experiment.rb +53 -0
  517. data/lib/search/helpers.rb +22 -0
  518. data/lib/search/individual/batch.rb +25 -0
  519. data/lib/search/individual/individual.rb +147 -0
  520. data/lib/search/operators/basic_operators.rb +230 -0
  521. data/lib/search/operators/evaluators.rb +107 -0
  522. data/lib/search/operators/samplers_and_selectors.rb +123 -0
  523. data/lib/search/stations/station.rb +147 -0
  524. data/push_language_coverage.md +177 -0
  525. data/readme.md +19 -0
  526. data/spec/data/couchdb_spec.rb +2 -0
  527. data/spec/fixtures/just_block.example +1 -0
  528. data/spec/fixtures/just_block_with_newline.example +1 -0
  529. data/spec/fixtures/long_arithmetic.example +7 -0
  530. data/spec/fixtures/one_line_instr.example +1 -0
  531. data/spec/fixtures/untidy1.example +20 -0
  532. data/spec/fixtures/untidy1fixed.example +12 -0
  533. data/spec/instructions/bool_basics_spec.rb +97 -0
  534. data/spec/instructions/bool_stack_spec.rb +391 -0
  535. data/spec/instructions/code_basics_spec.rb +43 -0
  536. data/spec/instructions/code_stack_spec.rb +382 -0
  537. data/spec/instructions/comparisons_spec.rb +486 -0
  538. data/spec/instructions/conditionals_spec.rb +162 -0
  539. data/spec/instructions/conversions_spec.rb +92 -0
  540. data/spec/instructions/exec_spec.rb +883 -0
  541. data/spec/instructions/float_calculations_spec.rb +148 -0
  542. data/spec/instructions/float_stack_spec.rb +382 -0
  543. data/spec/instructions/float_transcendental_spec.rb +89 -0
  544. data/spec/instructions/instruction_class_spec.rb +9 -0
  545. data/spec/instructions/int_calculations_spec.rb +125 -0
  546. data/spec/instructions/int_stack_spec.rb +398 -0
  547. data/spec/instructions/name_basics_spec.rb +158 -0
  548. data/spec/instructions/name_bindings_spec.rb +257 -0
  549. data/spec/instructions/name_stack_spec.rb +382 -0
  550. data/spec/instructions/random_values_spec.rb +68 -0
  551. data/spec/integration/search_integration.rb +67 -0
  552. data/spec/interpreter/channel_spec.rb +92 -0
  553. data/spec/interpreter/codeblock_spec.rb +135 -0
  554. data/spec/interpreter/codetype_spec.rb +257 -0
  555. data/spec/interpreter/erc_spec.rb +130 -0
  556. data/spec/interpreter/instruction_spec.rb +97 -0
  557. data/spec/interpreter/interpreter_spec.rb +266 -0
  558. data/spec/interpreter/literal_spec.rb +94 -0
  559. data/spec/interpreter/parser_spec.rb +324 -0
  560. data/spec/interpreter/stack_spec.rb +81 -0
  561. data/spec/interpreter/types_spec.rb +102 -0
  562. data/spec/search/batch_spec.rb +30 -0
  563. data/spec/search/experiments/experiment_spec.rb +101 -0
  564. data/spec/search/helpers_spec.rb +59 -0
  565. data/spec/search/individual_spec.rb +356 -0
  566. data/spec/search/operators/any_one_sampler_spec.rb +40 -0
  567. data/spec/search/operators/dominated_quantile_spec.rb +111 -0
  568. data/spec/search/operators/duplicate_genomes_spec.rb +35 -0
  569. data/spec/search/operators/evaluators/program_point_evaluator_spec.rb +43 -0
  570. data/spec/search/operators/evaluators/test_case_evaluator_spec.rb +133 -0
  571. data/spec/search/operators/infrastructure_spec.rb +47 -0
  572. data/spec/search/operators/most_dominated_subset_spec.rb +47 -0
  573. data/spec/search/operators/nondominated_subset_spec.rb +97 -0
  574. data/spec/search/operators/pointCrossover_spec.rb +55 -0
  575. data/spec/search/operators/pointDeletion_spec.rb +57 -0
  576. data/spec/search/operators/pointMutation_spec.rb +71 -0
  577. data/spec/search/operators/random_guess_spec.rb +51 -0
  578. data/spec/search/operators/resample_and_clone_spec.rb +50 -0
  579. data/spec/search/operators/resample_values_spec.rb +126 -0
  580. data/spec/search/operators/sizePreservingMutation_spec.rb +2 -0
  581. data/spec/search/operators/uniformBackboneCrossover_spec.rb +63 -0
  582. data/spec/search/stations/station_spec.rb +496 -0
  583. data/spec/spec_helper.rb +11 -0
  584. 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