class BCDice::CommonCommand::Lexer

Constants

SYMBOLS

Public Class Methods

new(source) click to toggle source
# File lib/bcdice/common_command/lexer.rb, line 22
def initialize(source)
  # sourceが空文字だとString#splitが空になる
  source = source.split(" ", 2).first || ""
  @scanner = StringScanner.new(source)
end

Public Instance Methods

next_token() click to toggle source
# File lib/bcdice/common_command/lexer.rb, line 28
def next_token
  return [false, "$"] if @scanner.eos?

  if (number = @scanner.scan(/\d+/))
    [:NUMBER, number.to_i]
  elsif (cmp_op = @scanner.scan(/[<>!=]+/))
    [:CMP_OP, Normalize.comparison_operator(cmp_op)]
  else
    char = @scanner.getch.upcase
    type = SYMBOLS[char] || char.to_sym
    [type, char]
  end
end
source() click to toggle source
# File lib/bcdice/common_command/lexer.rb, line 42
def source
  @scanner.string
end