Class: BCDice::Command::Parser

Inherits:
Racc::Parser
  • Object
show all
Defined in:
lib/bcdice/command/parser.rb,
lib/bcdice/command/parser.rb

Overview

よくある形式のコマンドのパースを補助するクラス

Examples:

Literal by String

parser = Command::Parser.new("MC", round_type: BCDice::RoundType::FLOOR)
                        .enable_critical
parsed = parser.parse("MC+2*3@30<=10/2-3") #=> <Command::Parsed>

parsed.command #=> "MC"
parsed.modify_number #=> 6
parsed.critical #=> 30
parsed.cmp_op #=> #>=
parsed.target_number #=> 2

Literal by Regexp

parser = Command::Parser.new(/RE\d+/)
parsed = parser.parse("RE44+20") #=> <Command::Parsed>

parsed.command #=> "RE44"
parsed.modify_number #=> 20

Instance Method Summary collapse

Constructor Details

#initialize(*notations, round_type:) ⇒ Parser

Returns a new instance of Parser.



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/bcdice/command/parser.rb', line 40

def initialize(*notations, round_type:)
  super()
  @notations = notations
  @round_type = round_type
  @modifier = true
  @critical = false
  @fumble = false
  @dollar = false
  @allowed_cmp_op = [nil, :>=, :>, :<=, :<, :==, :!=]
  @question_target = false
end

Instance Method Details

#disable_modifierBCDice::Command::Parser

修正値は受け付けないようにする



54
55
56
57
# File 'lib/bcdice/command/parser.rb', line 54

def disable_modifier
  @modifier = false
  self
end

#enable_criticalBCDice::Command::Parser

@によるクリティカル値の指定を許可する



61
62
63
64
# File 'lib/bcdice/command/parser.rb', line 61

def enable_critical
  @critical = true
  self
end

#enable_dollarBCDice::Command::Parser

$による値の指定を許可する



75
76
77
78
# File 'lib/bcdice/command/parser.rb', line 75

def enable_dollar
  @dollar = true
  self
end

#enable_fumbleBCDice::Command::Parser

#によるファンブル値の指定を許可する



68
69
70
71
# File 'lib/bcdice/command/parser.rb', line 68

def enable_fumble
  @fumble = true
  self
end

#enable_question_targetBCDice::Command::Parser

目標値“?”の指定を許可する



91
92
93
94
# File 'lib/bcdice/command/parser.rb', line 91

def enable_question_target
  @question_target = true
  self
end

#parse(source) ⇒ BCDice::Command::Parsed?

Parameters:

  • source (String)

Returns:



98
99
100
101
102
103
# File 'lib/bcdice/command/parser.rb', line 98

def parse(source)
  @lexer = Lexer.new(source, @notations)
  do_parse()
rescue ParseError, ZeroDivisionError
  nil
end

#restrict_cmp_op_to(*ops) ⇒ BCDice::Command::Parser

使用できる比較演算子を制限する。 目標値未入力を許可する場合にはnilを指定する。

Parameters:

  • ops (Array<nil, Symbol>)

    許可する比較演算子の一覧

Returns:



84
85
86
87
# File 'lib/bcdice/command/parser.rb', line 84

def restrict_cmp_op_to(*ops)
  @allowed_cmp_op = ops
  self
end