class BCDice::GameSystem::SwordWorld::RatingParser
SwordWorldの威力表コマンドをパースするクラス
Constants
- Racc_arg
- Racc_debug_parser
- Racc_token_to_s_table
Public Class Methods
new(version: :v1_0, round_type: RoundType::CEIL)
click to toggle source
デフォルトの丸めを切り上げとしているが、SwordWorldには切り捨てもあるので決め切れない(四捨五入は現状ない)
Calls superclass method
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 24 def initialize(version: :v1_0, round_type: RoundType::CEIL) super() @version = version @round_type = round_type end
Public Instance Methods
parse(source)
click to toggle source
@param source [String] @return [BCDice::GameSystem::SwordWorld::RatingParsed, nil]
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 37 def parse(source) @lexer = RatingLexer.new(source) do_parse() rescue ParseError, ZeroDivisionError nil end
set_debug()
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 30 def set_debug @yydebug = true return self end
Private Instance Methods
_reduce_1(val, _values, result)
click to toggle source
reduce 0 omitted
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 244 def _reduce_1(val, _values, result) rate, option = val modifier = option[:modifier] || Arithmetic::Node::Number.new(0) result = parsed(rate, modifier, option) result end
_reduce_10(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 322 def _reduce_10(val, _values, result) option, _, _, term = val raise ParseError unless option[:first_to].nil? && option[:first_modify].nil? option[:first_modify] = -(term.to_i) result = option result end
_reduce_11(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 332 def _reduce_11(val, _values, result) option, _ = val raise ParseError unless option[:modifier_after_half].nil? option[:modifier_after_half] = Arithmetic::Node::Number.new(0) result = option result end
_reduce_12(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 342 def _reduce_12(val, _values, result) option, _, term = val raise ParseError unless option[:modifier_after_half].nil? option[:modifier_after_half] = term result = option result end
_reduce_13(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 352 def _reduce_13(val, _values, result) option, _, term = val raise ParseError unless [:v2_5, :v2_0].include?(@version) && option[:rateup].nil? option[:rateup] = term result = option result end
_reduce_14(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 362 def _reduce_14(val, _values, result) option, _, _ = val raise ParseError unless [:v2_5, :v2_0].include?(@version) && option[:greatest_fortune].nil? option[:greatest_fortune] = true result = option result end
_reduce_15(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 372 def _reduce_15(val, _values, result) option, _, term = val raise ParseError unless @version == :v2_5 && option[:kept_modify].nil? option[:kept_modify] = term result = option result end
_reduce_16(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 382 def _reduce_16(val, _values, result) result = val[1] result end
_reduce_17(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 387 def _reduce_17(val, _values, result) result = Arithmetic::Node::Negative.new(val[1]) result end
_reduce_18(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 392 def _reduce_18(val, _values, result) result = Arithmetic::Node::BinaryOp.new(val[0], :+, val[2]) result end
_reduce_19(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 397 def _reduce_19(val, _values, result) result = Arithmetic::Node::BinaryOp.new(val[0], :-, val[2]) result end
_reduce_2(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 252 def _reduce_2(val, _values, result) _, rate, option = val option[:modifier_after_half] ||= Arithmetic::Node::Number.new(0) modifier = option[:modifier] || Arithmetic::Node::Number.new(0) result = parsed(rate, modifier, option) result end
_reduce_20(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 402 def _reduce_20(val, _values, result) result = Arithmetic::Node::BinaryOp.new(val[0], :+, val[2]) result end
_reduce_21(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 407 def _reduce_21(val, _values, result) result = Arithmetic::Node::BinaryOp.new(val[0], :-, val[2]) result end
_reduce_23(val, _values, result)
click to toggle source
reduce 22 omitted
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 414 def _reduce_23(val, _values, result) result = Arithmetic::Node::BinaryOp.new(val[0], :*, val[2]) result end
_reduce_24(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 419 def _reduce_24(val, _values, result) result = Arithmetic::Node::DivideWithGameSystemDefault.new(val[0], val[2]) result end
_reduce_26(val, _values, result)
click to toggle source
reduce 25 omitted
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 427 def _reduce_26(val, _values, result) result = val[1] result end
_reduce_27(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 432 def _reduce_27(val, _values, result) result = Arithmetic::Node::Negative.new(val[1]) result end
_reduce_29(val, _values, result)
click to toggle source
reduce 28 omitted
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 439 def _reduce_29(val, _values, result) result = val[1] result end
_reduce_3(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 261 def _reduce_3(val, _values, result) result = val[1].to_i result end
_reduce_30(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 444 def _reduce_30(val, _values, result) result = Arithmetic::Node::Number.new(val[0]) result end
_reduce_4(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 266 def _reduce_4(val, _values, result) result = {} result end
_reduce_5(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 272 def _reduce_5(val, _values, result) option, term = val raise ParseError unless option[:modifier].nil? option[:modifier] = term result = option result end
_reduce_6(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 282 def _reduce_6(val, _values, result) option, _, term, _ = val raise ParseError unless option[:critical].nil? option[:critical] = term result = option result end
_reduce_7(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 292 def _reduce_7(val, _values, result) option, _, term = val raise ParseError unless option[:critical].nil? option[:critical] = term result = option result end
_reduce_8(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 302 def _reduce_8(val, _values, result) option, _, term = val raise ParseError unless option[:first_to].nil? && option[:first_modify].nil? option[:first_to] = term.to_i result = option result end
_reduce_9(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 312 def _reduce_9(val, _values, result) option, _, _, term = val raise ParseError unless option[:first_to].nil? && option[:first_modify].nil? option[:first_modify] = term.to_i result = option result end
_reduce_none(val, _values, result)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 449 def _reduce_none(val, _values, result) val[0] end
next_token()
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 60 def next_token @lexer.next_token end
parsed(rate, modifier, option)
click to toggle source
# File lib/bcdice/game_system/sword_world/rating_parser.rb, line 46 def parsed(rate, modifier, option) RatingParsed.new.tap do |p| p.rate = rate p.critical = option[:critical]&.eval(@round_type) p.kept_modify = option[:kept_modify]&.eval(@round_type) p.first_to = option[:first_to] p.first_modify = option[:first_modify] p.rateup = option[:rateup]&.eval(@round_type) p.greatest_fortune = option.fetch(:greatest_fortune, false) p.modifier = modifier.eval(@round_type) p.modifier_after_half = option[:modifier_after_half]&.eval(@round_type) end end