Class: Lrama::Reporter::Rules
- Inherits:
-
Object
- Object
- Lrama::Reporter::Rules
- Defined in:
- lib/lrama/reporter/rules.rb
Instance Method Summary collapse
-
#initialize(rules: false, **_) ⇒ Rules
constructor
A new instance of Rules.
- #report(io, states) ⇒ Object
Constructor Details
#initialize(rules: false, **_) ⇒ Rules
Returns a new instance of Rules.
8 9 10 |
# File 'lib/lrama/reporter/rules.rb', line 8 def initialize(rules: false, **_) @rules = rules end |
Instance Method Details
#report(io, states) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/lrama/reporter/rules.rb', line 13 def report(io, states) return unless @rules used_rules = states.rules.flat_map(&:rhs) unless used_rules.empty? io << "Rule Usage Frequency\n\n" frequency_counts = used_rules.each_with_object(Hash.new(0)) { |rule, counts| counts[rule] += 1 } frequency_counts .select { |rule,| !rule.midrule? } .sort_by { |rule, count| [-count, rule.name] } .each_with_index { |(rule, count), i| io << sprintf("%5d %s (%d times)", i, rule.name, count) << "\n" } io << "\n\n" end unused_rules = states.rules.map(&:lhs).select do |rule| !used_rules.include?(rule) && rule.token_id != 0 end unless unused_rules.empty? io << "#{unused_rules.count} Unused Rules\n\n" unused_rules.each_with_index do |rule, index| io << sprintf("%5d %s", index, rule.display_name) << "\n" end io << "\n\n" end end |