Value Required NAME (\S+)
Value DESCRIPTION (.+?)
Value PROTOCOL (\S+)
Value SRC_OPERATOR (\S+)
Value SRC_PORT_START (\S+)
Value SRC_PORT_END (\S+)
Value DST_OPERATOR (\S+)
Value DST_PORT_START (\S+)
Value DST_PORT_END (\S+)
Value ICMP_TYPE (\S+)
Value ICMP_CODE (\S+)

Start
  ^object\s+service -> Continue.Record
  ^object\s+service\s+${NAME}\s*$$
  ^\s+description\s+${DESCRIPTION}\s*$$
  ^\s+service\s+${PROTOCOL}(\s+${ICMP_TYPE}(\s+${ICMP_CODE})?)?\s*$$
  ^\s+service\s+${PROTOCOL}(\s+source\s+${SRC_OPERATOR}\s+${SRC_PORT_START}(\s+${SRC_PORT_END})?)?(\s+destination\s+${DST_OPERATOR}\s+${DST_PORT_START}(\s+${DST_PORT_END})?)?\s*$$
  ^. -> Error "Did not match any lines"
