pub fn parse_spec(src: &str) -> Result<Spec, SpecError>
Parse a spec.
Recursive descent over tokens, not splitting on punctuation — see crate::lex for why that distinction is load-bearing rather than stylistic.
crate::lex