class BCDice::CommonCommand::AddDice::Parser

Constants

Racc_arg
Racc_debug_parser
Racc_token_to_s_table

Public Class Methods

parse(source) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 19
def self.parse(source)
  new.parse(source)
end

Public Instance Methods

parse(source) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 23
def parse(source)
  @lexer = Lexer.new(source)
  do_parse()
rescue ParseError
  nil
end

Private Instance Methods

_reduce_1(val, _values, result) click to toggle source

reduce 0 omitted

# File lib/bcdice/common_command/add_dice/parser.rb, line 218
def _reduce_1(val, _values, result)
           secret, lhs = val
           raise ParseError unless lhs.include_dice?

           result = Node::Command.new(secret, lhs)

    result
end
_reduce_10(val, _values, result) click to toggle source

reduce 9 omitted

# File lib/bcdice/common_command/add_dice/parser.rb, line 271
def _reduce_10(val, _values, result)
      lhs = val[0]
      rhs = val[2]
      result = Node::BinaryOp.new(lhs, :*, rhs)

    result
end
_reduce_11(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 279
def _reduce_11(val, _values, result)
       lhs = val[0]
       rhs = val[2]
       divied_class = val[3]
       result = divied_class.new(lhs, rhs)

    result
end
_reduce_13(val, _values, result) click to toggle source

reduce 12 omitted

# File lib/bcdice/common_command/add_dice/parser.rb, line 290
def _reduce_13(val, _values, result)
 result = Node::DivideWithGameSystemDefault
    result
end
_reduce_14(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 295
def _reduce_14(val, _values, result)
 result = Node::DivideWithRoundingDown
    result
end
_reduce_15(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 300
def _reduce_15(val, _values, result)
 result = Node::DivideWithRoundingUp
    result
end
_reduce_16(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 305
def _reduce_16(val, _values, result)
 result = Node::DivideWithRoundingUp
    result
end
_reduce_17(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 310
def _reduce_17(val, _values, result)
 result = Node::DivideWithRoundingOff
    result
end
_reduce_18(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 315
def _reduce_18(val, _values, result)
 result = val[1]
    result
end
_reduce_19(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 320
def _reduce_19(val, _values, result)
         body = val[1]
         result = body.is_a?(Node::Negate) ? body.body : Node::Negate.new(body)

    result
end
_reduce_2(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 227
def _reduce_2(val, _values, result)
           secret, lhs, cmp_op, rhs = val
           raise ParseError if !lhs.include_dice? || rhs.include_dice? || cmp_op.nil?

           result = Node::Command.new(secret, lhs, cmp_op, rhs)

    result
end
_reduce_21(val, _values, result) click to toggle source

reduce 20 omitted

# File lib/bcdice/common_command/add_dice/parser.rb, line 329
def _reduce_21(val, _values, result)
        times = val[0]
        sides = val[2]
        raise ParseError if times.include_dice? || sides.include_dice?

        result = Node::DiceRoll.new(times, sides)

    result
end
_reduce_22(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 339
def _reduce_22(val, _values, result)
        times = val[0]
        raise ParseError if times.include_dice?

        result = Node::ImplicitSidesDiceRoll.new(times)

    result
end
_reduce_23(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 348
def _reduce_23(val, _values, result)
        times = val[0]
        sides = val[2]
        filter = val[3]
        n_filtering = val[4]
        raise ParseError if times.include_dice? || sides.include_dice? || n_filtering.include_dice?

        result = Node::DiceRollWithFilter.new(times, sides, n_filtering, filter)

    result
end
_reduce_25(val, _values, result) click to toggle source

reduce 24 omitted

# File lib/bcdice/common_command/add_dice/parser.rb, line 362
def _reduce_25(val, _values, result)
 result = Node::DiceRollWithFilter::KEEP_HIGHEST
    result
end
_reduce_26(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 367
def _reduce_26(val, _values, result)
 result = Node::DiceRollWithFilter::KEEP_LOWEST
    result
end
_reduce_27(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 372
def _reduce_27(val, _values, result)
 result = Node::DiceRollWithFilter::DROP_HIGHEST
    result
end
_reduce_28(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 377
def _reduce_28(val, _values, result)
 result = Node::DiceRollWithFilter::DROP_LOWEST
    result
end
_reduce_29(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 382
def _reduce_29(val, _values, result)
 result = Node::Parenthesis.new(val[1])
    result
end
_reduce_3(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 236
def _reduce_3(val, _values, result)
 result = false
    result
end
_reduce_30(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 387
def _reduce_30(val, _values, result)
 result = Node::Number.new(val[0])
    result
end
_reduce_4(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 241
def _reduce_4(val, _values, result)
 result = true
    result
end
_reduce_6(val, _values, result) click to toggle source

reduce 5 omitted

# File lib/bcdice/common_command/add_dice/parser.rb, line 248
def _reduce_6(val, _values, result)
 result = Node::UndecidedTarget.instance
    result
end
_reduce_7(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 253
def _reduce_7(val, _values, result)
      lhs = val[0]
      op, rhs = expand_negate(:+, val[2])
      result = Node::BinaryOp.new(lhs, op, rhs)

    result
end
_reduce_8(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 261
def _reduce_8(val, _values, result)
      lhs = val[0]
      op, rhs = expand_negate(:-, val[2])
      result = Node::BinaryOp.new(lhs, op, rhs)

    result
end
_reduce_none(val, _values, result) click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 392
def _reduce_none(val, _values, result)
  val[0]
end
expand_negate(op, rhs) click to toggle source

加減算の右辺が負数である場合に加減算を逆転させる

# File lib/bcdice/common_command/add_dice/parser.rb, line 37
def expand_negate(op, rhs)
  if rhs.is_a?(Node::Negate)
    if op == :+
      return [:-, rhs.body]
    elsif op == :-
      return [:+, rhs.body]
    end
  end

  [op, rhs]
end
next_token() click to toggle source
# File lib/bcdice/common_command/add_dice/parser.rb, line 32
def next_token
  @lexer.next_token
end