Sha256: d2d60c97ce6481cfc050e43ebda2024199e43b33081f608ba5df07d9815f6e8c

Contents?: true

Size: 1.53 KB

Versions: 2

Compression:

Stored size: 1.53 KB

Contents

Productions:
<%
len = grammar.all_productions.size.to_s.size
productions = recognizer.states.map(&:rules).inject(:merge).
  select(&:final?).map { |x| [x.to_s(false), x.production.block] }
body = productions.map { |_| _[0].size }.max
productions.each do |prod|
-%>
  <%= sprintf("%-#{body}s", prod[0]) %> <%= prod[1] %>
<% end -%>

<% if unused_symbols.any? -%>
Symbols unused in grammar:
  <%- unused_symbols.each do |sym| -%>
  <%= sym %>
  <%- end -%>
<%- end -%>

Precedence:
  --- highest
<% grammar.precedence.each do |pr| -%>
  <%= format("%-8s", pr.type) %> <%= pr.level %>:
    <%= "{" << pr.tokens.to_a.join(", ") << "}" %>
<%- end -%>
  --- lowest

<%
states = grammar.states.to_a
table.each_with_index do |v, i|
  state = states[i]
-%>
  State <%= i %>:
  <%- state.rules.each do |rule| -%>
    <%= rule %>
      {<%= rule.lookahead.to_a.join(", ") %>}
<%
  end
  transitions = v.each.select { |_, a| a && a[0] == :state }
  reductions  = v.each.select { |_, a| a && a[0] == :reduce}
  accepting   = v.each.select { |_, a| a && a[0] == :accept}
  thing = [:transitions, :reductions, :accepting]
  num_type = {
    transitions: "State",
    reductions: "Rule",
    accepting: "Rule"
  }
  h = Hash[thing.zip([transitions, reductions, accepting])]
  h.each do |key, value|
    next unless value.any?
-%>
    <%= key %>:
<%
    value.each do |token, (_, name)|
      token_value = grammar.terminals.
        find { |_| _.name == token } || token
-%>
      <%= token_value %>: <%= num_type[key] %> <%= name %>
      <%- end -%>
    <%- end -%>

<%- end -%>

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
antelope-0.4.1 lib/antelope/generator/templates/info.erb
antelope-0.4.0 lib/antelope/generator/templates/info.erb