```python
import re


def parse_option(segment: str) -> list:
    key, eq, raw = segment.partition("=")
    if not eq or re.fullmatch(r"[A-Za-z][A-Za-z0-9_]*", key) is None:
        raise ValueError("malformed option segment: " + segment)
    if len(raw) >= 2 and raw.startswith('"') and raw.endswith('"'):
        raw = raw[1:-1]
    return [key, raw]


def scan_pairs(text: str) -> list:
    if not isinstance(text, str) or text == "":
        raise ValueError("invalid input")

    result = {}
    pairs = re.findall(r'"([^"]*)"|[^;]+', text)
    for segment in pairs:
        key, eq, raw = segment.partition("=")
        if not eq or re.fullmatch(r"[A-Za-z][A-Za-z0-9_]*", key) is None:
            raise ValueError("malformed option segment: " + segment)
        if len(raw) >= 2 and raw.startswith('"') and raw.endswith('"'):
            raw = raw[1:-1]
        if key in result:
            raise ValueError("repeated key: " + key)
        result[key] = raw

    return list(result.items())
```