```ts
function parseOption(segment: string): string[] {
  const eq = segment.indexOf("=");
  const key = segment.slice(0, eq);
  if (eq === -1 || !/^[A-Za-z][A-Za-z0-9_]*$/.test(key)) {
    throw new Error("malformed option segment: " + segment);
  }
  let raw = segment.slice(eq + 1);
  if (raw.length >= 2 && raw.startsWith('"') && raw.endsWith('"')) {
    raw = raw.slice(1, -1);
  }
  return [key, raw];
}

function scanPairs(input: string): string[][] {
  const pairs: string[][] = [];
  let currentKey = "";
  let currentValue = "";

  for (const segment of input.split(";")) {
    if (segment.startsWith('"')) {
      currentValue += segment.slice(1);
    } else if (segment.endsWith('"')) {
      currentValue += segment.slice(0, -1);
      pairs.push([currentKey, currentValue]);
      currentKey = "";
      currentValue = "";
    } else if (segment.includes("=")) {
      const [key, value] = parseOption(segment);
      pairs.push([key, value]);
      currentKey = key;
      currentValue = value;
    } else {
      currentKey += segment;
    }
  }

  return pairs;
}
```