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