class Pione::Lang::RuleBindingDeclaration

RuleBindingDeclaration is a declaration for rule binding stentences.

Public Instance Methods

eval(env) click to toggle source

Update rule table with the rule name and reference definition. e.g. “rule A := B”

# File lib/pione/lang/declaration.rb, line 177
def eval(env)
  # rule name
  refs = get_reference(env, expr1, RuleExprSequence)

  refs.pieces.each do |ref|
    referents = expr2.eval!(env)
    referents.pieces.each do |referent|
      # merge param sets
      definition = env.rule_get_value(referent)
      param_sets = definition.param_sets.merge(referent.param_sets)
      _referent = referent.set(param_sets: param_sets)

      # update rule table
      env.rule_set(ref, _referent)
    end
  end
end