class Racc::ParserFileGenerator

def actions

def actions
  @grammar.each do |rule|
    unless rule.action.source?
      raise "racc: fatal: cannot generate parser file when any action is a Proc"
    end
  end
  if @params.result_var?
    decl = ', result'
    retval = "\n    result"
    default_body = ''
  else
    decl = ''
    retval = ''
    default_body = 'val[0]'
  end
  @grammar.each do |rule|
    line
    if rule.action.empty? and @params.omit_action_call?
      line "# reduce #{rule.ident} omitted"
    else
      src0 = rule.action.source || SourceText.new(default_body, __FILE__, 0)
      if @params.convert_line?
        src = remove_blank_lines(src0)
        delim = make_delimiter(src.text)
        @f.printf unindent_auto(<<-End),
          module_eval(<<'%s', '%s', %d)
            def _reduce_%d(val, _values%s)
              %s%s
            end
          %s
        End
                  delim, src.filename, src.lineno - 1,
                    rule.ident, decl,
                    src.text, retval,
                  delim
      else
        src = remove_blank_lines(src0)
        @f.printf unindent_auto(<<-End),
          def _reduce_%d(val, _values%s)
          %s%s
          end
        End
                  rule.ident, decl,
                  src.text, retval
      end
    end
  end
  line
  @f.printf unindent_auto(<<-'End'), decl
    def _reduce_none(val, _values%s)
      val[0]
    end
  End
  line
end