bcdice 3.0.0.pre.alpha.2 → 3.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (235) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +42 -1
  3. data/README.md +34 -7
  4. data/i18n/DetatokoSaga/ja_jp.yml +3 -2
  5. data/i18n/DetatokoSaga/ko_kr.yml +1 -0
  6. data/i18n/KillDeathBusiness/ja_jp.yml +4 -4
  7. data/i18n/KillDeathBusiness/ko_kr.yml +5 -4
  8. data/i18n/MagicaLogia/ko_kr.yml +564 -0
  9. data/i18n/MonotoneMuseum/ja_jp.yml +40 -4
  10. data/i18n/StratoShout/ja_jp.yml +4 -4
  11. data/i18n/StratoShout/ko_kr.yml +4 -4
  12. data/lib/bcdice.rb +4 -1
  13. data/lib/bcdice/arithmetic.rb +22 -0
  14. data/lib/bcdice/arithmetic/node.rb +112 -43
  15. data/lib/bcdice/arithmetic/parser.rb +240 -0
  16. data/lib/bcdice/arithmetic_evaluator.rb +7 -156
  17. data/lib/bcdice/base.rb +8 -1
  18. data/lib/bcdice/command/lexer.rb +57 -0
  19. data/lib/bcdice/command/parsed.rb +65 -0
  20. data/lib/bcdice/command/parser.rb +489 -0
  21. data/lib/bcdice/common_command.rb +2 -0
  22. data/lib/bcdice/common_command/add_dice.rb +3 -1
  23. data/lib/bcdice/common_command/add_dice/node.rb +142 -69
  24. data/lib/bcdice/common_command/add_dice/parser.rb +100 -83
  25. data/lib/bcdice/common_command/add_dice/randomizer.rb +2 -0
  26. data/lib/bcdice/common_command/barabara_dice.rb +2 -0
  27. data/lib/bcdice/common_command/barabara_dice/node.rb +9 -1
  28. data/lib/bcdice/common_command/barabara_dice/result.rb +22 -0
  29. data/lib/bcdice/common_command/calc.rb +2 -0
  30. data/lib/bcdice/common_command/calc/node.rb +10 -1
  31. data/lib/bcdice/common_command/calc/parser.rb +1 -1
  32. data/lib/bcdice/common_command/d66_dice.rb +5 -1
  33. data/lib/bcdice/common_command/lexer.rb +2 -1
  34. data/lib/bcdice/common_command/upper_dice.rb +2 -0
  35. data/lib/bcdice/common_command/upper_dice/parser.rb +118 -97
  36. data/lib/bcdice/common_command/version.rb +3 -1
  37. data/lib/bcdice/deprecated/checker.rb +6 -6
  38. data/lib/bcdice/dice_table.rb +3 -0
  39. data/lib/bcdice/dice_table/chain_table.rb +2 -0
  40. data/lib/bcdice/dice_table/d66_grid_table.rb +2 -0
  41. data/lib/bcdice/dice_table/d66_parity_table.rb +36 -0
  42. data/lib/bcdice/dice_table/d66_range_table.rb +2 -0
  43. data/lib/bcdice/dice_table/d66_table.rb +2 -0
  44. data/lib/bcdice/dice_table/roll_result.rb +2 -0
  45. data/lib/bcdice/dice_table/table.rb +2 -0
  46. data/lib/bcdice/enum.rb +2 -0
  47. data/lib/bcdice/format.rb +2 -0
  48. data/lib/bcdice/game_system.rb +10 -0
  49. data/lib/bcdice/game_system/AceKillerGene.rb +1 -1
  50. data/lib/bcdice/game_system/AlchemiaStruggle.rb +346 -0
  51. data/lib/bcdice/game_system/Alshard.rb +1 -2
  52. data/lib/bcdice/game_system/Amadeus.rb +1 -1
  53. data/lib/bcdice/game_system/AngelGear.rb +123 -0
  54. data/lib/bcdice/game_system/AnimaAnimus.rb +1 -5
  55. data/lib/bcdice/game_system/ArsMagica.rb +1 -1
  56. data/lib/bcdice/game_system/BBN.rb +7 -5
  57. data/lib/bcdice/game_system/BadLife.rb +2 -2
  58. data/lib/bcdice/game_system/BarnaKronika.rb +1 -1
  59. data/lib/bcdice/game_system/BeastBindTrinity.rb +3 -12
  60. data/lib/bcdice/game_system/BeginningIdol.rb +4 -4
  61. data/lib/bcdice/game_system/BeginningIdol_Korean.rb +4 -4
  62. data/lib/bcdice/game_system/BladeOfArcana.rb +4 -4
  63. data/lib/bcdice/game_system/BlindMythos.rb +12 -10
  64. data/lib/bcdice/game_system/BloodCrusade.rb +54 -80
  65. data/lib/bcdice/game_system/BloodMoon.rb +43 -2
  66. data/lib/bcdice/game_system/CardRanker.rb +24 -64
  67. data/lib/bcdice/game_system/ChaosFlare.rb +4 -4
  68. data/lib/bcdice/game_system/Chill.rb +1 -1
  69. data/lib/bcdice/game_system/CodeLayerd.rb +37 -67
  70. data/lib/bcdice/game_system/ColossalHunter.rb +2 -2
  71. data/lib/bcdice/game_system/Cthulhu.rb +8 -4
  72. data/lib/bcdice/game_system/Cthulhu7th.rb +42 -336
  73. data/lib/bcdice/game_system/Cthulhu7th_ChineseTraditional.rb +1 -1
  74. data/lib/bcdice/game_system/Cthulhu7th_Korean.rb +1 -1
  75. data/lib/bcdice/game_system/CthulhuTech.rb +1 -2
  76. data/lib/bcdice/game_system/DarkBlaze.rb +5 -5
  77. data/lib/bcdice/game_system/DeadlineHeroes.rb +1 -1
  78. data/lib/bcdice/game_system/DesperateRun.rb +163 -0
  79. data/lib/bcdice/game_system/DetatokoSaga.rb +25 -7
  80. data/lib/bcdice/game_system/DetatokoSaga_Korean.rb +3 -3
  81. data/lib/bcdice/game_system/DiceBot.rb +22 -4
  82. data/lib/bcdice/game_system/DiceOfTheDead.rb +1 -1
  83. data/lib/bcdice/game_system/DoubleCross.rb +61 -94
  84. data/lib/bcdice/game_system/EarthDawn.rb +1 -1
  85. data/lib/bcdice/game_system/EarthDawn3.rb +1 -1
  86. data/lib/bcdice/game_system/EarthDawn4.rb +1 -1
  87. data/lib/bcdice/game_system/Elysion.rb +2 -2
  88. data/lib/bcdice/game_system/EmbryoMachine.rb +6 -6
  89. data/lib/bcdice/game_system/EtrianOdysseySRS.rb +1 -2
  90. data/lib/bcdice/game_system/FilledWith.rb +3 -3
  91. data/lib/bcdice/game_system/FullMetalPanic.rb +1 -2
  92. data/lib/bcdice/game_system/GURPS.rb +1 -1
  93. data/lib/bcdice/game_system/Garako.rb +14 -5
  94. data/lib/bcdice/game_system/GardenOrder.rb +1 -1
  95. data/lib/bcdice/game_system/GehennaAn.rb +4 -4
  96. data/lib/bcdice/game_system/GoblinSlayer.rb +1 -1
  97. data/lib/bcdice/game_system/Gorilla.rb +1 -1
  98. data/lib/bcdice/game_system/Gundog.rb +1 -1
  99. data/lib/bcdice/game_system/GundogRevised.rb +3 -3
  100. data/lib/bcdice/game_system/GundogZero.rb +2 -2
  101. data/lib/bcdice/game_system/GurpsFW.rb +2 -5
  102. data/lib/bcdice/game_system/HarnMaster.rb +1 -1
  103. data/lib/bcdice/game_system/HatsuneMiku.rb +2 -2
  104. data/lib/bcdice/game_system/HouraiGakuen.rb +1 -1
  105. data/lib/bcdice/game_system/HuntersMoon.rb +17 -110
  106. data/lib/bcdice/game_system/Illusio.rb +25 -34
  107. data/lib/bcdice/game_system/InfiniteBabeL.rb +518 -0
  108. data/lib/bcdice/game_system/JekyllAndHyde.rb +42 -0
  109. data/lib/bcdice/game_system/JuinKansen.rb +251 -0
  110. data/lib/bcdice/game_system/KanColle.rb +17 -166
  111. data/lib/bcdice/game_system/KillDeathBusiness.rb +35 -44
  112. data/lib/bcdice/game_system/KillDeathBusiness_Korean.rb +2 -1
  113. data/lib/bcdice/game_system/LogHorizon.rb +8 -8
  114. data/lib/bcdice/game_system/LostRoyal.rb +2 -4
  115. data/lib/bcdice/game_system/MagicaLogia.rb +3 -3
  116. data/lib/bcdice/game_system/MagicaLogia_Korean.rb +66 -0
  117. data/lib/bcdice/game_system/MeikyuDays.rb +2 -2
  118. data/lib/bcdice/game_system/MeikyuKingdom.rb +3 -3
  119. data/lib/bcdice/game_system/MeikyuKingdomBasic.rb +3 -3
  120. data/lib/bcdice/game_system/MetalHeadExtream.rb +5 -5
  121. data/lib/bcdice/game_system/MetallicGuardian.rb +1 -2
  122. data/lib/bcdice/game_system/MonotoneMuseum.rb +4 -3
  123. data/lib/bcdice/game_system/MonotoneMuseum_Korean.rb +1 -1
  124. data/lib/bcdice/game_system/NSSQ.rb +2 -2
  125. data/lib/bcdice/game_system/Nechronica.rb +3 -3
  126. data/lib/bcdice/game_system/NeverCloud.rb +540 -5
  127. data/lib/bcdice/game_system/NightWizard.rb +2 -2
  128. data/lib/bcdice/game_system/NightWizard3rd.rb +1 -1
  129. data/lib/bcdice/game_system/NightmareHunterDeep.rb +3 -4
  130. data/lib/bcdice/game_system/NinjaSlayer.rb +30 -41
  131. data/lib/bcdice/game_system/OneWayHeroics.rb +1 -1
  132. data/lib/bcdice/game_system/OracleEngine.rb +14 -18
  133. data/lib/bcdice/game_system/OrgaRain.rb +17 -25
  134. data/lib/bcdice/game_system/Paradiso.rb +3 -3
  135. data/lib/bcdice/game_system/ParanoiaRebooted.rb +1 -1
  136. data/lib/bcdice/game_system/Peekaboo.rb +1 -1
  137. data/lib/bcdice/game_system/PhantasmAdventure.rb +0 -4
  138. data/lib/bcdice/game_system/Postman.rb +1 -1
  139. data/lib/bcdice/game_system/PulpCthulhu.rb +1 -1
  140. data/lib/bcdice/game_system/Raisondetre.rb +1 -1
  141. data/lib/bcdice/game_system/RecordOfLodossWar.rb +8 -7
  142. data/lib/bcdice/game_system/RecordOfSteam.rb +1 -1
  143. data/lib/bcdice/game_system/RokumonSekai2.rb +3 -3
  144. data/lib/bcdice/game_system/RuinBreakers.rb +1 -1
  145. data/lib/bcdice/game_system/RyuTuber.rb +6 -4
  146. data/lib/bcdice/game_system/Ryutama.rb +2 -2
  147. data/lib/bcdice/game_system/SRS.rb +1 -6
  148. data/lib/bcdice/game_system/SamsaraBallad.rb +5 -4
  149. data/lib/bcdice/game_system/Satasupe.rb +90 -865
  150. data/lib/bcdice/game_system/ScreamHighSchool.rb +2 -2
  151. data/lib/bcdice/game_system/SevenFortressMobius.rb +1 -1
  152. data/lib/bcdice/game_system/SharedFantasia.rb +1 -1
  153. data/lib/bcdice/game_system/ShinkuuGakuen.rb +3 -3
  154. data/lib/bcdice/game_system/ShinobiGami.rb +75 -39
  155. data/lib/bcdice/game_system/ShoujoTenrankai.rb +1 -1
  156. data/lib/bcdice/game_system/Skynauts.rb +2 -2
  157. data/lib/bcdice/game_system/SteamPunkers.rb +7 -5
  158. data/lib/bcdice/game_system/StellarKnights.rb +1 -3
  159. data/lib/bcdice/game_system/SterileLife.rb +1 -1
  160. data/lib/bcdice/game_system/StrangerOfSwordCity.rb +2 -2
  161. data/lib/bcdice/game_system/StratoShout.rb +10 -36
  162. data/lib/bcdice/game_system/StratoShout_Korean.rb +2 -1
  163. data/lib/bcdice/game_system/SwordWorld.rb +46 -182
  164. data/lib/bcdice/game_system/SwordWorld2_0.rb +21 -149
  165. data/lib/bcdice/game_system/SwordWorld2_5.rb +126 -40
  166. data/lib/bcdice/game_system/TherapieSein.rb +2 -2
  167. data/lib/bcdice/game_system/TokumeiTenkousei.rb +2 -2
  168. data/lib/bcdice/game_system/Torg.rb +2 -2
  169. data/lib/bcdice/game_system/TorgEternity.rb +5 -8
  170. data/lib/bcdice/game_system/TrinitySeven.rb +2 -2
  171. data/lib/bcdice/game_system/TunnelsAndTrolls.rb +7 -7
  172. data/lib/bcdice/game_system/TwilightGunsmoke.rb +2 -2
  173. data/lib/bcdice/game_system/UnsungDuet.rb +1 -1
  174. data/lib/bcdice/game_system/Utakaze.rb +2 -2
  175. data/lib/bcdice/game_system/VampireTheMasquerade5th.rb +1 -1
  176. data/lib/bcdice/game_system/Warhammer.rb +7 -7
  177. data/lib/bcdice/game_system/Warhammer4.rb +10 -13
  178. data/lib/bcdice/game_system/WorldOfDarkness.rb +1 -1
  179. data/lib/bcdice/game_system/YearZeroEngine.rb +1 -1
  180. data/lib/bcdice/game_system/Yggdrasill.rb +605 -0
  181. data/lib/bcdice/game_system/ZettaiReido.rb +2 -2
  182. data/lib/bcdice/game_system/cthulhu7th/full_auto.rb +294 -0
  183. data/lib/bcdice/game_system/cthulhu7th/rollable.rb +41 -0
  184. data/lib/bcdice/game_system/meikyu_kingdom/item_table.rb +2 -0
  185. data/lib/bcdice/game_system/meikyu_kingdom/kingdom_name_table.rb +2 -0
  186. data/lib/bcdice/game_system/meikyu_kingdom/landscape_table.rb +2 -0
  187. data/lib/bcdice/game_system/meikyu_kingdom/name_tables.rb +2 -0
  188. data/lib/bcdice/game_system/meikyu_kingdom/placename_table.rb +2 -0
  189. data/lib/bcdice/game_system/meikyu_kingdom/tables.rb +2 -0
  190. data/lib/bcdice/game_system/meikyu_kingdom/word_table.rb +2 -0
  191. data/lib/bcdice/game_system/meikyu_kingdom_basic/item_table.rb +2 -0
  192. data/lib/bcdice/game_system/meikyu_kingdom_basic/kingdom_table.rb +2 -0
  193. data/lib/bcdice/game_system/meikyu_kingdom_basic/name_table.rb +2 -0
  194. data/lib/bcdice/game_system/meikyu_kingdom_basic/table.rb +2 -0
  195. data/lib/bcdice/game_system/meikyu_kingdom_basic/word_table.rb +2 -0
  196. data/lib/bcdice/game_system/one_way_heroics/dungeon_table.rb +2 -0
  197. data/lib/bcdice/game_system/one_way_heroics/random_event_table.rb +2 -0
  198. data/lib/bcdice/game_system/one_way_heroics/tables.rb +2 -0
  199. data/lib/bcdice/game_system/satasupe/tables.rb +723 -0
  200. data/lib/bcdice/game_system/sword_world/rating_lexer.rb +47 -0
  201. data/lib/bcdice/game_system/sword_world/rating_parsed.rb +99 -0
  202. data/lib/bcdice/game_system/sword_world/rating_parser.rb +457 -0
  203. data/lib/bcdice/game_system/sword_world/transcendent_test.rb +104 -0
  204. data/lib/bcdice/loader.rb +11 -4
  205. data/lib/bcdice/normalize.rb +3 -1
  206. data/lib/bcdice/preprocessor.rb +12 -8
  207. data/lib/bcdice/randomizer.rb +14 -0
  208. data/lib/bcdice/repl.rb +3 -1
  209. data/lib/bcdice/result.rb +4 -0
  210. data/lib/bcdice/translate.rb +2 -0
  211. data/lib/bcdice/user_defined_dice_table.rb +28 -15
  212. data/lib/bcdice/version.rb +3 -1
  213. metadata +28 -27
  214. data/.editorconfig +0 -21
  215. data/.github/.codecov.yaml +0 -10
  216. data/.github/workflows/coverage.yaml +0 -21
  217. data/.github/workflows/lint.yaml +0 -13
  218. data/.github/workflows/test.yml +0 -20
  219. data/.gitignore +0 -14
  220. data/.rubocop.yml +0 -108
  221. data/.rubocop_todo.yml +0 -114
  222. data/Gemfile +0 -14
  223. data/ROADMAP.md +0 -30
  224. data/Rakefile +0 -152
  225. data/bcdice.gemspec +0 -29
  226. data/bin/repl.rb +0 -21
  227. data/docs/README.txt +0 -2028
  228. data/docs/dicebot_sort_key.md +0 -72
  229. data/docs/how_to_make_dicebot.md +0 -453
  230. data/lib/bcdice/command_parser.rb +0 -242
  231. data/lib/bcdice/common_command/add_dice/parser.y +0 -153
  232. data/lib/bcdice/common_command/barabara_dice/parser.y +0 -107
  233. data/lib/bcdice/common_command/calc/parser.y +0 -79
  234. data/lib/bcdice/common_command/reroll_dice/parser.y +0 -158
  235. data/lib/bcdice/common_command/upper_dice/parser.y +0 -143
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "strscan"
4
+
5
+ module BCDice
6
+ module GameSystem
7
+ class SwordWorld < Base
8
+ class RatingLexer
9
+ SYMBOLS = {
10
+ "+" => :PLUS,
11
+ "-" => :MINUS,
12
+ "*" => :ASTERISK,
13
+ "/" => :SLASH,
14
+ "(" => :PARENL,
15
+ ")" => :PARENR,
16
+ "[" => :BRACKETL,
17
+ "]" => :BRACKETR,
18
+ "@" => :AT,
19
+ "#" => :SHARP,
20
+ "$" => :DOLLAR,
21
+ }.freeze
22
+
23
+ def initialize(source)
24
+ # sourceが空文字だとString#splitが空になる
25
+ source = source&.split(" ", 2)&.first || ""
26
+ @scanner = StringScanner.new(source)
27
+ end
28
+
29
+ def next_token
30
+ return [false, "$"] if @scanner.eos?
31
+
32
+ if (number = @scanner.scan(/\d+/))
33
+ [:NUMBER, number.to_i]
34
+ else
35
+ char = @scanner.getch.upcase
36
+ type = SYMBOLS[char] || char.to_sym
37
+ [type, char]
38
+ end
39
+ end
40
+
41
+ def source
42
+ @scanner.string
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,99 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BCDice
4
+ module GameSystem
5
+ class SwordWorld < Base
6
+ class RatingParsed
7
+ # @return [Integer]
8
+ attr_accessor :rate
9
+
10
+ # @return [Integer, nil]
11
+ attr_writer :critical
12
+
13
+ # @return [Integer, nil]
14
+ attr_writer :kept_modify
15
+
16
+ # @return [Integer, nil]
17
+ attr_writer :first_to
18
+
19
+ # @return [Integer, nil]
20
+ attr_writer :first_modify
21
+
22
+ # @return [Integer, nil]
23
+ attr_writer :rateup
24
+
25
+ # @return [Boolean]
26
+ attr_accessor :greatest_fortune
27
+
28
+ # @return [Integer]
29
+ attr_accessor :modifier
30
+
31
+ # @return [Integer, nil]
32
+ attr_writer :modifier_after_half
33
+
34
+ def initialize
35
+ @critical = nil
36
+ @kept_modify = nil
37
+ @first_to = nil
38
+ @first_modify = nil
39
+ @greatest_fortune = false
40
+ @rateup = nil
41
+ end
42
+
43
+ # @return [Boolean]
44
+ def half
45
+ return !@modifier_after_half.nil?
46
+ end
47
+
48
+ # @return [Integer]
49
+ def critical
50
+ crit = @critical || (half ? 13 : 10)
51
+ crit = 3 if crit < 3
52
+ return crit
53
+ end
54
+
55
+ # @return [Integer]
56
+ def first_modify
57
+ return @first_modify || 0
58
+ end
59
+
60
+ # @return @[Integer]
61
+ def first_to
62
+ return @first_to || 0
63
+ end
64
+
65
+ # @return @[Integer]
66
+ def rateup
67
+ return @rateup || 0
68
+ end
69
+
70
+ # @return @[Integer]
71
+ def kept_modify
72
+ return @kept_modify || 0
73
+ end
74
+
75
+ # @return @[Integer]
76
+ def modifier_after_half
77
+ return @modifier_after_half || 0
78
+ end
79
+
80
+ # @return [String]
81
+ def to_s()
82
+ output = "KeyNo.#{@rate}"
83
+
84
+ output += "c[#{critical}]" if critical < 13
85
+ output += "m[#{Format.modifier(first_modify)}]" if first_modify != 0
86
+ output += "m[#{first_to}]" if first_to != 0
87
+ output += "r[#{rateup}]" if rateup != 0
88
+ output += "gf" if @greatest_fortune
89
+ output += "a[#{Format.modifier(kept_modify)}]" if kept_modify != 0
90
+
91
+ if @modifier != 0
92
+ output += Format.modifier(@modifier)
93
+ end
94
+ return output
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,457 @@
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/arithmetic/node"
11
+ require "bcdice/enum"
12
+ require "bcdice/game_system/sword_world/rating_lexer"
13
+ require "bcdice/game_system/sword_world/rating_parsed"
14
+
15
+ # SwordWorldの威力表コマンドをパースするクラス
16
+ module BCDice
17
+ module GameSystem
18
+ class SwordWorld < Base
19
+
20
+ class RatingParser < Racc::Parser
21
+
22
+
23
+ # デフォルトの丸めを切り上げとしているが、SwordWorldには切り捨てもあるので決め切れない(四捨五入は現状ない)
24
+ def initialize(version: :v1_0, round_type: RoundType::CEIL)
25
+ super()
26
+ @version = version
27
+ @round_type = round_type
28
+ end
29
+
30
+ def set_debug
31
+ @yydebug = true
32
+ return self
33
+ end
34
+
35
+ # @param source [String]
36
+ # @return [BCDice::GameSystem::SwordWorld::RatingParsed, nil]
37
+ def parse(source)
38
+ @lexer = RatingLexer.new(source)
39
+ do_parse()
40
+ rescue ParseError, ZeroDivisionError
41
+ nil
42
+ end
43
+
44
+ private
45
+
46
+ def parsed(rate, modifier, option)
47
+ RatingParsed.new.tap do |p|
48
+ p.rate = rate
49
+ p.critical = option[:critical]&.eval(@round_type)
50
+ p.kept_modify = option[:kept_modify]&.eval(@round_type)
51
+ p.first_to = option[:first_to]
52
+ p.first_modify = option[:first_modify]
53
+ p.rateup = option[:rateup]&.eval(@round_type)
54
+ p.greatest_fortune = option.fetch(:greatest_fortune, false)
55
+ p.modifier = modifier.eval(@round_type)
56
+ p.modifier_after_half = option[:modifier_after_half]&.eval(@round_type)
57
+ end
58
+ end
59
+
60
+ def next_token
61
+ @lexer.next_token
62
+ end
63
+
64
+ ##### State transition tables begin ###
65
+
66
+ racc_action_table = [
67
+ 15, 14, 16, 5, 18, 19, 51, 52, 21, 22,
68
+ 11, 53, 12, 17, 13, 15, 14, 16, 4, 18,
69
+ 19, 4, 8, 3, 28, 11, 28, 12, 17, 13,
70
+ 24, 25, 24, 25, 27, 28, 27, 28, 49, 50,
71
+ 9, 24, 25, 24, 25, 27, 28, 27, 28, 49,
72
+ 50, 35, 24, 25, 24, 25, 27, 28, 27, 28,
73
+ 49, 50, 42, 24, 25, 24, 25, 27, 28, 27,
74
+ 28, 49, 50, 47, 24, 25, 24, 25, 27, 28,
75
+ 27, 28, 49, 50, 48, 24, 25, 24, 25, 27,
76
+ 28, 27, 28, 49, 50, nil, 24, 25, 24, 25,
77
+ 27, 28, 27, 28, 49, 50, nil, 24, 25, 24,
78
+ 25, 27, 30, 27, nil, nil, nil, nil, 31, 32 ]
79
+
80
+ racc_action_check = [
81
+ 6, 6, 6, 1, 6, 6, 45, 45, 10, 10,
82
+ 6, 45, 6, 6, 6, 20, 20, 20, 3, 20,
83
+ 20, 0, 4, 0, 11, 20, 12, 20, 20, 20,
84
+ 11, 11, 12, 12, 11, 14, 12, 15, 37, 37,
85
+ 5, 14, 14, 15, 15, 14, 17, 15, 18, 39,
86
+ 39, 16, 17, 17, 18, 18, 17, 19, 18, 21,
87
+ 40, 40, 23, 19, 19, 21, 21, 19, 22, 21,
88
+ 24, 41, 41, 31, 22, 22, 24, 24, 22, 25,
89
+ 24, 27, 46, 46, 32, 25, 25, 27, 27, 25,
90
+ 49, 27, 50, 56, 56, nil, 49, 49, 50, 50,
91
+ 49, 51, 50, 52, 57, 57, nil, 51, 51, 52,
92
+ 52, 51, 13, 52, nil, nil, nil, nil, 13, 13 ]
93
+
94
+ racc_action_pointer = [
95
+ 18, 3, nil, 15, 20, 40, -4, nil, nil, nil,
96
+ 0, 22, 24, 110, 33, 35, 44, 44, 46, 55,
97
+ 11, 57, 66, 47, 68, 77, nil, 79, nil, nil,
98
+ nil, 71, 82, nil, nil, nil, nil, 28, nil, 39,
99
+ 50, 61, nil, nil, nil, -2, 72, nil, nil, 88,
100
+ 90, 99, 101, nil, nil, nil, 83, 94 ]
101
+
102
+ racc_action_default = [
103
+ -31, -31, -4, -31, -31, -31, -1, -4, -3, 58,
104
+ -5, -31, -31, -31, -11, -31, -31, -31, -31, -31,
105
+ -2, -31, -31, -31, -31, -31, -28, -31, -30, -7,
106
+ -8, -31, -31, -12, -13, -14, -15, -16, -25, -17,
107
+ -18, -19, -6, -26, -27, -31, -22, -9, -10, -31,
108
+ -31, -31, -31, -29, -23, -24, -20, -21 ]
109
+
110
+ racc_goto_table = [
111
+ 23, 29, 2, 33, 34, 7, 36, 37, 39, 1,
112
+ 40, 41, 6, 43, 44, 45, 46, 20, nil, nil,
113
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
114
+ nil, nil, nil, nil, nil, nil, nil, nil, 54, 55,
115
+ 56, 57 ]
116
+
117
+ racc_goto_check = [
118
+ 5, 5, 2, 5, 5, 2, 5, 6, 6, 1,
119
+ 6, 6, 3, 5, 5, 7, 6, 3, nil, nil,
120
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
121
+ nil, nil, nil, nil, nil, nil, nil, nil, 5, 5,
122
+ 6, 6 ]
123
+
124
+ racc_goto_pointer = [
125
+ nil, 9, 2, 10, nil, -11, -11, -12, nil ]
126
+
127
+ racc_goto_default = [
128
+ nil, nil, nil, nil, 10, 38, nil, nil, 26 ]
129
+
130
+ racc_reduce_table = [
131
+ 0, 0, :racc_error,
132
+ 2, 20, :_reduce_1,
133
+ 3, 20, :_reduce_2,
134
+ 2, 21, :_reduce_3,
135
+ 0, 22, :_reduce_4,
136
+ 2, 22, :_reduce_5,
137
+ 4, 22, :_reduce_6,
138
+ 3, 22, :_reduce_7,
139
+ 3, 22, :_reduce_8,
140
+ 4, 22, :_reduce_9,
141
+ 4, 22, :_reduce_10,
142
+ 2, 22, :_reduce_11,
143
+ 3, 22, :_reduce_12,
144
+ 3, 22, :_reduce_13,
145
+ 3, 22, :_reduce_14,
146
+ 3, 22, :_reduce_15,
147
+ 2, 23, :_reduce_16,
148
+ 2, 23, :_reduce_17,
149
+ 3, 23, :_reduce_18,
150
+ 3, 23, :_reduce_19,
151
+ 3, 26, :_reduce_20,
152
+ 3, 26, :_reduce_21,
153
+ 1, 26, :_reduce_none,
154
+ 3, 25, :_reduce_23,
155
+ 3, 25, :_reduce_24,
156
+ 1, 25, :_reduce_none,
157
+ 2, 24, :_reduce_26,
158
+ 2, 24, :_reduce_27,
159
+ 1, 24, :_reduce_none,
160
+ 3, 27, :_reduce_29,
161
+ 1, 27, :_reduce_30 ]
162
+
163
+ racc_reduce_n = 31
164
+
165
+ racc_shift_n = 58
166
+
167
+ racc_token_table = {
168
+ false => 0,
169
+ :error => 1,
170
+ :NUMBER => 2,
171
+ :K => 3,
172
+ :R => 4,
173
+ :H => 5,
174
+ :G => 6,
175
+ :F => 7,
176
+ :PLUS => 8,
177
+ :MINUS => 9,
178
+ :ASTERISK => 10,
179
+ :SLASH => 11,
180
+ :PARENL => 12,
181
+ :PARENR => 13,
182
+ :BRACKETL => 14,
183
+ :BRACKETR => 15,
184
+ :AT => 16,
185
+ :SHARP => 17,
186
+ :DOLLAR => 18 }
187
+
188
+ racc_nt_base = 19
189
+
190
+ racc_use_result_var = true
191
+
192
+ Racc_arg = [
193
+ racc_action_table,
194
+ racc_action_check,
195
+ racc_action_default,
196
+ racc_action_pointer,
197
+ racc_goto_table,
198
+ racc_goto_check,
199
+ racc_goto_default,
200
+ racc_goto_pointer,
201
+ racc_nt_base,
202
+ racc_reduce_table,
203
+ racc_token_table,
204
+ racc_shift_n,
205
+ racc_reduce_n,
206
+ racc_use_result_var ]
207
+
208
+ Racc_token_to_s_table = [
209
+ "$end",
210
+ "error",
211
+ "NUMBER",
212
+ "K",
213
+ "R",
214
+ "H",
215
+ "G",
216
+ "F",
217
+ "PLUS",
218
+ "MINUS",
219
+ "ASTERISK",
220
+ "SLASH",
221
+ "PARENL",
222
+ "PARENR",
223
+ "BRACKETL",
224
+ "BRACKETR",
225
+ "AT",
226
+ "SHARP",
227
+ "DOLLAR",
228
+ "$start",
229
+ "expr",
230
+ "rate",
231
+ "option",
232
+ "modifier",
233
+ "unary",
234
+ "mul",
235
+ "add",
236
+ "term" ]
237
+
238
+ Racc_debug_parser = false
239
+
240
+ ##### State transition tables end #####
241
+
242
+ # reduce 0 omitted
243
+
244
+ def _reduce_1(val, _values, result)
245
+ rate, option = val
246
+ modifier = option[:modifier] || Arithmetic::Node::Number.new(0)
247
+ result = parsed(rate, modifier, option)
248
+
249
+ result
250
+ end
251
+
252
+ def _reduce_2(val, _values, result)
253
+ _, rate, option = val
254
+ option[:modifier_after_half] ||= Arithmetic::Node::Number.new(0)
255
+ modifier = option[:modifier] || Arithmetic::Node::Number.new(0)
256
+ result = parsed(rate, modifier, option)
257
+
258
+ result
259
+ end
260
+
261
+ def _reduce_3(val, _values, result)
262
+ result = val[1].to_i
263
+ result
264
+ end
265
+
266
+ def _reduce_4(val, _values, result)
267
+ result = {}
268
+
269
+ result
270
+ end
271
+
272
+ def _reduce_5(val, _values, result)
273
+ option, term = val
274
+ raise ParseError unless option[:modifier].nil?
275
+
276
+ option[:modifier] = term
277
+ result = option
278
+
279
+ result
280
+ end
281
+
282
+ def _reduce_6(val, _values, result)
283
+ option, _, term, _ = val
284
+ raise ParseError unless option[:critical].nil?
285
+
286
+ option[:critical] = term
287
+ result = option
288
+
289
+ result
290
+ end
291
+
292
+ def _reduce_7(val, _values, result)
293
+ option, _, term = val
294
+ raise ParseError unless option[:critical].nil?
295
+
296
+ option[:critical] = term
297
+ result = option
298
+
299
+ result
300
+ end
301
+
302
+ def _reduce_8(val, _values, result)
303
+ option, _, term = val
304
+ raise ParseError unless option[:first_to].nil? && option[:first_modify].nil?
305
+
306
+ option[:first_to] = term.to_i
307
+ result = option
308
+
309
+ result
310
+ end
311
+
312
+ def _reduce_9(val, _values, result)
313
+ option, _, _, term = val
314
+ raise ParseError unless option[:first_to].nil? && option[:first_modify].nil?
315
+
316
+ option[:first_modify] = term.to_i
317
+ result = option
318
+
319
+ result
320
+ end
321
+
322
+ def _reduce_10(val, _values, result)
323
+ option, _, _, term = val
324
+ raise ParseError unless option[:first_to].nil? && option[:first_modify].nil?
325
+
326
+ option[:first_modify] = -(term.to_i)
327
+ result = option
328
+
329
+ result
330
+ end
331
+
332
+ def _reduce_11(val, _values, result)
333
+ option, _ = val
334
+ raise ParseError unless option[:modifier_after_half].nil?
335
+
336
+ option[:modifier_after_half] = Arithmetic::Node::Number.new(0)
337
+ result = option
338
+
339
+ result
340
+ end
341
+
342
+ def _reduce_12(val, _values, result)
343
+ option, _, term = val
344
+ raise ParseError unless option[:modifier_after_half].nil?
345
+
346
+ option[:modifier_after_half] = term
347
+ result = option
348
+
349
+ result
350
+ end
351
+
352
+ def _reduce_13(val, _values, result)
353
+ option, _, term = val
354
+ raise ParseError unless [:v2_5, :v2_0].include?(@version) && option[:rateup].nil?
355
+
356
+ option[:rateup] = term
357
+ result = option
358
+
359
+ result
360
+ end
361
+
362
+ def _reduce_14(val, _values, result)
363
+ option, _, _ = val
364
+ raise ParseError unless [:v2_5, :v2_0].include?(@version) && option[:greatest_fortune].nil?
365
+
366
+ option[:greatest_fortune] = true
367
+ result = option
368
+
369
+ result
370
+ end
371
+
372
+ def _reduce_15(val, _values, result)
373
+ option, _, term = val
374
+ raise ParseError unless @version == :v2_5 && option[:kept_modify].nil?
375
+
376
+ option[:kept_modify] = term
377
+ result = option
378
+
379
+ result
380
+ end
381
+
382
+ def _reduce_16(val, _values, result)
383
+ result = val[1]
384
+ result
385
+ end
386
+
387
+ def _reduce_17(val, _values, result)
388
+ result = Arithmetic::Node::Negative.new(val[1])
389
+ result
390
+ end
391
+
392
+ def _reduce_18(val, _values, result)
393
+ result = Arithmetic::Node::BinaryOp.new(val[0], :+, val[2])
394
+ result
395
+ end
396
+
397
+ def _reduce_19(val, _values, result)
398
+ result = Arithmetic::Node::BinaryOp.new(val[0], :-, val[2])
399
+ result
400
+ end
401
+
402
+ def _reduce_20(val, _values, result)
403
+ result = Arithmetic::Node::BinaryOp.new(val[0], :+, val[2])
404
+ result
405
+ end
406
+
407
+ def _reduce_21(val, _values, result)
408
+ result = Arithmetic::Node::BinaryOp.new(val[0], :-, val[2])
409
+ result
410
+ end
411
+
412
+ # reduce 22 omitted
413
+
414
+ def _reduce_23(val, _values, result)
415
+ result = Arithmetic::Node::BinaryOp.new(val[0], :*, val[2])
416
+ result
417
+ end
418
+
419
+ def _reduce_24(val, _values, result)
420
+ result = Arithmetic::Node::DivideWithGameSystemDefault.new(val[0], val[2])
421
+
422
+ result
423
+ end
424
+
425
+ # reduce 25 omitted
426
+
427
+ def _reduce_26(val, _values, result)
428
+ result = val[1]
429
+ result
430
+ end
431
+
432
+ def _reduce_27(val, _values, result)
433
+ result = Arithmetic::Node::Negative.new(val[1])
434
+ result
435
+ end
436
+
437
+ # reduce 28 omitted
438
+
439
+ def _reduce_29(val, _values, result)
440
+ result = val[1]
441
+ result
442
+ end
443
+
444
+ def _reduce_30(val, _values, result)
445
+ result = Arithmetic::Node::Number.new(val[0])
446
+ result
447
+ end
448
+
449
+ def _reduce_none(val, _values, result)
450
+ val[0]
451
+ end
452
+
453
+ end # class RatingParser
454
+
455
+ end
456
+ end
457
+ end