module Take::Unit::PredictMatch

Public Instance Methods

match(name) click to toggle source

Matches the next token of the input. If it is not of the expected type, it raises a SyntaxError. Otherwise, it returns the token.

@param name [Symbol] the token to match. @return [Array] the token. @raise SyntaxError if the peeked token is invalid.

# File lib/take/unit/predict_match.rb, line 32
def match(name)
  if name == peek
    input.next
  else
    raise SyntaxError, "Unexpected token #{peek}"
  end
end
peek() click to toggle source

Returns the type of the next token.

@return [Symbol] the type of the next token.

# File lib/take/unit/predict_match.rb, line 43
def peek
  input.peek[0]
rescue StopIteration
  nil
end
predict(*params, actions) click to toggle source

Makes a prediction based on a set of actions. If the peek token doesn't have an action, it will try the special action `:_`, and then give up. If it finds a corresponding action either time, it will run the action.

@param actions [Hash<Symbol => Symbol>] @return [Object] the result of the compiliation.

# File lib/take/unit/predict_match.rb, line 12
def predict(*params, actions)

  action = actions.fetch(peek) do
    actions.fetch(:_)
  end

  if action.respond_to?(:call)
    action.call(*params)
  else
    send(:"compile_#{action}", *params)
  end
end