code: public NmeaMessage parse(String line) {
          LinkedHashMap<String, String> tags = Maps.newLinkedHashMap();
  
          String remaining;
          if (line.startsWith("\\")) {
              int tagFinish = line.lastIndexOf('\\', line.length() - 1);
              if (tagFinish == -1)
                  throw new NmeaMessageParseException(
                          "no matching \\ symbol to finish tag block: " + line);
              if (tagFinish == 0)
                  throw new NmeaMessageParseException("tag block is empty or not terminated");
              tags = extractTags(line.substring(1, tagFinish));
              remaining = line.substring(tagFinish + 1);
          } else
              remaining = line;
  
          String[] items;
          String checksum;
          if (remaining.length() > 0) {
              if (!remaining.contains("*"))
                  throw new NmeaMessageParseException("checksum delimiter * not found");
              items = getNmeaItems(remaining);
              // TODO validate message using checksum
              checksum = line.substring(line.indexOf('*') + 1);
          } else {
              items = new String[] {};
              // TODO decide what value to put here
              checksum = "";
          }
  
          return new NmeaMessage(tags, Arrays.asList(items), checksum);
      }
docs: Return an {@link NmeaMessage} from the given NMEA line.
  
  @param line
  @return