Skip to content

Commit

Permalink
simplify evaluate_step function
Browse files Browse the repository at this point in the history
  • Loading branch information
rubysolo committed Mar 15, 2014
1 parent 604205c commit 1c27961
Showing 1 changed file with 12 additions and 8 deletions.
20 changes: 12 additions & 8 deletions lib/dentaku/evaluator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -58,19 +58,23 @@ def find_rule_match(pattern, token_stream)
end

def evaluate_step(token_stream, start, length, evaluator)
expr = token_stream.slice!(start, length)
substream = token_stream.slice!(start, length)

if self.respond_to?(evaluator)
token_stream.insert start, *self.send(evaluator, *expr)
token_stream.insert start, *self.send(evaluator, *substream)
else
func = Rules.func(evaluator)
raise "unknown evaluator '#{evaluator.to_s}'" if func.nil?
result = user_defined_function(evaluator, substream)
token_stream.insert start, result
end
end

arguments = extract_arguments_from_function_call(expr).map { |t| t.value }
return_value = func.body.call(*arguments)
def user_defined_function(evaluator, tokens)
function = Rules.func(evaluator)
raise "unknown function '#{ evaluator }'" unless function

token_stream.insert start, Token.new(func.type, return_value)
end
arguments = extract_arguments_from_function_call(tokens).map { |t| t.value }
return_value = function.body.call(*arguments)
Token.new(function.type, return_value)
end

def extract_arguments_from_function_call(tokens)
Expand Down

0 comments on commit 1c27961

Please sign in to comment.