bcdice 3.0.0.pre.alpha.1 → 3.0.0.pre.alpha.2

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 (255) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +1 -1
  3. data/.rubocop.yml +12 -0
  4. data/.rubocop_todo.yml +1 -0
  5. data/CHANGELOG.md +34 -0
  6. data/Gemfile +6 -3
  7. data/Rakefile +52 -18
  8. data/bcdice.gemspec +2 -0
  9. data/i18n/Amadeus/ja_jp.yml +386 -0
  10. data/i18n/Amadeus/ko_kr.yml +148 -0
  11. data/i18n/Cthulhu/ja_jp.yml +11 -0
  12. data/i18n/Cthulhu/ko_kr.yml +11 -0
  13. data/i18n/Cthulhu/zh_hant.yml +11 -0
  14. data/i18n/DetatokoSaga/ja_jp.yml +74 -0
  15. data/i18n/DetatokoSaga/ko_kr.yml +74 -0
  16. data/i18n/DoubleCross/ja_jp.yml +53 -0
  17. data/i18n/DoubleCross/ko_kr.yml +53 -0
  18. data/i18n/Dracurouge/ja_jp.yml +1374 -0
  19. data/i18n/Dracurouge/ko_kr.yml +295 -0
  20. data/i18n/Fiasco/ja_jp.yml +10 -0
  21. data/i18n/Fiasco/ko_kr.yml +10 -0
  22. data/i18n/FutariSousa/ja_jp.yml +720 -0
  23. data/i18n/FutariSousa/ko_kr.yml +746 -0
  24. data/i18n/Insane/ja_jp.yml +454 -0
  25. data/i18n/Insane/ko_kr.yml +502 -0
  26. data/i18n/Kamigakari/ja_jp.yml +276 -0
  27. data/i18n/Kamigakari/ko_kr.yml +204 -0
  28. data/i18n/KillDeathBusiness/ja_jp.yml +1092 -0
  29. data/i18n/KillDeathBusiness/ko_kr.yml +1062 -0
  30. data/i18n/LogHorizon/ja_jp.yml +3082 -0
  31. data/i18n/LogHorizon/ko_kr.yml +923 -0
  32. data/i18n/MagicaLogia/ja_jp.yml +564 -0
  33. data/i18n/MonotoneMuseum/ja_jp.yml +525 -0
  34. data/i18n/MonotoneMuseum/ko_kr.yml +89 -0
  35. data/i18n/Nechronica/ja_jp.yml +57 -0
  36. data/i18n/Nechronica/ko_kr.yml +14 -0
  37. data/i18n/StratoShout/ja_jp.yml +160 -0
  38. data/i18n/StratoShout/ko_kr.yml +160 -0
  39. data/i18n/ja_jp.yml +5 -0
  40. data/i18n/ko_kr.yml +7 -0
  41. data/i18n/zh_hant.yml +3 -0
  42. data/lib/bcdice/arithmetic/node.rb +154 -0
  43. data/lib/bcdice/base.rb +87 -101
  44. data/lib/bcdice/common_command.rb +2 -0
  45. data/lib/bcdice/common_command/add_dice.rb +5 -41
  46. data/lib/bcdice/common_command/add_dice/node.rb +92 -16
  47. data/lib/bcdice/common_command/add_dice/parser.rb +374 -274
  48. data/lib/bcdice/common_command/add_dice/parser.y +153 -0
  49. data/lib/bcdice/common_command/add_dice/randomizer.rb +25 -33
  50. data/lib/bcdice/common_command/barabara_dice.rb +6 -47
  51. data/lib/bcdice/common_command/barabara_dice/node.rb +84 -0
  52. data/lib/bcdice/common_command/barabara_dice/parser.rb +336 -0
  53. data/lib/bcdice/common_command/barabara_dice/parser.y +107 -0
  54. data/lib/bcdice/common_command/calc.rb +7 -30
  55. data/lib/bcdice/common_command/calc/node.rb +30 -0
  56. data/lib/bcdice/common_command/calc/parser.rb +271 -0
  57. data/lib/bcdice/common_command/calc/parser.y +79 -0
  58. data/lib/bcdice/common_command/choice.rb +137 -19
  59. data/lib/bcdice/common_command/d66_dice.rb +48 -34
  60. data/lib/bcdice/common_command/lexer.rb +46 -0
  61. data/lib/bcdice/common_command/repeat.rb +102 -0
  62. data/lib/bcdice/common_command/reroll_dice.rb +8 -158
  63. data/lib/bcdice/common_command/reroll_dice/node.rb +198 -0
  64. data/lib/bcdice/common_command/reroll_dice/parser.rb +421 -0
  65. data/lib/bcdice/common_command/reroll_dice/parser.y +158 -0
  66. data/lib/bcdice/common_command/upper_dice.rb +10 -129
  67. data/lib/bcdice/common_command/upper_dice/node.rb +181 -0
  68. data/lib/bcdice/common_command/upper_dice/parser.rb +412 -0
  69. data/lib/bcdice/common_command/upper_dice/parser.y +143 -0
  70. data/lib/bcdice/common_command/version.rb +9 -17
  71. data/lib/bcdice/deprecated/checker.rb +78 -0
  72. data/lib/bcdice/dice_table/d66_grid_table.rb +8 -0
  73. data/lib/bcdice/dice_table/d66_table.rb +10 -0
  74. data/lib/bcdice/dice_table/sai_fic_skill_table.rb +75 -17
  75. data/lib/bcdice/dice_table/sai_fic_skill_table/category.rb +25 -0
  76. data/lib/bcdice/dice_table/sai_fic_skill_table/skill.rb +23 -0
  77. data/lib/bcdice/dice_table/table.rb +8 -0
  78. data/lib/bcdice/game_system.rb +7 -1
  79. data/lib/bcdice/game_system/AFF2e.rb +1 -1
  80. data/lib/bcdice/game_system/AceKillerGene.rb +2 -2
  81. data/lib/bcdice/game_system/Airgetlamh.rb +3 -3
  82. data/lib/bcdice/game_system/Alsetto.rb +1 -1
  83. data/lib/bcdice/game_system/Alshard.rb +1 -1
  84. data/lib/bcdice/game_system/AlterRaise.rb +2 -2
  85. data/lib/bcdice/game_system/Amadeus.rb +46 -507
  86. data/lib/bcdice/game_system/Amadeus_Korean.rb +12 -456
  87. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -1
  88. data/lib/bcdice/game_system/Arianrhod.rb +0 -1
  89. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  90. data/lib/bcdice/game_system/Avandner.rb +1 -1
  91. data/lib/bcdice/game_system/BBN.rb +1 -1
  92. data/lib/bcdice/game_system/BadLife.rb +1 -1
  93. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  94. data/lib/bcdice/game_system/BeastBindTrinity.rb +1 -2
  95. data/lib/bcdice/game_system/BeginningIdol.rb +2 -3
  96. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +2 -3
  97. data/lib/bcdice/game_system/BladeOfArcana.rb +2 -2
  98. data/lib/bcdice/game_system/BlindMythos.rb +1 -1
  99. data/lib/bcdice/game_system/BloodCrusade.rb +0 -1
  100. data/lib/bcdice/game_system/BloodMoon.rb +0 -1
  101. data/lib/bcdice/game_system/CardRanker.rb +1 -2
  102. data/lib/bcdice/game_system/ChaosFlare.rb +1 -1
  103. data/lib/bcdice/game_system/Chill.rb +1 -1
  104. data/lib/bcdice/game_system/CodeLayerd.rb +1 -1
  105. data/lib/bcdice/game_system/ColossalHunter.rb +1 -2
  106. data/lib/bcdice/game_system/Comes.rb +50 -0
  107. data/lib/bcdice/game_system/CrashWorld.rb +1 -1
  108. data/lib/bcdice/game_system/Cthulhu.rb +94 -97
  109. data/lib/bcdice/game_system/Cthulhu7th.rb +108 -67
  110. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  111. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  112. data/lib/bcdice/game_system/CthulhuTech.rb +8 -14
  113. data/lib/bcdice/game_system/Cthulhu_ChineseTraditional.rb +7 -190
  114. data/lib/bcdice/game_system/Cthulhu_Korean.rb +5 -186
  115. data/lib/bcdice/game_system/DarkBlaze.rb +9 -5
  116. data/lib/bcdice/game_system/DarkDaysDrive.rb +17 -15
  117. data/lib/bcdice/game_system/DarkSouls.rb +1 -1
  118. data/lib/bcdice/game_system/DeadlineHeroes.rb +2 -2
  119. data/lib/bcdice/game_system/DemonParasite.rb +1 -2
  120. data/lib/bcdice/game_system/DetatokoSaga.rb +48 -149
  121. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +6 -274
  122. data/lib/bcdice/game_system/DiceOfTheDead.rb +9 -6
  123. data/lib/bcdice/game_system/DoubleCross.rb +102 -81
  124. data/lib/bcdice/game_system/DoubleCross_Korean.rb +13 -330
  125. data/lib/bcdice/game_system/Dracurouge.rb +376 -1678
  126. data/lib/bcdice/game_system/Dracurouge_Korean.rb +16 -271
  127. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  128. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  129. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  130. data/lib/bcdice/game_system/Elysion.rb +3 -4
  131. data/lib/bcdice/game_system/EmbryoMachine.rb +1 -1
  132. data/lib/bcdice/game_system/Emoklore.rb +131 -0
  133. data/lib/bcdice/game_system/EndBreaker.rb +1 -2
  134. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -1
  135. data/lib/bcdice/game_system/Fiasco.rb +87 -70
  136. data/lib/bcdice/game_system/Fiasco_Korean.rb +7 -95
  137. data/lib/bcdice/game_system/FilledWith.rb +462 -566
  138. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -1
  139. data/lib/bcdice/game_system/FutariSousa.rb +103 -938
  140. data/lib/bcdice/game_system/FutariSousa_Korean.rb +7 -948
  141. data/lib/bcdice/game_system/{Gurps.rb → GURPS.rb} +184 -217
  142. data/lib/bcdice/game_system/Garako.rb +131 -39
  143. data/lib/bcdice/game_system/GardenOrder.rb +2 -2
  144. data/lib/bcdice/game_system/GehennaAn.rb +1 -1
  145. data/lib/bcdice/game_system/GeishaGirlwithKatana.rb +1 -1
  146. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  147. data/lib/bcdice/game_system/GoldenSkyStories.rb +1 -1
  148. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  149. data/lib/bcdice/game_system/GranCrest.rb +2 -3
  150. data/lib/bcdice/game_system/GundogRevised.rb +1 -1
  151. data/lib/bcdice/game_system/GundogZero.rb +1 -1
  152. data/lib/bcdice/game_system/GurpsFW.rb +2 -3
  153. data/lib/bcdice/game_system/HarnMaster.rb +2 -2
  154. data/lib/bcdice/game_system/HatsuneMiku.rb +1 -2
  155. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  156. data/lib/bcdice/game_system/HuntersMoon.rb +1 -2
  157. data/lib/bcdice/game_system/Illusio.rb +2 -2
  158. data/lib/bcdice/game_system/Insane.rb +90 -717
  159. data/lib/bcdice/game_system/Insane_Korean.rb +7 -719
  160. data/lib/bcdice/game_system/Kamigakari.rb +47 -242
  161. data/lib/bcdice/game_system/Kamigakari_Korean.rb +6 -394
  162. data/lib/bcdice/game_system/KanColle.rb +3 -3
  163. data/lib/bcdice/game_system/KemonoNoMori.rb +1 -1
  164. data/lib/bcdice/game_system/KillDeathBusiness.rb +162 -1144
  165. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +6 -1459
  166. data/lib/bcdice/game_system/KurayamiCrying.rb +1 -1
  167. data/lib/bcdice/game_system/LiveraDoll.rb +2 -2
  168. data/lib/bcdice/game_system/LogHorizon.rb +350 -3379
  169. data/lib/bcdice/game_system/LogHorizon_Korean.rb +55 -1357
  170. data/lib/bcdice/game_system/LostRecord.rb +0 -1
  171. data/lib/bcdice/game_system/LostRoyal.rb +1 -2
  172. data/lib/bcdice/game_system/MagicaLogia.rb +158 -1044
  173. data/lib/bcdice/game_system/MeikyuDays.rb +1 -2
  174. data/lib/bcdice/game_system/MeikyuKingdom.rb +4 -4
  175. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +4 -5
  176. data/lib/bcdice/game_system/MetalHead.rb +1 -1
  177. data/lib/bcdice/game_system/MetalHeadExtream.rb +2 -2
  178. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -1
  179. data/lib/bcdice/game_system/MonotoneMuseum.rb +38 -239
  180. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +10 -270
  181. data/lib/bcdice/game_system/NSSQ.rb +159 -0
  182. data/lib/bcdice/game_system/Nechronica.rb +34 -73
  183. data/lib/bcdice/game_system/Nechronica_Korean.rb +11 -128
  184. data/lib/bcdice/game_system/NeverCloud.rb +1 -1
  185. data/lib/bcdice/game_system/NightWizard.rb +1 -1
  186. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  187. data/lib/bcdice/game_system/NinjaSlayer.rb +12 -11
  188. data/lib/bcdice/game_system/NjslyrBattle.rb +1 -1
  189. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -2
  190. data/lib/bcdice/game_system/OracleEngine.rb +1 -1
  191. data/lib/bcdice/game_system/OrgaRain.rb +2 -2
  192. data/lib/bcdice/game_system/Paradiso.rb +1 -1
  193. data/lib/bcdice/game_system/Paranoia.rb +1 -1
  194. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  195. data/lib/bcdice/game_system/ParasiteBlood.rb +1 -1
  196. data/lib/bcdice/game_system/Peekaboo.rb +22 -122
  197. data/lib/bcdice/game_system/Postman.rb +2 -2
  198. data/lib/bcdice/game_system/PulpCthulhu.rb +3 -3
  199. data/lib/bcdice/game_system/Raisondetre.rb +2 -2
  200. data/lib/bcdice/game_system/RecordOfLodossWar.rb +1 -1
  201. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  202. data/lib/bcdice/game_system/RokumonSekai2.rb +1 -1
  203. data/lib/bcdice/game_system/RuinBreakers.rb +296 -0
  204. data/lib/bcdice/game_system/Ryutama.rb +1 -1
  205. data/lib/bcdice/game_system/SRS.rb +1 -2
  206. data/lib/bcdice/game_system/SamsaraBallad.rb +1 -1
  207. data/lib/bcdice/game_system/Satasupe.rb +1 -2
  208. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  209. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  210. data/lib/bcdice/game_system/ShadowRun5.rb +2 -2
  211. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  212. data/lib/bcdice/game_system/ShinMegamiTenseiKakuseihen.rb +1 -1
  213. data/lib/bcdice/game_system/ShinkuuGakuen.rb +2 -2
  214. data/lib/bcdice/game_system/ShinobiGami.rb +1 -2
  215. data/lib/bcdice/game_system/ShoujoTenrankai.rb +2 -2
  216. data/lib/bcdice/game_system/Skynauts.rb +1 -1
  217. data/lib/bcdice/game_system/SteamPunkers.rb +1 -1
  218. data/lib/bcdice/game_system/StellarKnights.rb +1 -2
  219. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  220. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +1 -2
  221. data/lib/bcdice/game_system/StratoShout.rb +44 -247
  222. data/lib/bcdice/game_system/StratoShout_Korean.rb +6 -282
  223. data/lib/bcdice/game_system/Strave.rb +2 -2
  224. data/lib/bcdice/game_system/SwordWorld.rb +8 -9
  225. data/lib/bcdice/game_system/SwordWorld2_0.rb +2 -3
  226. data/lib/bcdice/game_system/SwordWorld2_5.rb +2 -3
  227. data/lib/bcdice/game_system/TherapieSein.rb +1 -1
  228. data/lib/bcdice/game_system/TokumeiTenkousei.rb +1 -1
  229. data/lib/bcdice/game_system/TokyoGhostResearch.rb +2 -2
  230. data/lib/bcdice/game_system/Torg.rb +2 -2
  231. data/lib/bcdice/game_system/Torg1_5.rb +1 -1
  232. data/lib/bcdice/game_system/TorgEternity.rb +1 -1
  233. data/lib/bcdice/game_system/TrinitySeven.rb +1 -1
  234. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +1 -1
  235. data/lib/bcdice/game_system/TwilightGunsmoke.rb +1 -2
  236. data/lib/bcdice/game_system/UnsungDuet.rb +139 -0
  237. data/lib/bcdice/game_system/Utakaze.rb +1 -1
  238. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  239. data/lib/bcdice/game_system/Villaciel.rb +1 -2
  240. data/lib/bcdice/game_system/Warhammer.rb +1 -1
  241. data/lib/bcdice/game_system/Warhammer4.rb +329 -0
  242. data/lib/bcdice/game_system/WitchQuest.rb +1 -1
  243. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  244. data/lib/bcdice/game_system/YankeeYogSothoth.rb +15 -15
  245. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  246. data/lib/bcdice/game_system/ZettaiReido.rb +1 -1
  247. data/lib/bcdice/game_system/filled_with/cook_tables.rb +119 -0
  248. data/lib/bcdice/game_system/filled_with/lot_tables.rb +155 -0
  249. data/lib/bcdice/loader.rb +6 -8
  250. data/lib/bcdice/preprocessor.rb +15 -40
  251. data/lib/bcdice/repl.rb +1 -1
  252. data/lib/bcdice/result.rb +83 -0
  253. data/lib/bcdice/translate.rb +11 -0
  254. data/lib/bcdice/version.rb +1 -1
  255. metadata +80 -4
@@ -0,0 +1,412 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by Racc 1.5.1
4
+ # from Racc grammar file "".
5
+ #
6
+
7
+ require 'racc/parser.rb'
8
+
9
+
10
+ require "bcdice/common_command/lexer"
11
+ require "bcdice/common_command/upper_dice/node"
12
+ require "bcdice/arithmetic/node"
13
+
14
+ module BCDice
15
+ module CommonCommand
16
+ module UpperDice
17
+ class Parser < Racc::Parser
18
+
19
+
20
+ def self.parse(source)
21
+ new.parse(source)
22
+ end
23
+
24
+ def parse(source)
25
+ @lexer = Lexer.new(source)
26
+ do_parse()
27
+ rescue ParseError
28
+ nil
29
+ end
30
+
31
+ private
32
+
33
+ def next_token
34
+ @lexer.next_token
35
+ end
36
+ ##### State transition tables begin ###
37
+
38
+ racc_action_table = [
39
+ 9, 9, 33, 34, 3, 9, 9, 20, 21, 44,
40
+ 8, 8, 20, 21, 9, 8, 8, 13, 14, 9,
41
+ 20, 21, 4, 15, 8, 20, 21, 9, 10, 8,
42
+ 33, 34, 9, 20, 21, 35, 16, 8, 20, 21,
43
+ 9, 24, 8, 26, 14, 9, 20, 21, 36, 37,
44
+ 8, 20, 21, 9, 41, 8, 33, 34, 9, 20,
45
+ 21, 33, 34, 8, 20, 21, 9, 24, 8, 33,
46
+ 34, 9, 20, 21, 36, 37, 8, 20, 21, 9,
47
+ 16, 8, 36, 37, nil, 20, 21, 33, 34, 8,
48
+ 53, 51, 52, 54 ]
49
+
50
+ racc_action_check = [
51
+ 2, 8, 31, 31, 0, 16, 13, 8, 8, 31,
52
+ 2, 8, 13, 13, 14, 16, 13, 5, 5, 15,
53
+ 14, 14, 1, 5, 14, 15, 15, 20, 4, 15,
54
+ 17, 17, 21, 20, 20, 17, 7, 20, 21, 21,
55
+ 24, 11, 21, 12, 12, 26, 24, 24, 18, 18,
56
+ 24, 26, 26, 33, 23, 26, 27, 27, 34, 33,
57
+ 33, 30, 30, 33, 34, 34, 36, 25, 34, 42,
58
+ 42, 37, 36, 36, 45, 45, 36, 37, 37, 41,
59
+ 29, 37, 46, 46, nil, 41, 41, 49, 49, 41,
60
+ 48, 48, 48, 48 ]
61
+
62
+ racc_action_pointer = [
63
+ -3, 22, -2, nil, 28, 9, nil, 32, -1, nil,
64
+ nil, 20, 35, 4, 12, 17, 3, 22, 38, nil,
65
+ 25, 30, nil, 34, 38, 46, 43, 48, nil, 76,
66
+ 53, -6, nil, 51, 56, nil, 64, 69, nil, nil,
67
+ nil, 77, 61, nil, nil, 64, 72, nil, 87, 79,
68
+ nil, nil, nil, nil, nil ]
69
+
70
+ racc_action_default = [
71
+ -4, -32, -32, -5, -32, -6, -14, -32, -32, -31,
72
+ 55, -9, -6, -32, -32, -32, -32, -32, -18, -21,
73
+ -32, -32, -29, -1, -32, -9, -32, -7, -13, -29,
74
+ -8, -32, -15, -32, -32, -30, -32, -32, -27, -28,
75
+ -3, -32, -10, -2, -11, -16, -17, -19, -22, -12,
76
+ -20, -23, -24, -25, -26 ]
77
+
78
+ racc_goto_table = [
79
+ 17, 38, 39, 6, 11, 23, 30, 31, 1, 7,
80
+ 2, 25, 45, 46, 28, 5, 42, 47, 48, 43,
81
+ 29, 12, 40, 32, 50, nil, nil, nil, nil, nil,
82
+ nil, nil, nil, 49 ]
83
+
84
+ racc_goto_check = [
85
+ 8, 12, 12, 9, 4, 5, 8, 8, 1, 10,
86
+ 2, 4, 11, 11, 9, 3, 8, 12, 12, 5,
87
+ 10, 6, 7, 10, 13, nil, nil, nil, nil, nil,
88
+ nil, nil, nil, 8 ]
89
+
90
+ racc_goto_pointer = [
91
+ nil, 8, 10, 13, -1, -6, 16, -1, -8, 1,
92
+ 7, -21, -19, -24 ]
93
+
94
+ racc_goto_default = [
95
+ nil, nil, nil, nil, nil, nil, nil, nil, 27, nil,
96
+ 22, 18, 19, nil ]
97
+
98
+ racc_reduce_table = [
99
+ 0, 0, :racc_error,
100
+ 4, 23, :_reduce_1,
101
+ 5, 23, :_reduce_2,
102
+ 5, 23, :_reduce_3,
103
+ 0, 24, :_reduce_4,
104
+ 1, 24, :_reduce_5,
105
+ 0, 26, :_reduce_6,
106
+ 2, 26, :_reduce_7,
107
+ 2, 26, :_reduce_8,
108
+ 0, 27, :_reduce_9,
109
+ 2, 27, :_reduce_10,
110
+ 3, 28, :_reduce_11,
111
+ 2, 29, :_reduce_12,
112
+ 3, 25, :_reduce_13,
113
+ 1, 25, :_reduce_14,
114
+ 3, 31, :_reduce_15,
115
+ 3, 30, :_reduce_16,
116
+ 3, 30, :_reduce_17,
117
+ 1, 30, :_reduce_none,
118
+ 3, 33, :_reduce_19,
119
+ 4, 33, :_reduce_20,
120
+ 1, 33, :_reduce_none,
121
+ 0, 35, :_reduce_22,
122
+ 1, 35, :_reduce_23,
123
+ 1, 35, :_reduce_24,
124
+ 1, 35, :_reduce_25,
125
+ 1, 35, :_reduce_26,
126
+ 2, 34, :_reduce_27,
127
+ 2, 34, :_reduce_28,
128
+ 1, 34, :_reduce_none,
129
+ 3, 32, :_reduce_30,
130
+ 1, 32, :_reduce_31 ]
131
+
132
+ racc_reduce_n = 32
133
+
134
+ racc_shift_n = 55
135
+
136
+ racc_token_table = {
137
+ false => 0,
138
+ :error => 1,
139
+ :NUMBER => 2,
140
+ :R => 3,
141
+ :U => 4,
142
+ :C => 5,
143
+ :F => 6,
144
+ :S => 7,
145
+ :PLUS => 8,
146
+ :MINUS => 9,
147
+ :ASTERISK => 10,
148
+ :SLASH => 11,
149
+ :PARENL => 12,
150
+ :PARENR => 13,
151
+ :BRACKETL => 14,
152
+ :BRACKETR => 15,
153
+ :LESS => 16,
154
+ :GREATER => 17,
155
+ :EQUAL => 18,
156
+ :NOT => 19,
157
+ :AT => 20,
158
+ :CMP_OP => 21 }
159
+
160
+ racc_nt_base = 22
161
+
162
+ racc_use_result_var = true
163
+
164
+ Racc_arg = [
165
+ racc_action_table,
166
+ racc_action_check,
167
+ racc_action_default,
168
+ racc_action_pointer,
169
+ racc_goto_table,
170
+ racc_goto_check,
171
+ racc_goto_default,
172
+ racc_goto_pointer,
173
+ racc_nt_base,
174
+ racc_reduce_table,
175
+ racc_token_table,
176
+ racc_shift_n,
177
+ racc_reduce_n,
178
+ racc_use_result_var ]
179
+
180
+ Racc_token_to_s_table = [
181
+ "$end",
182
+ "error",
183
+ "NUMBER",
184
+ "R",
185
+ "U",
186
+ "C",
187
+ "F",
188
+ "S",
189
+ "PLUS",
190
+ "MINUS",
191
+ "ASTERISK",
192
+ "SLASH",
193
+ "PARENL",
194
+ "PARENR",
195
+ "BRACKETL",
196
+ "BRACKETR",
197
+ "LESS",
198
+ "GREATER",
199
+ "EQUAL",
200
+ "NOT",
201
+ "AT",
202
+ "CMP_OP",
203
+ "$start",
204
+ "expr",
205
+ "secret",
206
+ "notations",
207
+ "modifier",
208
+ "target",
209
+ "bracket",
210
+ "at",
211
+ "add",
212
+ "dice",
213
+ "term",
214
+ "mul",
215
+ "unary",
216
+ "round_type" ]
217
+
218
+ Racc_debug_parser = false
219
+
220
+ ##### State transition tables end #####
221
+
222
+ # reduce 0 omitted
223
+
224
+ def _reduce_1(val, _values, result)
225
+ result = UpperDice::Node::Command.new(
226
+ secret: val[0],
227
+ notations: val[1],
228
+ modifier: val[2],
229
+ cmp_op: val[3][:cmp_op],
230
+ target_number: val[3][:target]
231
+ )
232
+
233
+ result
234
+ end
235
+
236
+ def _reduce_2(val, _values, result)
237
+ result = UpperDice::Node::Command.new(
238
+ secret: val[0],
239
+ notations: val[1],
240
+ modifier: val[3],
241
+ cmp_op: val[4][:cmp_op],
242
+ target_number: val[4][:target],
243
+ reroll_threshold: val[2]
244
+ )
245
+
246
+ result
247
+ end
248
+
249
+ def _reduce_3(val, _values, result)
250
+ result = UpperDice::Node::Command.new(
251
+ secret: val[0],
252
+ notations: val[1],
253
+ modifier: val[2],
254
+ cmp_op: val[3][:cmp_op],
255
+ target_number: val[3][:target],
256
+ reroll_threshold: val[4]
257
+ )
258
+
259
+ result
260
+ end
261
+
262
+ def _reduce_4(val, _values, result)
263
+ result = false
264
+ result
265
+ end
266
+
267
+ def _reduce_5(val, _values, result)
268
+ result = true
269
+ result
270
+ end
271
+
272
+ def _reduce_6(val, _values, result)
273
+ result = Arithmetic::Node::Number.new(0)
274
+ result
275
+ end
276
+
277
+ def _reduce_7(val, _values, result)
278
+ result = val[1]
279
+ result
280
+ end
281
+
282
+ def _reduce_8(val, _values, result)
283
+ result = Arithmetic::Node::Negative.new(val[1])
284
+ result
285
+ end
286
+
287
+ def _reduce_9(val, _values, result)
288
+ result = {}
289
+ result
290
+ end
291
+
292
+ def _reduce_10(val, _values, result)
293
+ cmp_op, target = val
294
+ raise ParseError unless cmp_op
295
+
296
+ result = {cmp_op: cmp_op, target: target}
297
+
298
+ result
299
+ end
300
+
301
+ def _reduce_11(val, _values, result)
302
+ result = val[1]
303
+ result
304
+ end
305
+
306
+ def _reduce_12(val, _values, result)
307
+ result = val[1]
308
+ result
309
+ end
310
+
311
+ def _reduce_13(val, _values, result)
312
+ notations = val[0]
313
+ notations.push(val[2])
314
+ result = notations
315
+
316
+ result
317
+ end
318
+
319
+ def _reduce_14(val, _values, result)
320
+ result = [val[0]]
321
+ result
322
+ end
323
+
324
+ def _reduce_15(val, _values, result)
325
+ times = val[0]
326
+ sides = val[2]
327
+ result = UpperDice::Node::Notation.new(times, sides)
328
+
329
+ result
330
+ end
331
+
332
+ def _reduce_16(val, _values, result)
333
+ result = Arithmetic::Node::BinaryOp.new(val[0], :+, val[2])
334
+ result
335
+ end
336
+
337
+ def _reduce_17(val, _values, result)
338
+ result = Arithmetic::Node::BinaryOp.new(val[0], :-, val[2])
339
+ result
340
+ end
341
+
342
+ # reduce 18 omitted
343
+
344
+ def _reduce_19(val, _values, result)
345
+ result = Arithmetic::Node::BinaryOp.new(val[0], :*, val[2])
346
+ result
347
+ end
348
+
349
+ def _reduce_20(val, _values, result)
350
+ divied_class = val[3]
351
+ result = divied_class.new(val[0], val[2])
352
+
353
+ result
354
+ end
355
+
356
+ # reduce 21 omitted
357
+
358
+ def _reduce_22(val, _values, result)
359
+ result = Arithmetic::Node::DivideWithGameSystemDefault
360
+ result
361
+ end
362
+
363
+ def _reduce_23(val, _values, result)
364
+ result = Arithmetic::Node::DivideWithCeil
365
+ result
366
+ end
367
+
368
+ def _reduce_24(val, _values, result)
369
+ result = Arithmetic::Node::DivideWithCeil
370
+ result
371
+ end
372
+
373
+ def _reduce_25(val, _values, result)
374
+ result = Arithmetic::Node::DivideWithRound
375
+ result
376
+ end
377
+
378
+ def _reduce_26(val, _values, result)
379
+ result = Arithmetic::Node::DivideWithFloor
380
+ result
381
+ end
382
+
383
+ def _reduce_27(val, _values, result)
384
+ result = val[1]
385
+ result
386
+ end
387
+
388
+ def _reduce_28(val, _values, result)
389
+ result = Arithmetic::Node::Negative.new(val[1])
390
+ result
391
+ end
392
+
393
+ # reduce 29 omitted
394
+
395
+ def _reduce_30(val, _values, result)
396
+ result = val[1]
397
+ result
398
+ end
399
+
400
+ def _reduce_31(val, _values, result)
401
+ result = Arithmetic::Node::Number.new(val[0])
402
+ result
403
+ end
404
+
405
+ def _reduce_none(val, _values, result)
406
+ val[0]
407
+ end
408
+
409
+ end # class Parser
410
+ end # module UpperDice
411
+ end # module CommonCommand
412
+ end # module BCDice
@@ -0,0 +1,143 @@
1
+ class BCDice::CommonCommand::UpperDice::Parser
2
+ token NUMBER R U C F S PLUS MINUS ASTERISK SLASH PARENL PARENR BRACKETL BRACKETR LESS GREATER EQUAL NOT AT CMP_OP
3
+
4
+ rule
5
+ expr: secret notations modifier target
6
+ {
7
+ result = UpperDice::Node::Command.new(
8
+ secret: val[0],
9
+ notations: val[1],
10
+ modifier: val[2],
11
+ cmp_op: val[3][:cmp_op],
12
+ target_number: val[3][:target]
13
+ )
14
+ }
15
+ | secret notations bracket modifier target
16
+ {
17
+ result = UpperDice::Node::Command.new(
18
+ secret: val[0],
19
+ notations: val[1],
20
+ modifier: val[3],
21
+ cmp_op: val[4][:cmp_op],
22
+ target_number: val[4][:target],
23
+ reroll_threshold: val[2]
24
+ )
25
+ }
26
+ | secret notations modifier target at
27
+ {
28
+ result = UpperDice::Node::Command.new(
29
+ secret: val[0],
30
+ notations: val[1],
31
+ modifier: val[2],
32
+ cmp_op: val[3][:cmp_op],
33
+ target_number: val[3][:target],
34
+ reroll_threshold: val[4]
35
+ )
36
+ }
37
+
38
+ secret: /* none */
39
+ { result = false }
40
+ | S
41
+ { result = true }
42
+
43
+ modifier: /* none */
44
+ { result = Arithmetic::Node::Number.new(0) }
45
+ | PLUS add
46
+ { result = val[1] }
47
+ | MINUS add
48
+ { result = Arithmetic::Node::Negative.new(val[1]) }
49
+
50
+ target: /* none */
51
+ { result = {} }
52
+ | CMP_OP add
53
+ {
54
+ cmp_op, target = val
55
+ raise ParseError unless cmp_op
56
+
57
+ result = {cmp_op: cmp_op, target: target}
58
+ }
59
+
60
+ bracket: BRACKETL add BRACKETR
61
+ { result = val[1] }
62
+
63
+ at: AT add
64
+ { result = val[1] }
65
+
66
+ notations: notations PLUS dice
67
+ {
68
+ notations = val[0]
69
+ notations.push(val[2])
70
+ result = notations
71
+ }
72
+ | dice
73
+ { result = [val[0]] }
74
+
75
+ dice: term U term
76
+ {
77
+ times = val[0]
78
+ sides = val[2]
79
+ result = UpperDice::Node::Notation.new(times, sides)
80
+ }
81
+
82
+ add: add PLUS mul
83
+ { result = Arithmetic::Node::BinaryOp.new(val[0], :+, val[2]) }
84
+ | add MINUS mul
85
+ { result = Arithmetic::Node::BinaryOp.new(val[0], :-, val[2]) }
86
+ | mul
87
+
88
+ mul: mul ASTERISK unary
89
+ { result = Arithmetic::Node::BinaryOp.new(val[0], :*, val[2]) }
90
+ | mul SLASH unary round_type
91
+ {
92
+ divied_class = val[3]
93
+ result = divied_class.new(val[0], val[2])
94
+ }
95
+ | unary
96
+
97
+ round_type: /* none */
98
+ { result = Arithmetic::Node::DivideWithGameSystemDefault }
99
+ | U
100
+ { result = Arithmetic::Node::DivideWithCeil }
101
+ | C
102
+ { result = Arithmetic::Node::DivideWithCeil }
103
+ | R
104
+ { result = Arithmetic::Node::DivideWithRound }
105
+ | F
106
+ { result = Arithmetic::Node::DivideWithFloor }
107
+
108
+ unary: PLUS unary
109
+ { result = val[1] }
110
+ | MINUS unary
111
+ { result = Arithmetic::Node::Negative.new(val[1]) }
112
+ | term
113
+
114
+ term: PARENL add PARENR
115
+ { result = val[1] }
116
+ | NUMBER
117
+ { result = Arithmetic::Node::Number.new(val[0]) }
118
+ end
119
+
120
+ ---- header
121
+
122
+ require "bcdice/common_command/lexer"
123
+ require "bcdice/common_command/upper_dice/node"
124
+ require "bcdice/arithmetic/node"
125
+
126
+ ---- inner
127
+
128
+ def self.parse(source)
129
+ new.parse(source)
130
+ end
131
+
132
+ def parse(source)
133
+ @lexer = Lexer.new(source)
134
+ do_parse()
135
+ rescue ParseError
136
+ nil
137
+ end
138
+
139
+ private
140
+
141
+ def next_token
142
+ @lexer.next_token
143
+ end