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,107 @@
1
+ class BCDice::CommonCommand::BarabaraDice::Parser
2
+ token NUMBER B 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 target
6
+ {
7
+ result = Node::Command.new(
8
+ secret: val[0],
9
+ notations: val[1],
10
+ cmp_op: val[2][:cmp_op],
11
+ target_number: val[2][:target]
12
+ )
13
+ }
14
+
15
+ secret: /* none */
16
+ { result = false }
17
+ | S
18
+ { result = true }
19
+
20
+ target: /* none */
21
+ { result = {} }
22
+ | CMP_OP add
23
+ {
24
+ cmp_op, target = val
25
+ raise ParseError unless cmp_op
26
+
27
+ result = {cmp_op: cmp_op, target: target}
28
+ }
29
+
30
+ notations: notations PLUS dice
31
+ {
32
+ notations = val[0]
33
+ notations.push(val[2])
34
+ result = notations
35
+ }
36
+ | dice
37
+ { result = [val[0]] }
38
+
39
+ dice: term B term
40
+ {
41
+ times = val[0]
42
+ sides = val[2]
43
+ result = Node::Notation.new(times, sides)
44
+ }
45
+
46
+ add: add PLUS mul
47
+ { result = Arithmetic::Node::BinaryOp.new(val[0], :+, val[2]) }
48
+ | add MINUS mul
49
+ { result = Arithmetic::Node::BinaryOp.new(val[0], :-, val[2]) }
50
+ | mul
51
+
52
+ mul: mul ASTERISK unary
53
+ { result = Arithmetic::Node::BinaryOp.new(val[0], :*, val[2]) }
54
+ | mul SLASH unary round_type
55
+ {
56
+ divied_class = val[3]
57
+ result = divied_class.new(val[0], val[2])
58
+ }
59
+ | unary
60
+
61
+ round_type: /* none */
62
+ { result = Arithmetic::Node::DivideWithGameSystemDefault }
63
+ | U
64
+ { result = Arithmetic::Node::DivideWithCeil }
65
+ | C
66
+ { result = Arithmetic::Node::DivideWithCeil }
67
+ | R
68
+ { result = Arithmetic::Node::DivideWithRound }
69
+ | F
70
+ { result = Arithmetic::Node::DivideWithFloor }
71
+
72
+ unary: PLUS unary
73
+ { result = val[1] }
74
+ | MINUS unary
75
+ { result = Arithmetic::Node::Negative.new(val[1]) }
76
+ | term
77
+
78
+ term: PARENL add PARENR
79
+ { result = val[1] }
80
+ | NUMBER
81
+ { result = Arithmetic::Node::Number.new(val[0]) }
82
+ end
83
+
84
+ ---- header
85
+
86
+ require "bcdice/common_command/lexer"
87
+ require "bcdice/common_command/reroll_dice/node"
88
+ require "bcdice/arithmetic/node"
89
+
90
+ ---- inner
91
+
92
+ def self.parse(source)
93
+ new.parse(source)
94
+ end
95
+
96
+ def parse(source)
97
+ @lexer = Lexer.new(source)
98
+ do_parse()
99
+ rescue ParseError
100
+ nil
101
+ end
102
+
103
+ private
104
+
105
+ def next_token
106
+ @lexer.next_token
107
+ end
@@ -1,38 +1,15 @@
1
+ require "bcdice/common_command/calc/parser"
2
+
1
3
  module BCDice
2
4
  module CommonCommand
3
- class Calc
5
+ module Calc
4
6
  PREFIX_PATTERN = /C/.freeze
5
7
 
6
- # @param command [String]
7
- # @param _randomizer [Randomizer]
8
- # @param game_system [Base]
9
- def initialize(command, _randomizer, game_system)
10
- @command = command
11
- @game_system = game_system
12
-
13
- @is_secret = false
14
- end
15
-
16
- # @return [Boolean]
17
- def secret?
18
- @is_secret
19
- end
20
-
21
- # @return [String, nil]
22
- def eval
23
- m = %r{^(S)?C([\+\-\*/\d\(\)]+)$}i.match(@command)
24
- unless m
25
- return nil
26
- end
27
-
28
- @is_secret = !m[1].nil?
29
- expr = ArithmeticEvaluator.new(m[2], round_type: @game_system.round_type)
30
- value = expr.eval()
31
- if expr.error?
32
- return nil
8
+ class << self
9
+ def eval(command, game_system, _randomizer)
10
+ cmd = Parser.parse(command)
11
+ cmd&.eval(game_system.round_type)
33
12
  end
34
-
35
- return "計算結果 > #{value}"
36
13
  end
37
14
  end
38
15
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module CommonCommand
5
+ module Calc
6
+ module Node
7
+ class Command
8
+ def initialize(secret:, expr:)
9
+ @secret = secret
10
+ @expr = expr
11
+ end
12
+
13
+ def eval(round_type)
14
+ value =
15
+ begin
16
+ @expr.eval(round_type)
17
+ rescue ZeroDivisionError
18
+ "ゼロ除算が発生したため計算できませんでした"
19
+ end
20
+
21
+ Result.new.tap do |r|
22
+ r.secret = @secret
23
+ r.text = "計算結果 > #{value}"
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,271 @@
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/calc/node"
12
+ require "bcdice/arithmetic/node"
13
+
14
+ module BCDice
15
+ module CommonCommand
16
+ module Calc
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
+ 14, 3, 14, 15, 16, 4, 10, 11, 10, 11,
40
+ 13, 14, 13, 14, 17, 18, 5, 10, 11, 10,
41
+ 11, 13, 14, 13, 14, 17, 18, 6, 10, 11,
42
+ 10, 11, 13, 14, 13, 14, 17, 18, nil, 10,
43
+ 11, 10, 11, 13, nil, 13, 15, 16, nil, nil,
44
+ nil, 26, 30, 28, 29, 31 ]
45
+
46
+ racc_action_check = [
47
+ 5, 0, 10, 7, 7, 1, 5, 5, 10, 10,
48
+ 5, 11, 10, 13, 8, 8, 2, 11, 11, 13,
49
+ 13, 11, 15, 13, 16, 22, 22, 4, 15, 15,
50
+ 16, 16, 15, 17, 16, 18, 23, 23, nil, 17,
51
+ 17, 18, 18, 17, nil, 18, 21, 21, nil, nil,
52
+ nil, 21, 25, 25, 25, 25 ]
53
+
54
+ racc_action_pointer = [
55
+ -6, 5, 11, nil, 27, -2, nil, -5, 4, nil,
56
+ 0, 9, nil, 11, nil, 20, 22, 31, 33, nil,
57
+ nil, 38, 15, 26, nil, 49, nil, nil, nil, nil,
58
+ nil, nil ]
59
+
60
+ racc_action_default = [
61
+ -2, -20, -20, -3, -20, -20, 32, -1, -6, -9,
62
+ -20, -20, -17, -20, -19, -20, -20, -20, -20, -15,
63
+ -16, -20, -4, -5, -7, -10, -18, -8, -11, -12,
64
+ -13, -14 ]
65
+
66
+ racc_goto_table = [
67
+ 7, 1, 19, 20, 22, 23, 2, 27, 21, 24,
68
+ 25 ]
69
+
70
+ racc_goto_check = [
71
+ 3, 1, 5, 5, 4, 4, 2, 6, 3, 5,
72
+ 5 ]
73
+
74
+ racc_goto_pointer = [
75
+ nil, 1, 6, -5, -11, -8, -18, nil ]
76
+
77
+ racc_goto_default = [
78
+ nil, nil, nil, nil, 8, 9, nil, 12 ]
79
+
80
+ racc_reduce_table = [
81
+ 0, 0, :racc_error,
82
+ 3, 15, :_reduce_1,
83
+ 0, 16, :_reduce_2,
84
+ 1, 16, :_reduce_3,
85
+ 3, 17, :_reduce_4,
86
+ 3, 17, :_reduce_5,
87
+ 1, 17, :_reduce_none,
88
+ 3, 18, :_reduce_7,
89
+ 4, 18, :_reduce_8,
90
+ 1, 18, :_reduce_none,
91
+ 0, 20, :_reduce_10,
92
+ 1, 20, :_reduce_11,
93
+ 1, 20, :_reduce_12,
94
+ 1, 20, :_reduce_13,
95
+ 1, 20, :_reduce_14,
96
+ 2, 19, :_reduce_15,
97
+ 2, 19, :_reduce_16,
98
+ 1, 19, :_reduce_none,
99
+ 3, 21, :_reduce_18,
100
+ 1, 21, :_reduce_19 ]
101
+
102
+ racc_reduce_n = 20
103
+
104
+ racc_shift_n = 32
105
+
106
+ racc_token_table = {
107
+ false => 0,
108
+ :error => 1,
109
+ :NUMBER => 2,
110
+ :R => 3,
111
+ :U => 4,
112
+ :C => 5,
113
+ :F => 6,
114
+ :S => 7,
115
+ :PLUS => 8,
116
+ :MINUS => 9,
117
+ :ASTERISK => 10,
118
+ :SLASH => 11,
119
+ :PARENL => 12,
120
+ :PARENR => 13 }
121
+
122
+ racc_nt_base = 14
123
+
124
+ racc_use_result_var = true
125
+
126
+ Racc_arg = [
127
+ racc_action_table,
128
+ racc_action_check,
129
+ racc_action_default,
130
+ racc_action_pointer,
131
+ racc_goto_table,
132
+ racc_goto_check,
133
+ racc_goto_default,
134
+ racc_goto_pointer,
135
+ racc_nt_base,
136
+ racc_reduce_table,
137
+ racc_token_table,
138
+ racc_shift_n,
139
+ racc_reduce_n,
140
+ racc_use_result_var ]
141
+
142
+ Racc_token_to_s_table = [
143
+ "$end",
144
+ "error",
145
+ "NUMBER",
146
+ "R",
147
+ "U",
148
+ "C",
149
+ "F",
150
+ "S",
151
+ "PLUS",
152
+ "MINUS",
153
+ "ASTERISK",
154
+ "SLASH",
155
+ "PARENL",
156
+ "PARENR",
157
+ "$start",
158
+ "expr",
159
+ "secret",
160
+ "add",
161
+ "mul",
162
+ "unary",
163
+ "round_type",
164
+ "term" ]
165
+
166
+ Racc_debug_parser = false
167
+
168
+ ##### State transition tables end #####
169
+
170
+ # reduce 0 omitted
171
+
172
+ def _reduce_1(val, _values, result)
173
+ result = Node::Command.new(
174
+ secret: val[0],
175
+ expr: val[2]
176
+ )
177
+
178
+ result
179
+ end
180
+
181
+ def _reduce_2(val, _values, result)
182
+ result = false
183
+ result
184
+ end
185
+
186
+ def _reduce_3(val, _values, result)
187
+ result = true
188
+ result
189
+ end
190
+
191
+ def _reduce_4(val, _values, result)
192
+ result = Arithmetic::Node::BinaryOp.new(val[0], :+, val[2])
193
+ result
194
+ end
195
+
196
+ def _reduce_5(val, _values, result)
197
+ result = Arithmetic::Node::BinaryOp.new(val[0], :-, val[2])
198
+ result
199
+ end
200
+
201
+ # reduce 6 omitted
202
+
203
+ def _reduce_7(val, _values, result)
204
+ result = Arithmetic::Node::BinaryOp.new(val[0], :*, val[2])
205
+ result
206
+ end
207
+
208
+ def _reduce_8(val, _values, result)
209
+ divied_class = val[3]
210
+ result = divied_class.new(val[0], val[2])
211
+
212
+ result
213
+ end
214
+
215
+ # reduce 9 omitted
216
+
217
+ def _reduce_10(val, _values, result)
218
+ result = Arithmetic::Node::DivideWithGameSystemDefault
219
+ result
220
+ end
221
+
222
+ def _reduce_11(val, _values, result)
223
+ result = Arithmetic::Node::DivideWithCeil
224
+ result
225
+ end
226
+
227
+ def _reduce_12(val, _values, result)
228
+ result = Arithmetic::Node::DivideWithCeil
229
+ result
230
+ end
231
+
232
+ def _reduce_13(val, _values, result)
233
+ result = Arithmetic::Node::DivideWithRound
234
+ result
235
+ end
236
+
237
+ def _reduce_14(val, _values, result)
238
+ result = Arithmetic::Node::DivideWithFloor
239
+ result
240
+ end
241
+
242
+ def _reduce_15(val, _values, result)
243
+ result = val[1]
244
+ result
245
+ end
246
+
247
+ def _reduce_16(val, _values, result)
248
+ result = Arithmetic::Node::Negative.new(val[1])
249
+ result
250
+ end
251
+
252
+ # reduce 17 omitted
253
+
254
+ def _reduce_18(val, _values, result)
255
+ result = val[1]
256
+ result
257
+ end
258
+
259
+ def _reduce_19(val, _values, result)
260
+ result = Arithmetic::Node::Number.new(val[0])
261
+ result
262
+ end
263
+
264
+ def _reduce_none(val, _values, result)
265
+ val[0]
266
+ end
267
+
268
+ end # class Parser
269
+ end # module Calc
270
+ end # module CommonCommand
271
+ end # module BCDice