Class: CFGHelper::EpsilonFree

Inherits:
Object
  • Object
show all
Defined in:
lib/cfg_helper/epsilon_free.rb

Overview

used to clear a CFG from the epsilon rules

Instance Method Summary collapse

Instance Method Details

#rebuild_rules(current_rules, rules_epsilon_free) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/cfg_helper/epsilon_free.rb', line 22

def rebuild_rules(current_rules, rules_epsilon_free)
  missing_vars = current_rules.keys - rules_epsilon_free.keys

  res = {}
  rules_epsilon_free.each do |key, rules|
    res[key] = []
    rules.each do |rule|
      res[key] << rule.chars
    end
  end

  missing_vars.each { |v| res[v] = current_rules[v] }

  res
end

#run(rules) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/cfg_helper/epsilon_free.rb', line 6

def run(rules)
  epsilon  = _epsilon rules
  rules_ef = {}

  return if epsilon.empty?

  epsilon.each do |e_class|
    cleared_rules     = _cleared_rules rules[e_class]
    epsilon_free_word = cleared_rules.map(&:join)
    grammer           = _grammer_epsilon_free epsilon_free_word, e_class
    rules_ef[e_class] = grammer
  end

  rules_ef
end