Class: Lrama::Reporter::Grammar

Inherits:
Object
  • Object
show all
Defined in:
lib/lrama/reporter/grammar.rb

Instance Method Summary collapse

Constructor Details

#initialize(grammar: false, **_) ⇒ Grammar

Returns a new instance of Grammar.



8
9
10
# File 'lib/lrama/reporter/grammar.rb', line 8

def initialize(grammar: false, **_)
  @grammar = grammar
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
# File 'lib/lrama/reporter/grammar.rb', line 13

def report(io, states)
  return unless @grammar

  io << "Grammar\n"
  last_lhs = nil

  states.rules.each do |rule|
    if rule.empty_rule?
      r = "ε"
    else
      r = rule.rhs.map(&:display_name).join(" ")
    end

    if rule.lhs == last_lhs
      io << sprintf("%5d %s| %s", rule.id, " " * rule.lhs.display_name.length, r) << "\n"
    else
      io << "\n"
      io << sprintf("%5d %s: %s", rule.id, rule.lhs.display_name, r) << "\n"
    end

    last_lhs = rule.lhs
  end
  io << "\n\n"
end