module Temill::RaccHack
Public Class Methods
included(klass)
click to toggle source
override all actions and make them call before_reduce/after_reduce before/after each action is executed
# File lib/temill/parser.rb, line 58 def self.included(klass) #racc_action_table, #racc_action_check, #racc_action_default, #racc_action_pointer, #racc_goto_table, #racc_goto_check, #racc_goto_default, #racc_goto_pointer, #racc_nt_base, #racc_reduce_table, #racc_token_table, #racc_shift_n, #racc_reduce_n, #racc_use_result_var = klass::Racc_arg racc_reduce_table = klass::Racc_arg[9] racc_reduce_table.each_slice(3).map{| _,_,method_name | method_name }.uniq.each{| method_name | begin method = klass.instance_method(method_name) rescue NameError next end method.tap{| original_umethod | klass.__send__(:define_method, method_name){| val,_values,result | new_val = before_reduce(val, _values, result) new_result = original_umethod.bind(self).call(new_val, _values, result) after_reduce(val, _values, new_result) } } } end
Public Instance Methods
after_reduce(val, _values, result)
click to toggle source
should return new result
Note that val is equal to the object passed to before_reduce
, not new val returned by before_reduce
# File lib/temill/parser.rb, line 103 def after_reduce(val, _values, result) result end
before_reduce(val, _values, result)
click to toggle source
should return new val
# File lib/temill/parser.rb, line 95 def before_reduce(val, _values, result) val end