Row grammar

All 14 scenarios passing

How a single line divides into fields, before any field is read as a value: unquoted pipes are the separators, a missing field is null, and quotes are the only thing that protects a pipe from splitting the row. Each Row below is parsed as the sole data row under a one-column header; Fields shows the captured field list printed back out. It is text rather than a list column because a list value cannot hold a null element — writing [a, , c] is itself a parse error — and null fields are exactly what these rules are about.