rule ipv4_address
    octet "." octet "." octet "." octet {
      def value
        IPAddr.new(text_value)
      end
    }
  end

  rule octet
    three_digit_octet / two_digit_octet / one_digit_octet
  end
  
  rule one_digit_octet
    [0-9]
  end
  
  rule two_digit_octet
    [1-9] [0-9]
  end

  rule three_digit_octet
    "25" [0-4]/ "2" [0-4] [0-9] / "1" [0-9] [0-9]
  end