class Antelope::Generator::CSource

Public Instance Methods

action_for(state) click to toggle source
# File lib/antelope/generator/c_source.rb, line 5
def action_for(state)
  out = ""

  grammar.terminals.each do |terminal|
    action = state[terminal.name]

    if action.size == 2 && action[0] == :state
      out << "#{action[1] + 1}, "
    elsif action.size == 2 &&
      [:reduce, :accept].include?(action[0])
      if $DEBUG
        out << "#{prefix.upcase}STATES + #{action[1] + 1}, "
      else
        out << "#{table.size + action[1] + 1}, "
      end
    else
      out << "0, "
    end

  end

  out.chomp(", ")
end
cify_block(block) click to toggle source
# File lib/antelope/generator/c_source.rb, line 29
def cify_block(block)
  block.gsub(/\$([0-9]+)/, "#{prefix}vals[\\1]")
       .gsub(/\$\$/, "#{prefix}out")
end
generate() click to toggle source
# File lib/antelope/generator/c_source.rb, line 34
def generate
  template "c_source", "#{file}.c"
end