grammar PCL
  rule top
    divs:(division+) ws {
      def pig_hash
        h = {}
        divs.elements.collect do |d|
          data = d.div_data
          h[data[:name]] = data[:cmds]
        end
        return h
      end
    }    
  end

  rule division
    dn:(div_name) ws "DIVISION" ws cmds:(command)* "PIGNAP" ws {
      def div_data
        { :name => dn.div_name,
          :cmds => cmds.elements.collect do |c|
            c.cmd_name
          end
        }
      end
    }
  end

  rule ws
    [ \t\r\n]* 
  end

  rule div_name
    ("PIG" / "BARN" / "POND" / "TROUGH" / "MARKET" / 
      "FENCE" / "MUD" / "HAY" / "BUTCHER" / "TRUFFLES") {
      def div_name
        self.text_value
      end
    }
  end

  rule command
    cmd:("EAT" / "ROLL" / "GRUNT" / "OINK" / "FORWARDS" /
         "LEFT" / "RIGHT" / ("GOTO" ws div_name)) ws {
      def cmd_name
        parts = cmd.text_value.split
        { :cmd => parts[0],
          :arg => parts[1]
        }
      end
    }
  end
end
