pione 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (366) hide show
  1. data/.gitignore +14 -0
  2. data/Gemfile +5 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +94 -0
  5. data/Rakefile +118 -0
  6. data/bin/pione-broker +5 -0
  7. data/bin/pione-clean +5 -0
  8. data/bin/pione-client +5 -0
  9. data/bin/pione-eval +111 -0
  10. data/bin/pione-relay +5 -0
  11. data/bin/pione-relay-account-db +5 -0
  12. data/bin/pione-relay-client-db +5 -0
  13. data/bin/pione-search-log +30 -0
  14. data/bin/pione-syntax-checker +5 -0
  15. data/bin/pione-task-worker +5 -0
  16. data/bin/pione-tuple-space-provider +5 -0
  17. data/bin/pione-tuple-space-receiver +5 -0
  18. data/bin/pione-tuple-space-viewer +5 -0
  19. data/demo/demo.rb +311 -0
  20. data/demo/public/base.css +94 -0
  21. data/demo/public/demo.js +107 -0
  22. data/demo/public/index.html +91 -0
  23. data/demo/public/jquery-1.8.3.min.js +2 -0
  24. data/example/CountChar/CountChar.pione +64 -0
  25. data/example/CountChar/misc/CountChar.rb +22 -0
  26. data/example/CountChar/text/aidokushono_insho.txt +32 -0
  27. data/example/CountChar/text/aikokuka_shokan.txt +108 -0
  28. data/example/CountChar/text/carlyle_hakubutsukan.txt +58 -0
  29. data/example/CountChar/text/dark_minister.txt +2440 -0
  30. data/example/CountChar/text/kaikano_otto.txt +61 -0
  31. data/example/CountChar/text/kaikon.txt +30 -0
  32. data/example/CountChar/text/nagashimano_shi.txt +45 -0
  33. data/example/CountChar/text/saikachibuchi.txt +80 -0
  34. data/example/CountChar/text/saikonihonno_josei.txt +91 -0
  35. data/example/CountChar/text/taishojugonenno_bundan.txt +21 -0
  36. data/example/FeatureExample/FeatureExample.pione +7 -0
  37. data/example/Fib/Fib.pione +56 -0
  38. data/example/Fib/FibBC.pione +56 -0
  39. data/example/HelloWorld/HelloWorld.pione +5 -0
  40. data/example/LucasNumber/LucasNumber.pione +64 -0
  41. data/example/MakePair/MakePair.pione +14 -0
  42. data/example/MakePair/data/1.i +0 -0
  43. data/example/MakePair/data/2.i +0 -0
  44. data/example/MakePair/data/3.i +0 -0
  45. data/example/MakePair/data/4.i +0 -0
  46. data/example/MakePair/data/5.i +0 -0
  47. data/example/SieveOfEratosthenes/SieveOfEratosthenes.pione +61 -0
  48. data/example/SingleParticlesWithRef/Makefile +289 -0
  49. data/example/SingleParticlesWithRef/SingleParticlesWithRef.Makefile +153 -0
  50. data/example/SingleParticlesWithRef/SingleParticlesWithRef.pione +116 -0
  51. data/example/SingleParticlesWithRef/SingleParticlesWithRefFull.pione +400 -0
  52. data/example/SingleParticlesWithRef/data/121p-shift-0-0-0.roi +0 -0
  53. data/example/SingleParticlesWithRef/data/121p-shift-0-120-0.roi +0 -0
  54. data/example/SingleParticlesWithRef/data/121p-shift-0-180-0.roi +0 -0
  55. data/example/SingleParticlesWithRef/data/121p-shift-0-240-0.roi +0 -0
  56. data/example/SingleParticlesWithRef/data/121p-shift-0-300-0.roi +0 -0
  57. data/example/SingleParticlesWithRef/data/121p-shift-0-60-0.roi +0 -0
  58. data/example/SingleParticlesWithRef/data/121p-shift-120-0-0.roi +0 -0
  59. data/example/SingleParticlesWithRef/data/121p-shift-120-120-0.roi +0 -0
  60. data/example/SingleParticlesWithRef/data/121p-shift-120-180-0.roi +0 -0
  61. data/example/SingleParticlesWithRef/data/121p-shift-120-240-0.roi +0 -0
  62. data/example/SingleParticlesWithRef/data/121p-shift-120-300-0.roi +0 -0
  63. data/example/SingleParticlesWithRef/data/121p-shift-120-60-0.roi +0 -0
  64. data/example/SingleParticlesWithRef/data/121p-shift-180-0-0.roi +0 -0
  65. data/example/SingleParticlesWithRef/data/121p-shift-180-120-0.roi +0 -0
  66. data/example/SingleParticlesWithRef/data/121p-shift-180-180-0.roi +0 -0
  67. data/example/SingleParticlesWithRef/data/121p-shift-180-240-0.roi +0 -0
  68. data/example/SingleParticlesWithRef/data/121p-shift-180-300-0.roi +0 -0
  69. data/example/SingleParticlesWithRef/data/121p-shift-180-60-0.roi +0 -0
  70. data/example/SingleParticlesWithRef/data/121p-shift-240-0-0.roi +0 -0
  71. data/example/SingleParticlesWithRef/data/121p-shift-240-120-0.roi +0 -0
  72. data/example/SingleParticlesWithRef/data/121p-shift-240-180-0.roi +0 -0
  73. data/example/SingleParticlesWithRef/data/121p-shift-240-240-0.roi +0 -0
  74. data/example/SingleParticlesWithRef/data/121p-shift-240-300-0.roi +0 -0
  75. data/example/SingleParticlesWithRef/data/121p-shift-240-60-0.roi +0 -0
  76. data/example/SingleParticlesWithRef/data/121p-shift-300-0-0.roi +0 -0
  77. data/example/SingleParticlesWithRef/data/121p-shift-300-120-0.roi +0 -0
  78. data/example/SingleParticlesWithRef/data/121p-shift-300-180-0.roi +0 -0
  79. data/example/SingleParticlesWithRef/data/121p-shift-300-240-0.roi +0 -0
  80. data/example/SingleParticlesWithRef/data/121p-shift-300-300-0.roi +0 -0
  81. data/example/SingleParticlesWithRef/data/121p-shift-300-60-0.roi +0 -0
  82. data/example/SingleParticlesWithRef/data/121p-shift-60-0-0.roi +0 -0
  83. data/example/SingleParticlesWithRef/data/121p-shift-60-120-0.roi +0 -0
  84. data/example/SingleParticlesWithRef/data/121p-shift-60-180-0.roi +0 -0
  85. data/example/SingleParticlesWithRef/data/121p-shift-60-240-0.roi +0 -0
  86. data/example/SingleParticlesWithRef/data/121p-shift-60-300-0.roi +0 -0
  87. data/example/SingleParticlesWithRef/data/121p-shift-60-60-0.roi +0 -0
  88. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-0-0.roi +0 -0
  89. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-120-0.roi +0 -0
  90. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-180-0.roi +0 -0
  91. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-240-0.roi +0 -0
  92. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-300-0.roi +0 -0
  93. data/example/SingleParticlesWithRef/data/121p-shift-noise-0-60-0.roi +0 -0
  94. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-0-0.roi +0 -0
  95. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-120-0.roi +0 -0
  96. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-180-0.roi +0 -0
  97. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-240-0.roi +0 -0
  98. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-300-0.roi +0 -0
  99. data/example/SingleParticlesWithRef/data/121p-shift-noise-120-60-0.roi +0 -0
  100. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-0-0.roi +0 -0
  101. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-120-0.roi +0 -0
  102. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-180-0.roi +0 -0
  103. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-240-0.roi +0 -0
  104. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-300-0.roi +0 -0
  105. data/example/SingleParticlesWithRef/data/121p-shift-noise-180-60-0.roi +0 -0
  106. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-0-0.roi +0 -0
  107. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-120-0.roi +0 -0
  108. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-180-0.roi +0 -0
  109. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-240-0.roi +0 -0
  110. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-300-0.roi +0 -0
  111. data/example/SingleParticlesWithRef/data/121p-shift-noise-240-60-0.roi +0 -0
  112. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-0-0.roi +0 -0
  113. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-120-0.roi +0 -0
  114. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-180-0.roi +0 -0
  115. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-240-0.roi +0 -0
  116. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-300-0.roi +0 -0
  117. data/example/SingleParticlesWithRef/data/121p-shift-noise-300-60-0.roi +0 -0
  118. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-0-0.roi +0 -0
  119. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-120-0.roi +0 -0
  120. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-180-0.roi +0 -0
  121. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-240-0.roi +0 -0
  122. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-300-0.roi +0 -0
  123. data/example/SingleParticlesWithRef/data/121p-shift-noise-60-60-0.roi +0 -0
  124. data/example/SingleParticlesWithRef/data/121p-shift.pdb +3381 -0
  125. data/example/SingleParticlesWithRef/data/all.ref2d +0 -0
  126. data/example/SingleParticlesWithRef/data/all.ref3d +0 -0
  127. data/example/Sum/Sum.pione +52 -0
  128. data/example/SyntaxError/call_rule_error.pione +6 -0
  129. data/example/SyntaxError/feature_line_error.pione +7 -0
  130. data/example/SyntaxError/flow_block_error.pione +5 -0
  131. data/example/SyntaxError/input_line_error.pione +6 -0
  132. data/example/SyntaxError/invalid_rule_name.pione +6 -0
  133. data/example/SyntaxError/param_line_error.pione +7 -0
  134. data/example/SyntaxError/variable-binding-error.pione +11 -0
  135. data/lib/pione.rb +241 -0
  136. data/lib/pione/agent/basic-agent.rb +333 -0
  137. data/lib/pione/agent/broker.rb +274 -0
  138. data/lib/pione/agent/command-listener.rb +47 -0
  139. data/lib/pione/agent/input-generator.rb +194 -0
  140. data/lib/pione/agent/logger.rb +65 -0
  141. data/lib/pione/agent/process-manager.rb +38 -0
  142. data/lib/pione/agent/rule-provider.rb +64 -0
  143. data/lib/pione/agent/task-worker.rb +274 -0
  144. data/lib/pione/agent/trivial-routine-worker.rb +28 -0
  145. data/lib/pione/agent/tuple-space-client.rb +146 -0
  146. data/lib/pione/agent/tuple-space-server-client-life-checker.rb +29 -0
  147. data/lib/pione/command-option/basic-option.rb +42 -0
  148. data/lib/pione/command-option/child-process-option.rb +17 -0
  149. data/lib/pione/command-option/common-option.rb +29 -0
  150. data/lib/pione/command-option/daemon-option.rb +12 -0
  151. data/lib/pione/command-option/presence-notifier-option.rb +15 -0
  152. data/lib/pione/command-option/task-worker-owner-option.rb +17 -0
  153. data/lib/pione/command-option/tuple-space-provider-option.rb +26 -0
  154. data/lib/pione/command-option/tuple-space-provider-owner-option.rb +16 -0
  155. data/lib/pione/command-option/tuple-space-receiver-option.rb +12 -0
  156. data/lib/pione/command/basic-command.rb +126 -0
  157. data/lib/pione/command/child-process.rb +43 -0
  158. data/lib/pione/command/daemon-process.rb +18 -0
  159. data/lib/pione/command/front-owner-command.rb +37 -0
  160. data/lib/pione/command/pione-broker.rb +53 -0
  161. data/lib/pione/command/pione-clean.rb +16 -0
  162. data/lib/pione/command/pione-client.rb +273 -0
  163. data/lib/pione/command/pione-relay-account-db.rb +85 -0
  164. data/lib/pione/command/pione-relay-client-db.rb +80 -0
  165. data/lib/pione/command/pione-relay.rb +47 -0
  166. data/lib/pione/command/pione-syntax-checker.rb +103 -0
  167. data/lib/pione/command/pione-task-worker.rb +123 -0
  168. data/lib/pione/command/pione-tuple-space-provider.rb +87 -0
  169. data/lib/pione/command/pione-tuple-space-receiver.rb +55 -0
  170. data/lib/pione/command/pione-tuple-space-viewer.rb +151 -0
  171. data/lib/pione/command/tuple-space-provider-owner.rb +6 -0
  172. data/lib/pione/front/basic-front.rb +64 -0
  173. data/lib/pione/front/broker-front.rb +30 -0
  174. data/lib/pione/front/client-front.rb +28 -0
  175. data/lib/pione/front/relay-front.rb +19 -0
  176. data/lib/pione/front/task-worker-front.rb +16 -0
  177. data/lib/pione/front/task-worker-owner.rb +42 -0
  178. data/lib/pione/front/tuple-space-provider-front.rb +22 -0
  179. data/lib/pione/front/tuple-space-provider-owner.rb +11 -0
  180. data/lib/pione/front/tuple-space-receiver-front.rb +18 -0
  181. data/lib/pione/model/assignment.rb +89 -0
  182. data/lib/pione/model/basic-model.rb +395 -0
  183. data/lib/pione/model/binary-operator.rb +80 -0
  184. data/lib/pione/model/block.rb +233 -0
  185. data/lib/pione/model/boolean.rb +138 -0
  186. data/lib/pione/model/call-rule.rb +69 -0
  187. data/lib/pione/model/data-expr.rb +360 -0
  188. data/lib/pione/model/feature-expr.rb +794 -0
  189. data/lib/pione/model/float.rb +107 -0
  190. data/lib/pione/model/integer.rb +140 -0
  191. data/lib/pione/model/list.rb +104 -0
  192. data/lib/pione/model/message.rb +80 -0
  193. data/lib/pione/model/package.rb +48 -0
  194. data/lib/pione/model/parameters.rb +282 -0
  195. data/lib/pione/model/rule-expr.rb +120 -0
  196. data/lib/pione/model/rule-io.rb +166 -0
  197. data/lib/pione/model/rule.rb +294 -0
  198. data/lib/pione/model/string.rb +111 -0
  199. data/lib/pione/model/undefined-value.rb +24 -0
  200. data/lib/pione/model/variable-table.rb +315 -0
  201. data/lib/pione/model/variable.rb +87 -0
  202. data/lib/pione/parser/block-parser.rb +83 -0
  203. data/lib/pione/parser/common-parser.rb +145 -0
  204. data/lib/pione/parser/document-parser.rb +58 -0
  205. data/lib/pione/parser/error-message.yml +4 -0
  206. data/lib/pione/parser/expr-parser.rb +266 -0
  207. data/lib/pione/parser/feature-expr-parser.rb +105 -0
  208. data/lib/pione/parser/flow-element-parser.rb +181 -0
  209. data/lib/pione/parser/literal-parser.rb +182 -0
  210. data/lib/pione/parser/rule-definition-parser.rb +163 -0
  211. data/lib/pione/parser/syntax-error.rb +61 -0
  212. data/lib/pione/patch/array-patch.rb +3 -0
  213. data/lib/pione/patch/drb-patch.rb +467 -0
  214. data/lib/pione/patch/monitor-patch.rb +16 -0
  215. data/lib/pione/patch/rinda-patch.rb +759 -0
  216. data/lib/pione/patch/uri-patch.rb +66 -0
  217. data/lib/pione/relay/receiver-socket.rb +69 -0
  218. data/lib/pione/relay/relay-account-db.rb +55 -0
  219. data/lib/pione/relay/relay-client-db.rb +53 -0
  220. data/lib/pione/relay/relay-socket.rb +215 -0
  221. data/lib/pione/relay/trampoline.rb +22 -0
  222. data/lib/pione/relay/transmitter-socket.rb +167 -0
  223. data/lib/pione/resource/basic-resource.rb +92 -0
  224. data/lib/pione/resource/dropbox-resource.rb +106 -0
  225. data/lib/pione/resource/ftp.rb +84 -0
  226. data/lib/pione/resource/local.rb +113 -0
  227. data/lib/pione/rule-handler/action-handler.rb +184 -0
  228. data/lib/pione/rule-handler/basic-handler.rb +217 -0
  229. data/lib/pione/rule-handler/flow-handler.rb +339 -0
  230. data/lib/pione/rule-handler/root-handler.rb +23 -0
  231. data/lib/pione/rule-handler/system-handler.rb +13 -0
  232. data/lib/pione/system/common.rb +22 -0
  233. data/lib/pione/system/config.rb +20 -0
  234. data/lib/pione/system/document.rb +81 -0
  235. data/lib/pione/system/file-cache.rb +150 -0
  236. data/lib/pione/system/global.rb +346 -0
  237. data/lib/pione/system/identifier.rb +61 -0
  238. data/lib/pione/system/init.rb +16 -0
  239. data/lib/pione/system/object.rb +35 -0
  240. data/lib/pione/transformer/block-transformer.rb +23 -0
  241. data/lib/pione/transformer/document-transformer.rb +36 -0
  242. data/lib/pione/transformer/expr-transformer.rb +89 -0
  243. data/lib/pione/transformer/feature-expr-transformer.rb +56 -0
  244. data/lib/pione/transformer/flow-element-transformer.rb +66 -0
  245. data/lib/pione/transformer/literal-transformer.rb +76 -0
  246. data/lib/pione/transformer/rule-definition-transformer.rb +62 -0
  247. data/lib/pione/transformer/transformer-module.rb +37 -0
  248. data/lib/pione/tuple-space/data-finder.rb +165 -0
  249. data/lib/pione/tuple-space/presence-notifier.rb +83 -0
  250. data/lib/pione/tuple-space/relay.rb +9 -0
  251. data/lib/pione/tuple-space/tuple-space-provider.rb +85 -0
  252. data/lib/pione/tuple-space/tuple-space-receiver.rb +140 -0
  253. data/lib/pione/tuple-space/tuple-space-server-interface.rb +60 -0
  254. data/lib/pione/tuple-space/tuple-space-server.rb +156 -0
  255. data/lib/pione/tuple-space/update-criteria.rb +96 -0
  256. data/lib/pione/tuple/agent-tuple.rb +10 -0
  257. data/lib/pione/tuple/attribute-tuple.rb +7 -0
  258. data/lib/pione/tuple/base-uri-tuple.rb +9 -0
  259. data/lib/pione/tuple/basic-tuple.rb +317 -0
  260. data/lib/pione/tuple/bye-tuple.rb +9 -0
  261. data/lib/pione/tuple/command-tuple.rb +9 -0
  262. data/lib/pione/tuple/data-tuple.rb +18 -0
  263. data/lib/pione/tuple/dry-run-tuple.rb +8 -0
  264. data/lib/pione/tuple/exception-tuple.rb +11 -0
  265. data/lib/pione/tuple/finished-tuple.rb +17 -0
  266. data/lib/pione/tuple/foreground-tuple.rb +7 -0
  267. data/lib/pione/tuple/log-tuple.rb +14 -0
  268. data/lib/pione/tuple/process-info-tuple.rb +9 -0
  269. data/lib/pione/tuple/request-rule-tuple.rb +9 -0
  270. data/lib/pione/tuple/rule-tuple.rb +10 -0
  271. data/lib/pione/tuple/shift-tuple.rb +13 -0
  272. data/lib/pione/tuple/task-tuple.rb +36 -0
  273. data/lib/pione/tuple/task-worker-resource-tuple.rb +9 -0
  274. data/lib/pione/tuple/working-tuple.rb +13 -0
  275. data/lib/pione/uri-scheme/basic-scheme.rb +40 -0
  276. data/lib/pione/uri-scheme/broadcast-scheme.rb +11 -0
  277. data/lib/pione/uri-scheme/dropbox-scheme.rb +9 -0
  278. data/lib/pione/uri-scheme/local-scheme.rb +28 -0
  279. data/lib/pione/util/error-report.rb +12 -0
  280. data/lib/pione/util/log.rb +79 -0
  281. data/lib/pione/util/message.rb +155 -0
  282. data/lib/pione/util/misc.rb +73 -0
  283. data/lib/pione/util/terminal.rb +78 -0
  284. data/lib/pione/util/waiter-table.rb +53 -0
  285. data/lib/pione/version.rb +3 -0
  286. data/misc/env.sh +2 -0
  287. data/misc/test-drb-stop-service.rb +34 -0
  288. data/misc/test-ensure-and-thread-kill.rb +40 -0
  289. data/misc/test-many-waiters-client.rb +56 -0
  290. data/misc/test-many-waiters-server.rb +14 -0
  291. data/misc/write_and_take_test.png +0 -0
  292. data/misc/write_and_take_test.rb +36 -0
  293. data/pione.gemspec +49 -0
  294. data/test/agent/spec_basic-agent.rb +170 -0
  295. data/test/agent/spec_broker.rb +36 -0
  296. data/test/agent/spec_command-listener.rb +30 -0
  297. data/test/agent/spec_input-generator.rb +123 -0
  298. data/test/agent/spec_logger.rb +71 -0
  299. data/test/agent/spec_rule-provider.rb +65 -0
  300. data/test/agent/spec_task-worker.rb +307 -0
  301. data/test/agent/spec_tuple-space-client.rb +30 -0
  302. data/test/model/spec_assignment.rb +51 -0
  303. data/test/model/spec_binary-operator.rb +39 -0
  304. data/test/model/spec_block.rb +154 -0
  305. data/test/model/spec_boolean.rb +115 -0
  306. data/test/model/spec_call-rule.rb +23 -0
  307. data/test/model/spec_data-expr.rb +312 -0
  308. data/test/model/spec_feature-expr.rb +359 -0
  309. data/test/model/spec_feature-expr.yml +16 -0
  310. data/test/model/spec_float.rb +141 -0
  311. data/test/model/spec_integer.rb +141 -0
  312. data/test/model/spec_list.rb +26 -0
  313. data/test/model/spec_message.rb +42 -0
  314. data/test/model/spec_package.rb +15 -0
  315. data/test/model/spec_parameters.rb +148 -0
  316. data/test/model/spec_rule-expr.rb +66 -0
  317. data/test/model/spec_rule-io.rb +32 -0
  318. data/test/model/spec_rule.rb +158 -0
  319. data/test/model/spec_string.rb +106 -0
  320. data/test/model/spec_variable-table.rb +117 -0
  321. data/test/model/spec_variable.rb +84 -0
  322. data/test/parser/spec_block-parser.rb +5 -0
  323. data/test/parser/spec_block-parser.yml +85 -0
  324. data/test/parser/spec_common-parser.rb +281 -0
  325. data/test/parser/spec_expr-parser.rb +6 -0
  326. data/test/parser/spec_expr-parser.yml +82 -0
  327. data/test/parser/spec_feature-expr-parser.rb +32 -0
  328. data/test/parser/spec_feature-expr-parser.yml +25 -0
  329. data/test/parser/spec_flow-element-parser.rb +5 -0
  330. data/test/parser/spec_flow-element-parser.yml +180 -0
  331. data/test/parser/spec_literal-parser.rb +5 -0
  332. data/test/parser/spec_literal-parser.yml +123 -0
  333. data/test/parser/spec_rule-definition-parser.rb +5 -0
  334. data/test/parser/spec_rule-definition-parser.yml +93 -0
  335. data/test/patch/spec_rinda-patch.rb +32 -0
  336. data/test/patch/spec_uri-patch.rb +23 -0
  337. data/test/rule-handler/spec_action-handler.rb +135 -0
  338. data/test/rule-handler/spec_flow-handler.rb +127 -0
  339. data/test/spec_common.rb +14 -0
  340. data/test/spec_data-finder.rb +88 -0
  341. data/test/spec_data-finder.yml +115 -0
  342. data/test/spec_document.rb +76 -0
  343. data/test/spec_identifier.rb +29 -0
  344. data/test/spec_log.rb +52 -0
  345. data/test/spec_object.rb +20 -0
  346. data/test/spec_resource.rb +73 -0
  347. data/test/spec_update-criteria.rb +83 -0
  348. data/test/test-util.rb +223 -0
  349. data/test/transformer/spec_block-transformer.rb +26 -0
  350. data/test/transformer/spec_expr-transformer.rb +106 -0
  351. data/test/transformer/spec_feature-expr-transformer.rb +21 -0
  352. data/test/transformer/spec_flow-element-transformer.rb +154 -0
  353. data/test/transformer/spec_literal-transformer.rb +58 -0
  354. data/test/transformer/spec_rule-definition-transformer.rb +168 -0
  355. data/test/tuple-space/spec_tuple-space-provider.rb +36 -0
  356. data/test/tuple-space/spec_tuple-space-receiver.rb +32 -0
  357. data/test/tuple-space/spec_tuple-space-server.rb +49 -0
  358. data/test/tuple/spec_basic-tuple.rb +87 -0
  359. data/test/tuple/spec_data-tuple.rb +85 -0
  360. data/test/tuple/spec_finished-tuple.rb +61 -0
  361. data/test/tuple/spec_task-tuple.rb +127 -0
  362. data/test/tuple/spec_working-tuple.rb +58 -0
  363. data/test/uri-scheme/spec_broadcast-scheme.rb +40 -0
  364. data/test/uri-scheme/spec_dropbox-scheme.rb +31 -0
  365. data/test/uri-scheme/spec_local-scheme.rb +69 -0
  366. metadata +660 -0
@@ -0,0 +1,87 @@
1
+ module Pione::Model
2
+ # Variable represent variable name objects. A variable object can evaluates
3
+ # its value with the variable table.
4
+ class Variable < BasicModel
5
+ set_pione_model_type TypeAny
6
+
7
+ attr_reader :name
8
+
9
+ # Creates a variable with name.
10
+ # @param [String] name
11
+ # variable name
12
+ def initialize(name)
13
+ @name = name.to_s
14
+ super()
15
+ end
16
+
17
+ # Evaluates self variable name in the table and returns it. Return self if
18
+ # the variable name is unbound in the table.
19
+ # @param [VariableTable] vtable
20
+ # variable table for evaluation
21
+ # @return [BasicModel]
22
+ # evaluation result
23
+ def eval(vtable)
24
+ val = vtable.get(self)
25
+ raise UnboundVariableError.new(self) if val.nil?
26
+ return val
27
+ end
28
+
29
+ # Returns true because variable is a variable.
30
+ # @return [Boolean]
31
+ # true
32
+ def include_variable?
33
+ true
34
+ end
35
+
36
+ def set_toplevel(b)
37
+ @toplevel = b
38
+ end
39
+
40
+ # Returns true if the variable is defined in toplevel.
41
+ # @return [Boolean]
42
+ # true if the variable is defined in toplevel
43
+ def toplevel?
44
+ @toplevel
45
+ end
46
+
47
+ # @api private
48
+ def task_id_string
49
+ "Variable<#{@name}>"
50
+ end
51
+
52
+ # @api private
53
+ def textize
54
+ "$%s" % [@name]
55
+ end
56
+
57
+ # Comparisons with other variable.
58
+ # @api private
59
+ def <=>(other)
60
+ unless other.kind_of?(self.class)
61
+ raise ArgumentError.new(other)
62
+ end
63
+ @name <=> other.name
64
+ end
65
+
66
+ # Return true if other is a variable object which name is same as myself.
67
+ # @api private
68
+ def ==(other)
69
+ other.kind_of?(self.class) && @name == other.name
70
+ end
71
+
72
+ alias :eql? :"=="
73
+
74
+ # @api private
75
+ def hash
76
+ @name.hash
77
+ end
78
+
79
+ # @api private
80
+ def inspect
81
+ "#<Pione::Model::Variable @name=%s>" % @name.inspect
82
+ end
83
+
84
+ # @api private
85
+ alias :to_s :inspect
86
+ end
87
+ end
@@ -0,0 +1,83 @@
1
+ module Pione
2
+ module Parser
3
+ # BlockParser is a set of parser atoms for rule block.
4
+ module BlockParser
5
+ include Parslet
6
+ include SyntaxError
7
+ include CommonParser
8
+ include LiteralParser
9
+ include ExprParser
10
+ include FlowElementParser
11
+
12
+ # @!attribute [r] block
13
+ # +block+ matches flow block or action block.
14
+ # @return [Parslet::Atoms::Entity] +block+ atom
15
+ rule(:block) {
16
+ flow_block |
17
+ action_block
18
+ }
19
+
20
+ # @!attribute [r] flow_block
21
+ # +flow_block+ matches flow block.
22
+ # @return [Parslet::Atoms::Entity] +flow_block+ atom
23
+ # @example
24
+ # Flow
25
+ # rule A
26
+ # if $X
27
+ # rule B
28
+ # end
29
+ # End
30
+ rule(:flow_block) {
31
+ ( flow_block_begin_line >>
32
+ (flow_element.repeat(1) |
33
+ syntax_error("flow elements not found", [:flow_element])) >>
34
+ (block_end_line |
35
+ syntax_error("block end not found", [:keyword_End]))
36
+ ).as(:flow_block)
37
+ }
38
+
39
+ # @!attribute [r] action_block
40
+ # +action_block+ matches action block.
41
+ # @return [Parslet::Atoms::Entity] +action_block+ atom
42
+ # @example
43
+ # Action
44
+ # echo "abc" > out.txt
45
+ # End
46
+ rule(:action_block) {
47
+ ( action_block_begin_line >>
48
+ ( (block_end_line.absent? >> any).repeat(1).as(:content) |
49
+ syntax_error("empty action block", [])) >>
50
+ ( block_end_line |
51
+ syntax_error("block end not found", [:keyword_End]))
52
+ ).as(:action_block)
53
+ }
54
+
55
+ # @!attribute [r] flow_block_begin_line
56
+ # +flow_block_begin_line+ matches flow block heading.
57
+ # @return [Parslet::Atoms::Entity] +flow_block_begin_line+ atom
58
+ # @example
59
+ # Flow
60
+ rule(:flow_block_begin_line) {
61
+ space? >> keyword_Flow >> str('-').repeat >> line_end
62
+ }
63
+
64
+ # @!attribute [r] action_block_begin_line
65
+ # +flow_block_begin_line+ matches action block heading.
66
+ # @return [Parslet::Atoms::Entity] +action_block_begin_line+ atom
67
+ # @example
68
+ # Action
69
+ rule(:action_block_begin_line) {
70
+ space? >> keyword_Action.as(:key) >> str('-').repeat >> line_end
71
+ }
72
+
73
+ # @!attribute [r] block_end_line
74
+ # +block_end_line+ matches block end keyword.
75
+ # @return [Parslet::Atoms::Entity] +block_end_line+ atom
76
+ # @example
77
+ # End
78
+ rule(:block_end_line) {
79
+ space? >> str('-').repeat >> keyword_End >> line_end
80
+ }
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,145 @@
1
+ module Pione
2
+ module Parser
3
+ # CommonParser is a set of symbols, keywords, and utility parsers.
4
+ module CommonParser
5
+ include Parslet
6
+
7
+ #
8
+ # symbols
9
+ #
10
+
11
+ SYMBOLS = {
12
+ :squote => '\'',
13
+ :dquote => '"',
14
+ :backslash => "\\",
15
+ :dot => '.',
16
+ :comma => ',',
17
+ :lparen => '(',
18
+ :rparen =>')',
19
+ :lbrace => '{',
20
+ :rbrace => '}',
21
+ :slash => '/',
22
+ :plus => '+',
23
+ :minus => '-',
24
+ :question => '?',
25
+ :vbar => '|',
26
+ :ampersand => '&',
27
+ :doller => '$',
28
+ :colon => ':',
29
+ :equals => '=',
30
+ :exclamation => '!',
31
+ :less_than => '<',
32
+ :greater_than => '>',
33
+ :asterisk => '*',
34
+ :percent => '%',
35
+ :atmark => '@',
36
+ :hat => '^',
37
+ :sharp => '#',
38
+ :lsbracket => '[',
39
+ :rsbracket => ']'
40
+ }
41
+
42
+ # make symbols
43
+ SYMBOLS.each do |key, val|
44
+ rule(key) { str(val) }
45
+ end
46
+
47
+ # @!attribute [r] symbols
48
+ # +symbols+ matches all symbols in PIONE document.
49
+ # @return [Parslet::Atoms::Entity] +symbols+ atom
50
+ rule(:symbols) {
51
+ SYMBOLS.keys.inject(nil) do |res, elt|
52
+ res ? res | send(elt) : send(elt)
53
+ end
54
+ }
55
+
56
+ #
57
+ # keywords
58
+ #
59
+
60
+ KEYWORDS = {
61
+ :keyword_Rule => 'Rule',
62
+ :keyword_Flow => 'Flow',
63
+ :keyword_Action => 'Action',
64
+ :keyword_End => 'End',
65
+ :keyword_input => 'input',
66
+ :keyword_output => 'output',
67
+ :keyword_param => 'param',
68
+ :keyword_feature => 'feature',
69
+ :keyword_rule => 'rule',
70
+ :keyword_if => 'if',
71
+ :keyword_else => 'else',
72
+ :keyword_case => 'case',
73
+ :keyword_when => 'when',
74
+ :keyword_end => 'end',
75
+ :keyword_package => 'package',
76
+ :keyword_require => 'require',
77
+ :keyword_true => 'true',
78
+ :keyword_false => 'false',
79
+ :keyword_and => 'and',
80
+ :keyword_or => 'or'
81
+ }
82
+
83
+ # make keywords
84
+ KEYWORDS.each do |key, val|
85
+ rule(key) { str(val) }
86
+ end
87
+
88
+ #
89
+ # utilities
90
+ #
91
+
92
+ # @!attribute [r] identifier
93
+ # +identifier+ matches any sequences excluding space, symbols, and
94
+ # line end.
95
+ # @return [Parslet::Atoms::Entity] +identifier+ atom
96
+ rule(:identifier) {
97
+ ((space | symbols | line_end).absent? >> any).repeat(1)
98
+ }
99
+
100
+ # @!attribute [r] digit
101
+ # +digit+ matches 0-9.
102
+ # @return [Parslet::Atoms::Entity] +digit+ atom
103
+ rule(:digit) { match('[0-9]') }
104
+
105
+ # @!attribute [r] space
106
+ # +space+ matches sequences of space character or tab.
107
+ # @return [Parslet::Atoms::Entity] +space+ atom
108
+ rule(:space) { match("[ \t]").repeat(1) }
109
+
110
+ # @!attribute [r] space?
111
+ # +space?+ matches +space+ atom or empty.
112
+ # @return [Parslet::Atoms::Entity] +space?+ atom
113
+ rule(:space?) { space.maybe }
114
+
115
+ # @!attribute [r] pad
116
+ # +space?+ matches space character, tab, and newline.
117
+ # @return [Parslet::Atoms::Entity] +pad+ atom
118
+ rule(:pad) { match("[ \t\n]").repeat(1) }
119
+
120
+ # @!attribute [r] pad?
121
+ # +space?+ matches +pad+ atom or empty.
122
+ # @return [Parslet::Atoms::Entity] +pad?+ atom
123
+ rule(:pad?) { pad.maybe }
124
+
125
+ # @!attribute [r] line_end
126
+ # +line_end+ matches a space sequence until line end.
127
+ # @return [Parslet::Atoms::Entity] +line_end+ atom
128
+ rule(:line_end) { space? >> (str("\n") | any.absent?) }
129
+
130
+ # @!attribute [r] empty_lines
131
+ # +empty_line+ matches empty lines.
132
+ # @return [Parslet::Atoms::Entity] +empty_line+ atom
133
+ rule(:empty_lines) {
134
+ (space? >> str("\n")).repeat(1) >>
135
+ (space? >> any.absent?).maybe
136
+ }
137
+
138
+ # @!attribute [r] empty_lines?
139
+ # +empty_lines?+ matches empty lines or empty.
140
+ # @return [Parslet::Atoms::Entity] empty_line? atom
141
+ rule(:empty_lines?) { empty_lines.maybe }
142
+ end
143
+ end
144
+ end
145
+
@@ -0,0 +1,58 @@
1
+ module Pione
2
+ module Parser
3
+ # DocumentParser is a parser for PIONE rule document.
4
+ class DocumentParser < Parslet::Parser
5
+ include CommonParser
6
+ include LiteralParser
7
+ include FeatureExprParser
8
+ include ExprParser
9
+ include FlowElementParser
10
+ include BlockParser
11
+ include RuleDefinitionParser
12
+
13
+ def parse(str)
14
+ super(str.gsub(/^(?!#!)#.*/, ""))
15
+ end
16
+
17
+ #
18
+ # root
19
+ #
20
+
21
+ root(:rule_definitions)
22
+
23
+ #
24
+ # document statement
25
+ #
26
+
27
+ rule(:document_statements) {
28
+ document_statement.repeat.as(:document_statements)
29
+ }
30
+
31
+ # document_statement
32
+ rule(:document_statement) {
33
+ package_line |
34
+ require_line
35
+ }
36
+
37
+ # package_line
38
+ rule(:package_line) {
39
+ ( space? >>
40
+ keyword_package >>
41
+ space >>
42
+ package_name >>
43
+ line_end
44
+ ).as(:package)
45
+ }
46
+
47
+ # require_line
48
+ rule(:require_line) {
49
+ ( space? >>
50
+ keyword_require >>
51
+ space >>
52
+ package_name >>
53
+ line_end
54
+ ).as(:require)
55
+ }
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,4 @@
1
+ parameters_missing_colon:
2
+ "Parameter elements should be 'key:value' form, but colon is missing."
3
+ parameters_missing_value:
4
+ "It should be parameter value."
@@ -0,0 +1,266 @@
1
+ module Pione
2
+ module Parser
3
+ # ExprParser is a set of parser atoms for PIONE expressions.
4
+ module ExprParser
5
+ include Parslet
6
+ include SyntaxError
7
+ include CommonParser
8
+ include LiteralParser
9
+ include FeatureExprParser
10
+
11
+ # @!attribute [r] expr
12
+ # +expr+ matches all expressions in PIONE document.
13
+ # @return [Parslet::Atoms::Entity] +expr+ atom
14
+ # @example
15
+ # 1 + 1
16
+ # @example
17
+ # (1 + 1).next
18
+ # @example
19
+ # ("abc" + "def")[1]
20
+ # @example
21
+ # true
22
+ # @example
23
+ # '*.txt'.as_string
24
+ rule(:expr) {
25
+ ( expr_operator_application |
26
+ assignment |
27
+ (expr_element.as(:receiver) >>
28
+ (index | message).repeat(1).as(:messages)) |
29
+ expr_element
30
+ ).as(:expr)
31
+ }
32
+
33
+ # @!attribute [r] expr_element
34
+ # +expr_element+ matches simple expressions.
35
+ # @return [Parslet::Atoms::Entity] +expr_element+ atom
36
+ # @example
37
+ # true
38
+ # @example
39
+ # "abc"[0]
40
+ # @example
41
+ # 'abc'.as_string
42
+ # @example
43
+ # (1 + 1)
44
+ # @example
45
+ # ("abc".index(1, 1))
46
+ rule(:expr_element) {
47
+ ( (atomic_expr.as(:receiver) >> indexes) |
48
+ (atomic_expr.as(:receiver) >> messages) |
49
+ atomic_expr |
50
+ lparen >> expr >> rparen
51
+ )
52
+ }
53
+
54
+ # @!attribute [r] atomic_expr
55
+ # +expr+ matches atomic expressions.
56
+ # @return [Parslet::Atoms::Entity] +atomic_expr+ atom
57
+ # @example
58
+ # true
59
+ # @example
60
+ # 0.1
61
+ # @example
62
+ # 1
63
+ # @example
64
+ # "abc"
65
+ # @example
66
+ # $var
67
+ # @example
68
+ # '*.txt'
69
+ # @example
70
+ # {var: 1}
71
+ # @example
72
+ # $abc:test
73
+ # @example
74
+ # abc
75
+ rule(:atomic_expr) {
76
+ boolean |
77
+ float |
78
+ integer |
79
+ string |
80
+ data_name |
81
+ rule_expr |
82
+ feature_expr |
83
+ parameters |
84
+ variable
85
+ }
86
+
87
+ # @!attribute [r] rule_expr
88
+ # +rule_expr+ matches rule expressions.
89
+ # @return [Parslet::Atoms::Entity] +rule_expr+ atom
90
+ # @example
91
+ # &abc:test
92
+ # @example
93
+ # :test
94
+ # @example
95
+ # test
96
+ rule(:rule_expr) {
97
+ ( package_name.as(:package) >> colon >> rule_name.as(:expr) |
98
+ colon >> rule_name |
99
+ rule_name
100
+ ).as(:rule_expr)
101
+ }
102
+
103
+ # @!attribute [r] expr_operator
104
+ # +expr_operator+ matches expression operators.
105
+ # @return [Parslet::Atoms::Entity] +expr_operator+ atom
106
+ # @example
107
+ # :=, ==, !=, >=, >, <=, <, &&, ||, +, -, *, /, %, or, and
108
+ rule(:expr_operator) {
109
+ equals >> equals |
110
+ exclamation >> equals |
111
+ less_than >> equals |
112
+ less_than |
113
+ greater_than >> equals |
114
+ greater_than |
115
+ ampersand >> ampersand |
116
+ vbar >> vbar |
117
+ plus |
118
+ minus |
119
+ asterisk |
120
+ slash |
121
+ percent |
122
+ keyword_or |
123
+ keyword_and
124
+ }
125
+
126
+ # @!attribute [r] expr_operator_application
127
+ # +expr_operator_application+ matches operator application.
128
+ # @return [Parslet::Atoms::Entity] +expr_operator_application+ atom
129
+ # @example
130
+ # X + X
131
+ rule(:expr_operator_application) {
132
+ ( expr_element.as(:left) >>
133
+ pad? >>
134
+ expr_operator.as(:operator) >>
135
+ pad? >>
136
+ expr.as(:right)
137
+ ).as(:expr_operator_application)
138
+ }
139
+
140
+ # @!attribute [r] assignment
141
+ # +assignment+ matches variable assignment.
142
+ # @return [Parslet::Atoms::Entity] +assignment+ atom
143
+ # @example
144
+ # $X := 1
145
+ rule(:assignment) {
146
+ ( variable.as(:symbol) >>
147
+ space? >>
148
+ colon >> equals >>
149
+ pad? >>
150
+ expr.as(:value)
151
+ ).as(:assignment)
152
+ }
153
+
154
+ # @!attribute [r] messages
155
+ # +messages+ matches message list.
156
+ # @return [Parslet::Atoms::Entity] +messages+ atom
157
+ # @example
158
+ # .params("-w").sync
159
+ rule(:messages) {
160
+ message.repeat(1).as(:messages)
161
+ }
162
+
163
+ # @!attribute [r] message
164
+ # +message+ matches message sending.
165
+ # @return [Parslet::Atoms::Entity] +message+ atom
166
+ # @example
167
+ # # message with no arguments
168
+ # .to_string
169
+ # @example
170
+ # # message with arguments
171
+ # .params("-w")
172
+ rule(:message) {
173
+ ( dot >>
174
+ identifier.as(:message_name) >>
175
+ message_parameters.maybe
176
+ ).as(:message)
177
+ }
178
+
179
+ # @!attribute [r] message_parameters
180
+ # +message_parameters+ matches message parameters.
181
+ # @return [Parslet::Atoms::Entity] +message_parameters+ atom
182
+ # @example
183
+ # ("-w")
184
+ # @example
185
+ # (true, false)
186
+ rule(:message_parameters) {
187
+ lparen >>
188
+ pad? >>
189
+ message_parameters_elements.maybe.as(:message_parameters) >>
190
+ pad? >>
191
+ rparen
192
+ }
193
+
194
+ # @!attribute [r] message_parameters_elements
195
+ # +message_parameters_elements+ matches message parameters.
196
+ # @return [Parslet::Atoms::Entity] +message_parameters_elements+ atom
197
+ # @example
198
+ # (true)
199
+ # @example
200
+ # (true, true, true)
201
+ rule(:message_parameters_elements) {
202
+ expr >> message_parameters_elements_rest.repeat
203
+ }
204
+
205
+ # @!attribute [r] message_paramters_elements_rest
206
+ # +message_parameters_elements+ matches message parameters rest.
207
+ # @return [Parslet::Atoms::Entity] +message_paramters_elements_rest+ atom
208
+ # @example
209
+ # , true
210
+ rule(:message_parameters_elements_rest) {
211
+ pad? >> comma >> pad? >> expr
212
+ }
213
+
214
+ # @!attribute [r] indexes
215
+ # +indexes+ matches object index list.
216
+ # @return [Parslet::Atoms::Entity] +indexes+ atom
217
+ # @example
218
+ # [1][2][3]
219
+ rule(:indexes) {
220
+ index.repeat(1).as(:indexes)
221
+ }
222
+
223
+ # @!attribute [r] index
224
+ # +index+ matches object index.
225
+ # @return [Parslet::Atoms::Entity] +index+ atom
226
+ # @example
227
+ # [1]
228
+ # [1,1]
229
+ # [1,2,3]
230
+ rule(:index) {
231
+ ( lsbracket >>
232
+ space? >>
233
+ ( index_arguments.as(:index) |
234
+ syntax_error("it should be index arguments", :expr)) >>
235
+ space? >>
236
+ rsbracket
237
+ )
238
+ }
239
+
240
+ # @!attribute [r] index_arguments
241
+ # +index_arguments+ matches arguments of object index.
242
+ # @return [Parslet::Atoms::Entity] +index_arguments+ atom
243
+ # @example
244
+ # 1
245
+ # 1,1
246
+ # 1,2,3
247
+ rule(:index_arguments) {
248
+ expr.repeat(1,1) >> space? >> index_arguments_rest.repeat
249
+ }
250
+
251
+ # @!attribute [r] index_arguments_rest
252
+ # +index_arguments_rest+ matches argument tail of object index.
253
+ # @return [Parslet::Atoms::Entity] +index_arguments_rest+ atom
254
+ # @example
255
+ # ,1
256
+ rule(:index_arguments_rest) {
257
+ space? >>
258
+ comma >>
259
+ space? >>
260
+ ( expr |
261
+ syntax_error("it should be expr", :expr)
262
+ )
263
+ }
264
+ end
265
+ end
266
+ end